gRPC是Google开源的RPC框架,具有以下的优点:

  • 提供高效的进程间通信。gRPC没有使用XML或者Json的文本格式,而是采用基于protocol buffers的二进制协议;同时使用HTTP/2作为通信协议,从而能快速的处理进程间通信。
  • 简单且良好的服务接口和模式。契约优先,先定义接口,再实现细节。
  • 支持多语言

再介绍下RPC: RPC:Remote Procedure Call 远程过程调用,简单的理解是一个节点请求另一个节点的服务。与远程过程调用相对的就是本地过程调用,通过函数指针进行实现。那远程过程调用如何通知远程机器要调用这个方法呢?

// Client端 
//    Student student = Call(ServerAddr, addAge, student)
1. 将这个调用映射为Call ID。
2. 将Call ID,student(params)序列化,以二进制形式打包
3. 把2中得到的数据包发送给ServerAddr,这需要使用网络传输层
4. 等待服务器返回结果
5. 如果服务器调用成功,那么就将结果反序列化,并赋给student,年龄更新

// Server端
1. 在本地维护一个Call ID到函数指针的映射call_id_map,可以用Map<String, Method> callIdMap
2. 等待客户端请求
3. 得到一个请求后,将其数据包反序列化,得到Call ID
4. 通过在callIdMap中查找,得到相应的函数指针
5. 将student(params)反序列化后,在本地调用addAge()函数,得到结果
6. 将student结果序列化后通过网络返回给Client

gRPC包含四种基础的通信模式:

  • 一元模式
  • 服务器端流RPC
  • 客户端流RPC
  • 双向流RPC

Etcd

https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1574539663539781634&__biz=MzUzNTY5MzU2MA==#wechat_redirect