在大规模的复杂互联网业务中,RPC框架是构建后端分布式系统必不可少的一个基础组件。它通过封装序列化/反序列化、网络IO操作、网络报文传输等诸多细节,有的甚至集成服务注册、监控与运营等功能,让开发人员专注于业务逻辑的开发,大幅提升了业务开发团队的工作效率。那如此强大的RPC框架究竟是个什么样的工作原理呢?今天,我们就对RPC来做一个全面的了解。
什么是RPC
RPC,Remote Procudure Call,中文译为远程过程调用。过程调用就可以理解我们常说的函数调用,远程过程调用是说调用服务端的接口跟调用本地接口一样方便。
如上图所示,RPC框架把底层的通信细节做了封装,业务代码如同调用一个本地函数一样完成业务功能。
如果没有RPC框架,我们要调用一个服务端接口,必须按如下步骤进行:
- 创建一个本地socket
- 使用TCP连接服务端socket(这里假设使用TCP进行通信)
- 组装请求报文,并序列化
- 调用send()发送请求报文
- 调用recv()收取服务端的回包
- 如果通信结束,调用close()关闭本地socket
我们看到这个过程及其繁琐,而且繁琐的同时增加了出错的概率。RPC框架解决的问题就是把上述公共流程封装为库,让业务直接使用。
业界有哪些好用的RPC框架
- thrift
- thrift是由Facebook于2007年开源的RPC框架,支持C++、Java、Python、PHP、go等多种语言,被认为是业界比较优秀的RPC框架。
- gRPC
- gRPC是Google开源的基于HTTP/2和ProtoBuf构建的通用RPC框架。
- bRPC
- 百度开源的RPC框架,无论是代码质量还是文档都非常优秀,在百度也经历了多个业务的线上考验,非常值得推荐。
- Tars
- 腾讯的开源的RPC框架,支持C++、Java,在传统RPC框架的基础上还集成了服务监控、运营等周边系统,在腾讯内部使用广泛。