1 grpc的定義
grpc good rpc
grpc使用protobuf文件聲明服務笋鄙,服務端和客戶端都通使用該文件生成代碼
syntax = "proto3";
package ecommerce;
service ProductInfo {
rpc addProduct(Product) returns (ProductId);
rpc getProduct(ProductId) returns (Product);
}
message Product {
string id = 1;
string name = 2;
string description = 3;
}
message ProductId{
string value = 1;
}
protoc來生成服務端和客戶端的代碼
客戶端-服務端的消息流
- 使用protocol buffer,并將rpc請求編排(marshal)為pb格式萧落,使用http2進行發(fā)送
- 服務端會被解排(unmarshal),對應的調用過程通過protocol buffers來執(zhí)行
2 進程間通信技術的演化
傳統(tǒng)的RPC
- CORBA通用對象請求代理體系結構
- 遠程方法調用
SOAP
- 簡單對象訪問協(xié)議
REST
- 描述性狀態(tài)遷移
- 基于文本的低效消息協(xié)議
- 應用程序之間缺乏強類型接口
- rest架構風格難以強制實施
gRPC的起源
3 現(xiàn)實世界中的grpc
Netflix
- 效率提升
- 性能提升
etcd
- 關鍵因素在于其API簡單陨倡,定義良好宣增,易于使用
Dropbox
- 基于grpc構建了框架Courier
Lyft
Square
Docker
加入CNCF
grpc的優(yōu)勢
- 提供高效的進程間通信
- 強類型
- 多語言
- 支持雙工流
- 內置的商業(yè)化特性(認證,加密爹脾,彈性,元數(shù)據(jù)交換解阅,壓縮,負載均衡货抄,服務發(fā)現(xiàn))
- 與云原生生態(tài)系統(tǒng)進行了集成(envoy,prometheus)
grpc的確定 - 不太適合面向外部的服務
- 巨大的服務定義變更是復雜的開發(fā)流程
- 生態(tài)較小
相關的技術
- thrift性能更強蟹地,生態(tài)差一點
- graphQL面向外部的api