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
- 原文作者:nepp
- 原文链接:https://nepp-an.github.io/post/grpc/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。