RPC Remote Protocal Call
RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。
支持多语言的 RPC 框架
Google 的 gRPC,当前支持 C、Java 和 Go 语言
Apache(Facebook)的 Thrift
支持特定语言的 RPC 框架
新浪微博的 Motan
阿里的 Dubbo
gRPC
通信协议基于标准的 HTTP/2 设计
序列化支持 PB(Protocol Buffer)和 JSON
服务端:
proto将服务接口实现类实例注册到 gRPC 内部的服务注册中心上,请求消息接入之后,可以根据服务名和方法名,直接调用启动时注册的服务实例,而不需要通过反射的方式进行调用,性能更优。
调用流程
gRPC 的客户端请求消息由 Netty Http2ConnectionHandler 接入,
由 gRPC 负责将 PB 消息(或者 JSON)反序列化为 POJO 对象,
然后通过服务定义查询到该消息对应的接口实例,
发起本地 Java 接口调用,调用完成之后,将响应消息反序列化为 PB(或者 JSON),
通过 HTTP2 Frame 发送给客户端。