高效的微服务通信-gRpc
gRPC是由谷歌开发的高性能开源RPC框架,以其低性能开销、高传输效率和多语言支持而闻名,在微服务架构中得到了广泛应用。它与Kubernetes和Istio服务网格体系的集成能力出色,成为这些架构下RPC通信的首选方案之一。
在技术层面,gRPC底层通信依托于HTTP/2协议,并采用protobuf进行数据的序列化与反序列化,以确保高效的数据传输。它原生支持C、Java和Go三种编程语言,其中Java版本的网络通信部分利用Netty框架来实现。
什么是gRPC?
gRPC是谷歌推出的一款高性能开源RPC框架,具有性能开销小、传输效率高、支持多种编程语言的特点,在微服务架构中广泛使用,gRPC能够和Kubernetes/Istio服务网格体系良好集成,是该架构下RPC方案的首选之一。
gRPC底层使用HTTP2协议实现网络通信,使用protobuf进行数据序列化和反序列化,原生支持C、Java、Go三种编程语言,Java中网络通信部分使用Netty框架实现,对于NodeJS、C#、Python等其它编程语言的支持则是通过C语言支持间接实现的。
官方网站:https://grpc.io/
官方Github仓库:https://github.com/grpc
gRPC的优势:
应用广泛:由于gRPC有Google公司背书,目前gRPC归属于CNCF基金会的项目,应用比较广泛且生态良好,gRPC也能够和Kubernetes/Istio服务网格体系无缝集成。
跨语言支持:支持大部分主流开发语言和框架,比如Java、Go、C、NodeJS、Python、C#等均能集成gRPC。
高性能:gRPC基于HTTP/2协议,支持多路复用、流控制、头部压缩等功能,性能要远高于Restful、SOAP等基于文本和HTTP网络协议的RPC方式。
强类型:protobuf通过自定义的IDL定义消息,它采用强类型语法,满足工业级的使用场景。
流式处理:gRPC基于HTTP2进行通信,对异步进行了支持,还能够实现流式客户端、流式服务端、以及全双工通信,这是Restful、SOAP等RPC方式所不具备的。
gRPC的四种通信方式
基于HTTP2协议,gRPC支持如下4种通信方式:
Unary RPC:Unary RPC遵循传统的请求-响应模型,客户端发送一个请求给服务器,然后等待服务器的单个响应。这种模式适用于不需要长时间连接的场景,例如查询订单信息等。 Server Stream RPC:是一种服务器端流式RPC,允许客户端发送一个请求后,服务器端可以发送多个响应消息,客户端从返回的流中读取,直到没有更多消息为止,可以用于实现服务端实时推送数据等场景。 Client Stream RPC:允许客户端向服务器发送一系列消息,服务器在接收完所有消息后返回一个响应,可以用于实现分片上传大文件、Iot设备不断发送消息等场景。 Bidirectional Streaming RPC:是一种允许客户端和服务端同时发送和接收多个消息的通信模式,这可以理解为一种全双工通信,可以用来实现聊天和实时游戏等场景。