微服务优化之使用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、下一代微服务框架... 一文带你彻底搞懂!
文章每周持续更新,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( ...
随机推荐
- PAT甲级——1033 To Fill or Not to Fill
1033 To Fill or Not to Fill With highways available, driving a car from Hangzhou to any other city i ...
- The General Addition Rule|complementation rule|special addition rule|
5.3 Some Rules of Probability 如图所示,AorB是所有蓝色区域,所以P(AorB)=PA+PB,但是若非互斥事件,则不能直接相加: If you think of the ...
- 5-6 学生CPP成绩计算
给出下面的人员基类框架: class Person { protected: string name; int age; public: Person(); Person (string p_name ...
- vue2.0学习之基础内容
import BScroll from 'better-scroll'; import star from '../star/star.vue'; import split from '../spli ...
- <USACO09DEC>视频游戏的麻烦Video Game Troublesの思路
emm今天模拟赛的题.神奇地A了 #include<cstdio> #include<cstring> #include<iostream> #include< ...
- 手撸GBDT原理(未完成)
一直对GBDT里面的具体计算逻辑不太清楚,在网上发现了一篇好博客. 先上总结的关系图 GBDT对类别变量是怎么处理的? 这些东西都是在网上发现的,讲的挺好的. GBDT原理与Sklearn源码分析-回 ...
- django框架进阶-admin-长期维护
############### django--admin的使用 ################ # django后台管理: # 第一步: # 在settings文件中修改语言和时区 L ...
- H5页面如何引入vConsole
vConsole github地址vConsole 是腾讯开源的项目,这就简单的介绍一下使用 使用npm引入vconsole.min.js下载 vConsole 的最新版本.(不要直接下载 dev 分 ...
- linux下载文件到本地_把linux服务器的文件下到本地windows
tar -cvf script.tar scriptsz script.tar 文件夹先要打包,并且要指定打包的名字. 具体: sz/rz命令: 一般来说,linux服务器大多是通过ssh来进行远 ...
- python django ORM
1.在models.py中创创建类 # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db imp ...