微服务优化之使用gRPC做微服务的内部通信
使用gRPC做微服务的内部通信
gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性。
大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSON,来开发微服务内部的通信接口。
什么是gRPC?
gRPC是一个高性能的、开源的、普遍通用的RPC框架。简单地说,它能够帮助我们建立透明的服务端和客户端通信系统。Google开发了GRPC并且将其开源。 通过它,一个客户端消费者服务可以像调用本地方法一样,调用另一台主机上面的服务端方法。 gRPC本质上仍然遵循常规的Remote Procedure Call (RPC) 技术,但是在实现上使用了HTTP2.0、协议缓冲区等更现代化的技术方案,从而最大程度上确保服务端和客户端的互操作性及性能上的提升。
服务之间如何使用gRPC通信?
当客户端向服务端发起请求的时候,客户端gRPC类库使用协议缓冲区并且封装远程过程调用(RPC),并且将其通过HTTP2发送到服务端。服务端将其拆封,并且使用协议缓冲区调用对应的程序。响应数据的过程和发送请求的过程是类似的,只不过一个是从客户端到服务端,一个是从服务端到客户端。
从开发的角度,在服务端和客户端使用gRPC最大的好处在于:你的服务端的代码和客户端的代码不需要担心它会影响你解析JSON或者其他类似的文本格式消息。gRPC虽然接收到的是二进制格式,但会并将其反序列化为对象。同样的我们可以通过IDL来定义服务接口,IDL是非常强大的一个特性,帮助我们处理多个微服务之间的互操作。
为什么gRPC是高效的?
- 它基于HTTP2构建,既支持传统的请求-响应模型,也支持双向流模型。
- 可以将JSON数据转换到协议缓冲区
- 多路复用
- 双向流模型
- 网络传输的是二进制数据,相对于JSON等文本数据更加轻量级。
- 多语言支持
什么时候使用gRPC?
最初,几乎所有的微服务之间都是通过JSON数据接口通信的,一个服务可能调用空一个服务或者多个服务,被调用的服务可能还调用其他服务。如果其中任何一个服务运行缓慢,将影响整个系统的运行速度,因为RESTful(JSON) API不支持HTTP2的多路复用和双向流模型。传统的RESTful接口使用JSON、XML或者其他的一些格式作为数据载体,使得服务运行缓慢,内存占用较高、并且传输过程没有压缩。
gRPC解决所有的这些问题,但是它仅仅用于系统应用微服务之间的通信的情况,系统的对外服务接口仍然使用HTTP-JSON接口。这样保证对外部用户的开发技术栈没有任何影响。
总结 Conclusion
与传统REST API相比,使用gRPC创建的API可以为你的应用带来令人难以置信的性能改进。
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
微服务优化之使用gRPC做微服务的内部通信的更多相关文章
- 让 gRPC 提供 REST 服务
让 gRPC 提供 REST 服务 Intro gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计. gRPC 基于 HTTP/2 标准设计,带来诸如双向流.流控.头部 ...
- 企业级Web Nginx 服务优化
企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C% ...
- grpc 实现微服务生态笔记
微服务的发展可谓是一波三折,一代一代经历和N多技术成果,grpc只是其中一个,因为其东家是google,明显比较稳定.加上其强大的文档和技术支持和跨平台的支持,在企业级应用上有很大的可信任感,所以也有 ...
- 微服务架构攀登之路(四)之使用gRPC构建微服务
做一个处理用户信息的微服务 客户端通过用户名,可以从服务端查询用户的基本信息 gRPC proto user.proto 定义客户端请求.服务端响应的数据格式 user.pb.go 自动生成的,为数据 ...
- 使用 Spring Cloud Sleuth、Elastic Stack 和 Zipkin 做微服务监控
关于迁移微服务架构,最常被提及的挑战莫过于监控.每个微服务应独立于其他服务的运行环境,所以他们之间不会共享如数据源.日志文件等资源. 然而,较容易的查看服务的调用历史,并且能够查看多个微服务的请求传播 ...
- 用Nacos做微服务架构里的服务注册与发现中心
转自:https://www.jianshu.com/p/61608ff86344 Nacos 另一个非常重要的特性就是服务注册与发现,说到服务的注册与发现相信大家应该都不陌生,在微服务盛行的今天,服 ...
- 如何基于gRPC沟通微服务框架
本文我们来讲解一下如何使用 gRPC构建微服务,gRPC是一个开源框架,可用于构建可扩展且高性能的微服务并创建服务之间的通信. 背景 随着企业越来越多地转向微服务,对构建这些微服务的低延迟和可扩展框架 ...
- 微服务统一登陆认证怎么做?JWT ?
无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ...
- 面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!
文章每周持续更新,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( ...
随机推荐
- python编程练习题目
github上面的一个项目,分为level1,level2,level3 三个等级的难度. 题目地址 一部分中文翻译 python教程 剑指offer,python3实现 python进阶 练习题1: ...
- maven中 pom 文件各个标签的作用
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Linux 杀死进程方法大全(kill,killall)
杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常 ...
- LinkedList源码剖析
LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈.队列和双端队列来使用. LinkedList同样是非线程安全 ...
- Java面试题1-附答案
List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高 ...
- MySQL数据库简单操作
title date tags layout MySQL简单操作 2018-07-16 Linux post 登录mysql mysql -h 主机名 -u 用户名 -p 查看所有数据库 show d ...
- 对TD tree的使用体验及建议
TDtree与QQ空间有着相似的功能,你可以在里面发表自己的感受与心情,也可以存储照片或者给喜欢的说说点赞.发表评论等,可以说这是一个将QQ空间从QQ里独立出来的软件.作为一个娱乐性的软件,它的功能还 ...
- java课java方法动手动脑
动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) { ...
- iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码
iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...
- LNOI 2019 旁观记
真.懵逼. 退役选手进队了......我忽然后悔自己没去摸鱼...... 但是想一想毕竟有三分之一限制,我也搞不过那帮大佬...... 毕竟zhx还提前一周复习了一下呢 挂一个zhx大佬的博客 传送门 ...