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进行发送
- 服务端会被解排(unmarshal),对应的调用过程通过protocol buffers来执行
2 进程间通信技术的演化
传统的RPC
- CORBA通用对象请求代理体系结构
- 远程方法调用
SOAP
- 简单对象访问协议
REST
- 描述性状态迁移
- 基于文本的低效消息协议
- 应用程序之间缺乏强类型接口
- rest架构风格难以强制实施
gRPC的起源
3 现实世界中的grpc
Netflix
- 效率提升
- 性能提升
etcd
- 关键因素在于其API简单,定义良好,易于使用
Dropbox
- 基于grpc构建了框架Courier
Lyft
Square
Docker
加入CNCF
grpc的优势
- 提供高效的进程间通信
- 强类型
- 多语言
- 支持双工流
- 内置的商业化特性(认证,加密,弹性,元数据交换,压缩,负载均衡,服务发现)
- 与云原生生态系统进行了集成(envoy,prometheus)
grpc的确定 - 不太适合面向外部的服务
- 巨大的服务定义变更是复杂的开发流程
- 生态较小
相关的技术
- thrift性能更强,生态差一点
- graphQL面向外部的api
网友评论