初步印象
RPC的语义是远程过程调用。
在一般的印象中,就是将一个服务调用封装在一个本地方法中,让调用者像使用本地方法一样调用服务,对其屏蔽实现细节。而具体的实现是通过调用方和服务方的一套约定,基于TCP长连接进行数据交互达成。
上面的解释似云里雾里,仅仅了解到这种程度是远远不够的,还需要更进一步,以相对底层和抽象的视角来理解RPC。
三个特点
广义上来讲,所有本应用程序外的调用都可以归类为RPC,不管是分布式服务,第三方服务的HTTP接口,还是读写Redis的一次请求。从抽象的角度来讲,它们都一样是RPC,由于不在本地执行,都有三个特点:
- 需要事先约定调用的语义(接口语法)
- 需要网络传输
- 需要约定网络传输中的内容格式
gRPC HTTP2.0 Protobuf
gRPC是一款RPC框架,也是本系列的主角,在性能和版本兼容上做了提升和让步:
- Protobuf进行数据编码,提高数据压缩率
- 使用HTTP2.0弥补了HTTP1.1的不足
- 同样在调用方和服务方使用协议约定文件,提供参数可选,为版本兼容留下缓冲空间
protobuf是一款用C++开发的跨语言、二进制编码的数据序列化协议,以超高的压缩率著称。