GRPC Blog 阅读笔记
潘忠显 / 2021-06-03
gRPC的设计原则
gRPC Motivation and Design Principles
最初,在谷歌内部大量使用统一、跨平台的 RPC 叫 Stubby ,但是没有标准且与内部基础设施耦合过重。gRPC 是对 Stubby 利用标准化进行的重构。
设计原则
- Service & Message
- Coverage & Simplicity
- Free & Open
- Interoperability & Reach
- General Purpose & Performant
- Layered
- Payload Agnostic
- Streaming
- Blocking & Non-Blocking
- Cancellation & Timeout
- Lameducking
- Flow Control
- Pluggable
- Extensions as APIs
- Metadata Exchange
- Standardized Status Codes
2015-09-08 gRPC 的动机和设计原则
2015-10-26
- gRPC Beta 版本发布
- 支持使用特定语言的包管理工具安装
- 提供了Docker镜像
- 基于 HTTP/2 提高了性能和扩展性
- etcd、grpc-gateway 开始使用 gRPC
2016-03-24
- 谷歌云 PubSub 提供 gRPC API(之前只支持 JSON+ HTTP)
- PubSub 是异步消息传递服务
2016-04-04
- 利用包管理工具,进行 gRPC 运行时的简化安装
- 暂时只有 C++ 需要手动构建和安装
2016-05-09
- 使用 gRPC 构建一个 Echo 服务
- protoc 产生 stub,用于构建实际的服务进程
- grpc-gateway 产生反向代理,将 Restful API 转成 gRPC 协议
2016-07-26
- Protobuf 和 JSON 的序列化与反序列化的基准测试
- 序列化 PB 比 JSON 快3倍,比 gzipped JSON 快5倍,反序列化与大小有关系
- gRPC 与 JSON + HTTP 的基准测试
- 95%分位比较,gRPC 快5到10倍
2016-08-23
- 1.0 版本发布,可以用于生产环境部署
- 更多的应用使用gRPC:etcd、containerd、cockroachdb
- 更多的微服务公司使用
- 电信公司巨头也使用
- 比 Beta 版本在可用性、交互操作性和性能测量等方面有明显提升
- 更多的谷歌云API支持 gRPC,比如 BigTable、PubSub、Speech 等
- TensorFlow 使用 rRPC 进行进程间通信
- 生态建设更加完善:grpc-ecosystem、grpc-gateway、Polyglot、Prometheus监控、OpenTracing等
2016-08-29
- vendasta 将 JSON + HTTP API 迁移到使用 gRPC API
- 优化措施1:使用 Go 替换 Python,耗时明显下降
- 优化措施2:使用 ElasticSearch 代替 Datastore 来存储大块数据,可以方便扩容并实时查找
- 优化措施3:使用 gRPC 替换 RESTful API
- gRPC API 带来的好处
- 方便的提供各种语言的SDK
- 支持使用流能降低延迟
- 降低了序列化与反序列化的耗时
- Proto 简洁清晰,客户端与服务端并行开发
2016-08-29
- VSCO 使用 gRPC的经验
如何使用gRPC开发RESTful HTTP API
主要用到 grpc-gateway
service YourService {
rpc Echo(StringMessage) returns (StringMessage) {}
}
server proto 中需要增加 google.api.http
import "google/api/annotations.proto";
service YourService {
rpc Echo(StringMessage) returns (StringMessage) {
option (google.api.http) = {
post: "/v1/example/echo"
body: "*"
};
}
}
trailer 挂载
header 首部
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Trailer