gRPC是一项进程间通信技术,可以用来连接、调用、操作、调试分布式异构应用程序,就像调用本地函数一样。gRPC主要采用同步的请求-响应进行通信,但建立连接后,它可以完全以异步模式进行操作。
1. gRPC起源
2015年,谷歌发布开源RPC框架gRPC,gRPC基础设施具有标准化、可通用和跨平台的特点,很多大型公司大规模采用gRPC,例如Docker、CoreOS等,接着gRPC加入云原生计算基金会(CNCF),这是最受欢迎的开源软件基金会之一,它致力于让云原生计算具备通用性和可持续性。
2. gRPC的优点
1)高性能
gRPC的高性能得益于其使用
http2 + protocol buffer
的技术栈,protocol buffer
是gRPC的接口定义语言(IDL),定义远程调用的方法名字、参数、返回值等,protocol buffer
的压缩效率较高。http2以frame为最小单位,支持在一个tcp的链接上运行多组http2 frame
帧,不同组别的frame
运行在不同的stream
流,该方式允许多个stream
流并发运行,提高执行效率。
2)多语言支持
protocol buffer
的服务定义是中立语言,可使用不同语言的插件将proto文件编译为特定语言的接口文件。
3)双工流
gRPC在客户端、服务端支持流传输,报文可在
Stream
上双向传输,且多个Stream
之间逻辑隔离,提高Stream
的并发处理能力。
3.gRPC的缺点
1)开发流程复杂
需要优先生成
IDL
文件,编译为特定语言接口文件,每次的接口修改都需要重复上述操作,带来开发流程的复杂性。
2)技术生态小
很多浏览器不支持
http2
协议,无法通过浏览器直接访问gRPC服务。postman、nginx
对于gRPC的支持刚刚起步,也包括移动应用程序。
总结
gRPC协议在今天使用越来越广泛,很多微服务组件之间、分布式集群之间使用gRPC进行通信,gRPC是众多开源技术软件的核心底层通信服务,无论是面试还是实际应用,掌握gRPC、熟练应用gRPC已经是我们的基本技能要求。
本教程的学习思路技术实战应用 + 原理剖析,目标是充分理解gRPC
内部运行原理,同时熟练使用gRPC
的各种特性,所以本教程适合想要阅读gRPC
源码的同学使用,如果仅仅想要熟练应用,可能会觉得部分教程内容云里雾里、无法深入理解。同时需要同学反复阅读gRPC
代码来加深理解,看教程的时间应该远小于阅读源码的时间,希望在gRPC学习的路上各位都能有所成就。
教学大纲:
参考:《gRPC与云原生应用开发》