RPC小谈
RPC:
- 应用分布在不同的机器上,无法共用内存空间,或者在一台机器内通过本地调用无法完成相关的需求,比如不同的系统之间的通讯,甚至不同组织之间的通讯。此外由于机器的横向扩展,需要在多台机器组成的集群上部署应用等等。
- RPC是远程过程调用协议,允许程序调用另一个地址空间的过程或函数,不需要显示编码远程调用细节
- 使程序员从网络处理中释放出来,在分布式环境下编程变得简单,无需关心底层网络实现细节和协议仅关注业务逻辑实现
- RPC的核心问题在于进程间通信时,减少网络编码的成本和出错概率
- 核心内容:通信协议、编码协议、序列化格式

RPC调用过程:
- 客户端对传输内容进行序列化、协议编码、网络传输到远程服务器端
- 服务端接收内容后解码、反序列化完成数据逻辑计算,产生输出后以同样的方式传递给客户端
RPC框架:
- 除了调用过程的基本上功能外,通常还会有负载均衡、容错机制、服务注册发现功能
- 服务注册发现:鉴别调用哪些机器,哪些机器可用
- 容错机制:分布式环境下网络不稳定问题
- 负载均衡:合理使用机器和网络资源,保证各个机器的稳定程度
RPC和HTTP:
- HTTP :提供标准的报文格式,都认可的通讯特性等,对外暴露出标准的网络编程接口。
- RPC :针对某些领域的特定场景提供具有更灵活、可定制的、更加保密的协议。可以把RPC理解是通讯协议之上,站在服务的角度,做的更高一级的封装。
- RPC框架:dubbo、motan、rpcx、grpc、thrift
RPC架构的基础组件:
- 客户端(Client):服务调用方(服务消费者)
- 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端
- 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
- 服务端(Server):服务的真正提供者
调用核心原理图

RPC服务调用过程:
- Client通过本地调用方式调用服务
- Client Stub接收到请求后将方法、入参等信息通过序列化组装
- Client Stub找到远程的服务地址,并通过网络发生消息给Server
- Server Stub接收到消息后进行解码(反序列化)
- Server Stub根据解码结果调用本地服务进行相关处理
- 本地服务处理后将结果会返回给Server Stub
- Server Stub将返回结果通过序列化组装并通过网络发送给Client
- Client Stub接收消息并进行解码(反序列化)
- Client得到最终结果
本文来自博客园,作者:难得,转载请注明原文链接:https://www.cnblogs.com/zhangbLearn/p/18829306

浙公网安备 33010602011771号