RPC是什么

定义

在分布式环境中,像调用本地方法一样调用远程方法。RPC 这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出。在 Nelson 的论文 "Implementing Remote Procedure Calls" 中指出实现 RPC 的程序包括 5 个部分:

  1. User
  2. User-stub
  3. RPCRuntime
  4. Server-stub
  5. Server

这里的stub就是proxy,负责做一些协议相关的处理。

这里 user 就是 client 端,当 user 想发起一个远程调用时,它实际是通过本地调用 user-stub。user-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。远端 RPCRuntime 实例收到请求后交给 server-stub 进行解码后发起本地端调用,调用结果再返回给 user 端。


由于是跨主机调用,就带来了几个新的问题:

  • Call Id的映射:客户端和服务端如何对要调用的代码达成一致。一种常用的方法是客户端和服务端需要维护一份调用方法和Call Id之间的映射,当客户端调用指定方法时,如 remoteFunctionA(),找出对应的id,发送给服务端,服务端收到后再根据id查下对应的函数,并且执行对应的代码。
  • 序列化和反序列化:客户端和服务端需要通过网络传输数据,而且服务端和客户端使用的语言可能不一样,这时就需要使用双方都认可的协议进行序列化或反序列化。
  • 网络传输:远程调用发生在网络中,客户端和服务端的连接,数据的传输都需要网络,而且由于网络的不确定性,需要做各种处理如熔断、容错等。

不过有很多的RPC框架帮我们做了这些,使调用者像调用本地方法一样,如Dubbo、Thrift、gRpc等。

posted @ 2020-05-21 18:05  walterlee  阅读(255)  评论(0编辑  收藏  举报