DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

gRPC Notes


两台安装有 Python 的主机 C 和 S,C 上有 JSON 格式的输入数据, S 上有 Python 编写的复杂(例如机器学习)算法, 通过下面的步骤实现 C 将输入文件发给 S,S 计算出结果返回给 C:

  1. S 和 C 都安装 gRPC 环境:用 pip 安装 grpcio, grpcio-tools 两个包
  2. 编写通讯协议文件(扩展名为 proto),并编译为 Python 代码给 S 和 C
  3. 在 S 上编写服务端 Python 脚本并启动 gRPC 服务
  4. 在 C 上编写客户端 Python 脚本并向 A 的地址(和端口)发送数据,得到计算结果。

gRPC 与 REST 的区别:

  • gRPC 基于 HTTP/2,REST 基于 HTTP 1.1,前者是二进制协议, 支持多路复用,性能更优
  • gRPC 能够实现双向传输,REST 只能 client request, server response
  • gRPC 表达能力更强:不使用 REST 的资源 (resource, 名词) 描述方法, 而是基于某种特定语言的 interface, function 以及数据结构
  • gRPC 使用的 protobuf 是带类型的,定义更严格
  • gRPC 目前主要使用的领域是后台服务(微服务)间的信息传输, REST 主要使用在 Web 服务向外界提供服务

Ref: REST vs. gRPC: Battle of the APIs

wikipedia 的 Interface description language (IDL) 解释的很清楚,这是跨编程语言的 API 描述方法, 例如 JSON, CORBA, COM, DCOM by Microsoft, Protocol buffers by Google 等。

grpc 的 Python 版 helloworld 实例见 helloworld 中的 greeter_server.py 和 greeter_client.py, 传输协议(protobuf 格式)定义在 helloworld.proto 文件中,使用 protocol buffer compiler 编译成 Python 源码文件 helloworld_pb2.py, 供 server 和 client 使用。

另一个 protobuf 接口定义见 polyline.proto.



Published

May 30, 2020

Last Updated

Nov 25, 2020

Category

Tech

Tags

  • gRPC 1
  • python 136
  • rpc 2

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor