RPC

RPC(Remote Procedure Call),即远程过程调用,是一个分布式系统间通信的必备技术。RPC 最核心要解决的问题就是在分布式系统间,如何执行另外一个地址空间上的函数、方法,就仿佛在本地调用一样。

rpc是远端过程调用,其调用协议通常包含传输协议和编码协议

传输(Transport)

TCP 协议是 RPC 的 基石,一般来说通信是建立在 TCP 协议之上的,而且 RPC 往往需要可靠的通信,因此不采用 UDP。 RPC 传输的 message 也就是 TCP body 中的数据,这个 message 也同样可以包含 header+body。body 也经常叫做 payload。 TCP 协议栈存在端口的概念,端口是进程获取数据的渠道。

I/O 模型(I/O Model)

做一个高性能 /scalable 的 RPC,需要能够满足:

  • 服务端尽可能多的处理并发请求

  • 同时尽可能短的处理完毕。

Socket I/O 可以看做是二者之间的桥梁,如何更好地协调二者,去满足前面说的两点要求,有一些模式(pattern)是可以应用的。RPC 框架可选择的 I/O 模型严格意义上有 5 种,这里不讨论基于 信号驱动 的 I/O(Signal Driven I/O)。它们分别是:

  • 传统的阻塞 I/O(Blocking I/O)

  • 非阻塞 I/O(Non-blocking I/O)

  • I/O 多路复用(I/O multiplexing)

  • 异步 I/O(Asynchronous I/O)

参考如下:

理解REST和RPC

RPC

Go语言的RPC框架有两个比较有特色的设计:

  • 一个是RPC数据打包时可以通过插件实现自定义的编码和解码;

  • 另一个是RPC建立在抽象的io.ReadWriteCloser接口之上的