当前位置:网站首页>玩转gRPC—深入概念与原理
玩转gRPC—深入概念与原理
2022-07-04 21:33:00 【InfoQ】
- 《玩转gRPC—Go使用gRPC通信实战》
- 《玩转gRPC—不同编程语言间通信》
- 《一文带你搞懂HTTP和RPC协议的异同》
- 《从1开始,扩展Go语言后端业务系统的RPC功能》
1 使用gRPC的基本架构

- Service:提供的服务
- Client:gRPC客户端
- gRPC Server:gRPC服务端接口
- gRPC Stub:gRPC客户端接口
- Proto Request/Proto Response(s):中间文件(代码/协议)
2 Protocol Buffers
2.1 什么是Protocol Buffers?
- 支持多种编程语言
- 序列化数据体积小
- 反序列化速度快
- 序列化和反序列化代码自动生成
2.2 Protocol Buffers和gRPC什么关系?
2.3 Protocol Buffers基本语法
.protomessage Person {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
protocname()set_name()// The greeter service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
protoc3 gRPC的四种服务提供方法
3.1 Unary RPC
rpc SayHello(HelloRequest) returns (HelloResponse);
3.2 Server streaming RPC
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
3.3 Client streaming RPC
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
3.4 Bidirectional streaming RPC
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse)
4 gRPC的生命周期

4.1 服务的提供
4.2 截止日期/超时
DEADLINE_EXCEEDED4.3 RPC 终止
4.4 取消 RPC
5 gRPC通信原理
5.1 HTTP2
- HTTP/2 的规范于 2015 年5 月发布,旨在解决其前身的一些可扩展性问题,在许多方面改进了 HTTP/1.1 的设计,最重要的是提供了连接上的语义映射。
- 创建 HTTP 连接的开销很大。您必须建立 TCP 连接、使用 TLS 保护该连接、交换标头和设置等。HTTP/1.1 通过将连接视为长期存在的、可重用的对象来简化此过程。HTTP/1.1 连接保持空闲,以便可以通过现有的空闲连接发送到同一目的地的新请求。虽然连接重用缓解了这个问题,但一个连接一次只能处理一个请求——它们是 1:1 耦合的。如果要发送一条大消息,新请求必须要么等待它完成(导致 队列阻塞),要么更频繁地为启动另一个连接付出代价。
- HTTP/2 通过在连接之上提供一个语义层:流,从而进一步扩展了持久连接的概念。流可以被认为是一系列语义连接的消息,称为帧。流可能是短暂的,例如请求用户状态的一元流(在 HTTP/1.1 中,这可能等同于
GET /users/1234/status)。随着频率的增加,它的寿命很长。接收者可能会建立一个长期存在的流,从而实时连续接收用户状态消息,而不是向 /users/1234/status 端点发出单独的请求。流的主要优点是连接并发,即在单个连接上交错消息的能力。
- 流量控制
- 然而,并发流包含一些微妙的陷阱。考虑以下情况:同一连接上的两个流 A 和 B。流 A 接收大量数据,远远超过它在短时间内可以处理的数据。最终,接收者的缓冲区被填满,TCP 接收窗口限制了发送者。这对于 TCP 来说都是相当标准的行为,但这种情况对于流来说是不利的,因为两个流都不会接收更多数据。理想情况下,流 B 应该不受流 A 的缓慢处理的影响。
- HTTP/2 通过提供流控制机制作为流规范的一部分来解决这个问题。流控制用于限制每个流(和每个连接)的未完成数据量。它作为一个信用系统运行,其中接收方分配一定的“预算”,发送方“花费”该预算。更具体地说,接收方分配一些缓冲区大小(“预算”),发送方通过发送数据填充(“花费”)缓冲区。接收方使用特殊用途的WINDOW_UPDATE帧向发送方通告可用的额外缓冲区 . 当接收方停止广播额外的缓冲区时,发送方必须在缓冲区(其“预算”)耗尽时停止发送消息。
- 使用流控制,并发流可以保证独立的缓冲区分配。再加上轮询请求发送,所有大小、处理速度和持续时间的流都可以在单个连接上进行多路复用,而无需关心跨流问题。
- 更智能的代理
- HTTP/2 的并发属性允许代理具有更高的性能。例如,考虑一个接受和转发尖峰流量的 HTTP/1.1 负载平衡器:当出现尖峰时,代理会启动更多连接来处理负载或将请求排队。前者——新连接——通常是首选(在某种程度上);这些新连接的缺点不仅在于等待系统调用和套接字的时间,还在于在 发生TCP 慢启动时未充分利用连接所花费的时间。
- 相比之下,考虑一个配置为每个连接多路复用 100 个流的 HTTP/2 代理。一些请求的峰值仍然会导致新的连接被启动,但与 HTTP/1.1 对应的连接数相比只有 1/100 个连接。更笼统地说:如果n 个HTTP/1.1 请求发送到一个代理,则n 个HTTP/1.1 请求必须出去;每个请求都是一个有意义的数据请求/有效负载,请求是 1:1 的连接。相反,使用 HTTP/2 发送到代理的n请求需要n 个流,但 不需要n 个连接!
5.2 gRPC与HTTP2

6 总结
边栏推荐
- Case sharing | integrated construction of data operation and maintenance in the financial industry
- Lambdaquerywrapper usage
- TCP协议三次握手过程
- Golang interview finishing three resumes how to write
- HDU - 1078 FatMouse and Cheese(记忆化搜索DP)
- QT - double buffer plot
- gtest从一无所知到熟练使用(3)什么是test suite和test case
- [wechat applet] collaborative work and release
- ArcGIS 10.2.2 | solution to the failure of ArcGIS license server to start
- Analysis of maker education technology in the Internet Era
猜你喜欢

MongoDB聚合操作总结

Exclusive interview of open source summer | new committer Xie Qijun of Apache iotdb community
![[optimtool.unconstrained] unconstrained optimization toolbox](/img/ef/65379499df205c068ee9bc9df797ac.png)
[optimtool.unconstrained] unconstrained optimization toolbox

What is business intelligence (BI), just look at this article is enough

什么是商业智能(BI),就看这篇文章足够了

Operation of adding material schedule in SolidWorks drawing

redis03——Redis的网络配置与心跳机制

机器学习笔记 - 互信息Mutual Information

Three or two things about the actual combat of OMS system

Lambdaquerywrapper usage
随机推荐
El tree combined with El table, tree adding and modifying operations
开源之夏专访|Apache IoTDB社区 新晋Committer谢其骏
解析互联网时代的创客教育技术
面试官:说说XSS攻击是什么?
Jerry's ad series MIDI function description [chapter]
Open3D 曲面法向量计算
文件读取写入
Interviewer: what is XSS attack?
类方法和类变量的使用
ArcGIS 10.2.2 | solution to the failure of ArcGIS license server to start
从RepVgg到MobileOne,含mobileone的代码
minidom 模塊寫入和解析 XML
股票开户佣金最低多少,炒股开户佣金最低网上开户安全吗
并列图的画法,多排多列
HDU - 1078 FatMouse and Cheese(记忆化搜索DP)
Kubeadm初始化报错:[ERROR CRI]: container runtime is not running
如何使用ConcurrentLinkedQueue做一个缓存队列
Operation of adding material schedule in SolidWorks drawing
File read write
旋变串判断