原创分享 Go RPC 开发指南

astaxie · 2016年10月18日 · 629 次阅读
本帖已被设为精华帖!

Go RPC 开发指南

本书首先介绍了使用 Go 官方库开发 RPC 服务的方法,然后介绍流行 gRPC 库以及其它一些 RPC 框架如 Thrift 等,后面重点介绍高性能的分布式全功能的 RPC 框架 rpcx。读者通过阅读本书,可以快速学习和了解 Go 生态圈的 RPC 开发技术,并且应用到产品的开发中。

RPC 介绍

远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,比如 Java RMI。

有关 RPC 的想法至少可以追溯到 1976 年以 “信使报”(Courier)的名义使用。RPC 首次在 UNIX 平台上普及的执行工具程序是 SUN 公司的 RPC(现在叫 ONC RPC)。它被用作 SUN 的 NFC 的主要部件。ONC RPC 今天仍在服务器上被广泛使用。 另一个早期 UNIX 平台的工具是 “阿波罗” 计算机网络计算系统(NCS),它很快就用做 OSF 的分布计算环境(DCE)中的 DCE/RPC 的基础,并补充了 DCOM。

远程过程调用是一个分布式计算的客户端-服务器(Client/Server)的例子,它简单而又广受欢迎。 远程过程调用总是由客户端对服务器发出一个执行若干过程请求,并用客户端提供的参数。执行结果将返回给客户端。 由于存在各式各样的变体和细节差异,对应地派生了各式远程过程调用协议,而且它们并不互相兼容。

为了允许不同的客户端均能访问服务器,许多标准化的 RPC 系统应运而生了。其中大部分采用接口描述语言(Interface Description Language,IDL),方便跨平台的远程过程调用。 来自 microsoft

从上图可以看出, RPC 本身是 client-server 模型,也是一种 request-response 协议。 有些实现扩展了远程调用的模型,实现了双向的服务调用,但是不管怎样,调用过程还是由一个客户端发起,服务器端提供响应,基本模型没有变化。 服务的调用过程为:

  1. client 调用 client stub,这是一次本地过程调用
  2. client stub 将参数打包成一个消息,然后发送这个消息。打包过程也叫做 marshalling
  3. client 所在的系统将消息发送给 server
  4. server 的的系统将收到的包传给 server stub
  5. server stub 解包得到参数。 解包也被称作 unmarshalling
  6. 最后 server stub 调用服务过程. 返回结果按照相反的步骤传给 client

https://smallnest.gitbooks.io/go-rpc/content/

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
xiemengjun 将本帖设为了精华贴 02月11日 01:43
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册