• RPC定义:

RPC(Romote Procedure Call):远程过程调用,允许一台计算机程序远程调用另外一台计算机的子程序,不用关心底层网络通信。
在socket基础上实现,比socket需要更多资源。

  • RPC调用过程
  • RPC_序列化

  • 图解RPC原理
  • 整个调用过程主要经过以下几个步骤:
    1 建立通信
    2 主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
    3 服务寻址
    可靠的寻址方式(主要是提供服务的发现)是RPC的实现基石,比如可以采用redis或者zookeeper来注册服务等等。
  • RPC_序列化_02

  • 服务注册发现机制

从服务提供者的角度看:当提供者服务启动时,需要自动向注册中心注册服务;
当提供者服务停止时,需要向注册中心注销服务;
提供者需要定时向注册中心发送心跳,一段时间未收到来自提供者的心跳后,认为提供者已经停止服务,从注册中心上摘取掉对应的服务。
从调用者的角度看:调用者启动时订阅注册中心的消息并从注册中心获取提供者的地址;
当有提供者上线或者下线时,注册中心会告知到调用者;
调用者下线时,取消订阅。

4 网络传输:序列化和反序列化

B机器进行本地调用(通过代理Proxy)之后得到了返回值,此时还需要再把返回值发送回A机器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A机器,而当A机器接收到这些返回值之后,则再次进行反序列化操作,恢复为内存中的表达方式,最后再交给A机器上的应用进行相关处理(一般是业务逻辑处理操作)。

  • RPC 调用过程
  • RPC_序列化_03

  • RPC调用过程
  • 应用代码重点参考4

参考:
1 ​​​微服务系列:RPC框架的实现原理,及RPC架构组件详解​​​

2 ​​阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景​

3 ​​sofa-pbrpc​​​

4 ​​高性能Java RPC框架Dubbo与zookeeper的使用​