Skip to content

Instantly share code, notes, and snippets.

@AntonioSun
Last active May 9, 2022 19:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AntonioSun/eeb52dc772d6f443a96d9313eaa801af to your computer and use it in GitHub Desktop.
Save AntonioSun/eeb52dc772d6f443a96d9313eaa801af to your computer and use it in GitHub Desktop.

Excerpted from https://thinkerou.com/post/rpc-guide/

RPC 介绍

1. RPC 简介

  • RPC 是 Remote Procedure Call 的缩写, 即远程过程/函数调用
  • RPC 用于进程间或跨网络通讯
  • RPC 具有很好的横向扩展能力, 更适合网络/分布式环境通讯

2. RPC 原理

RPC 主要涉及到的角色有:

  • Client
  • Client Stub
  • Server
  • Server Stub

详细原理请原理图进行查看(注:图片来源于参考资料4)。

根据该原理图可知,完成一次 RPC 需要经历这样几个步骤:

1)Client 以本地调用方式调用服务

2)Client Stub 接收调用后将方法、参数等组装成能够进行网络传输的消息体(编码)  

3)Client Stub 找到服务地址,并将消息发送到服务端  

4)Server Stub 收到消息后进行解析(解码)  

5)Server Stub 根据解码结果调用本地的服务  

6)本地服务执行并将结果返回给 Server Stub  

7)Server Stub 将返回结果打包成消息并发送给 Client(编码)  

8)Client Stub 接收到消息,并进行解析(解码)  

9)Client 得到最终结果完成调用  

3. RPC 核心概念

  • 调用者 (只管发出请求, 而不需要关心是谁如何去完成)
  • 被调用者 (只负责完成请求, 而不需要关心是谁需要该数据)
  • 调用者和被调用者的中间代理(RPC调用框架)
  • 数据打包方式
  • 数据传输方式

4. gRPC 如何做的?

根据前述可以大致了解 RPC 的原理、流程了,那么具体完成一个 RPC 框架需要做些什么?会有哪些难点?如何解决?等等。

结合最近在阅读的 gRPC 框架和参考资料,列出后续在阅读 gRPC 框架时需要解决、总结的问题:

  • gRPC 如何做到透明化远程服务调用?
  • gRPC 如何对消息进行编码和解码?
    • 消息数据结构使用 Proto Buffer
    • 序列化反序列化
  • gRPC 如何进行网络通信?
    • 使用什么网络通信模型,NIO?BIO?or other?
    • RequestID

5. 如何发布新服务?

后续准备结合 zookeeper 或者 etcd 和 gRPC 来研究,尽请期待。

参考资料

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment