当前位置: 首页 > 网络应用技术

GRPC交通控制的详细说明

时间:2023-03-08 15:37:28 网络应用技术

  流控制通常是指网络传输中,发件人积极限制由本身发送的数据率或发送以适应接收器处理数据速度的数据量。当接收器的处理速度慢时,处理它为时已晚。数据将存储在内存中,当填充内存中的数据缓存区域时,将抛出新接收的数据,从而导致发件人再次发送它,这将导致网络带宽浪费。

  流控制是网络组件的基本函数。我们知道的TCP协议需要流量控制算法。GRPC基于TCP,还取决于HTTP/2 WindowUpdate框架以在应用程序层上实现自己的流量控制。

  在GRPC中,流量控制在三个维度中反映:

  在本文的其余部分中,我们将结合代码以查看这三个流量控制的实施原则和实施详细信息。

  本文中的源代码来自https://github.com/grpc/grpc-go,为了方便显示,某些代码被切断而不会影响表达式。

  交通控制是两条路。为了减少冗余叙述,在本文中,我们只说出GRPC如何控制服务器发送的流量。

  GRPC中的流量控制仅适用于HTTP/2数据框架。

  确切地说,采样流量控制应称为BDP估计和动态流量控制窗口。这是一种流量控制方法,它使用数据在接收端发送数据以确定流量控制窗口的大小。引入采样流量控制的重要性和原理。

  BDP估计和动态流量控制此功能在高延迟网络环境中减少了GRPC和HTTP/1.1之间的性能差距。

  带宽延迟产品(BDP),即带宽延迟体积,是带宽和网络连接的数据往返延迟的乘法。BDP可以有效地告诉我们,如果完全使用了网络连接,则在网络连接的某个时刻,网络连接上可以有多少个单词。节日的数据。

  @ejona最初提出了计算BDP和相应调整的算法。后来,GRPC-C Core和Grpc-Java的想法。有效BDP1.5的近似值的BDPBDP ping的想法。如果该值接近当前流窗口的大小(例如,超过2/3),则接收器需要增加窗口的大小。三)字节)。

  BDP采样当前在GRPC-GO服务器端的默认情况下。

  结合代码,让我们看一下特定的实现方法。

  我们将通过客户端将BDP ping发送到服务器,并确定服务器端上的流量控制窗口。

  一个在GRPC-GO中定义,这是计算BDP的核心:

  有两种主要方法,:

  该函数具有两个函数:

  该函数是从服务器接收到的HTTP/2数据框后执行的功能。从中我们可以看到:

  接收到BDPPPING框架后,服务器终端将立即返回ping框架并标记为ACK此标志,并且服务器将捕获此ACK:

  它是接收HTTP/2 ping框架后调用的功能。您可以看到,当ping框架是ACK时,将调用此功能。

  在中间,当前的BDP值是通过一系列计算获得的。如果需要流量控制,则将调用中间注册的功能,并将新窗口大小传递到中。

  那么如何处理新窗口的大小?

  值得注意的是,BDP采样结果将影响HTTP/2窗口的大小,连接级别的窗口大小以及流级的窗口大小。BDP对GRPC的影响是动态的,全面的。

  在GRPC中,每对客户端和服务器之间都保持了TCP连接。连接级别的流量控制是针对此唯一连接的。在连接开始时,将为服务器分配一个流量配额,默认值为65535字节Byte Bytethe Flow Controly在此配额周围:

  为了与服务器端的流量控制配合,在初始化连接时为客户端分配了一个限制,默认值为65535字节。客户将记录收到的数据量收到的数据的总和。当未接触超过限制的四分之一时,客户端将向服务器发送窗口更新(未添加值),通知服务器以添加配额,并重新组织未添加的配额。

  可以看出,为了避免频繁发送窗口以占据网络带宽,客户端在接收数据后不会发送窗口更新。无法修改4的阈值。

  服务器

  在服务器端,配额被体现。

  当为0时,服务器不会发送数据。

  从客户端接收窗口更新后增加。

  和服务器在发送数据时会减少。

  客户端

  它是客户控件的核心,是否发送窗口更新。值得注意的是,客户端是否发送窗口更新仅取决于收到的数据量。优化,因为多个流共享相同的连接,因此不应影响连接级别的流量控制,因为流读取数据很慢,影响其他流。

  限制的限制 * 1/4实际上可以浮动,因为限制值将随服务器的窗口更新而变化。

  流级的交通控制原理和连接级别的流控制原理基本相同。有两个主要区别:主要区别:

  Stream Level的流量控制不仅记录已收到的数据量,而且还需要记录流的数据量以实现更准确的流量控制。实际上,客户将记录:

  客户端的逻辑是:

  通过上述分析,我们还可以看到,还必须考虑流动控制引起的序言阻塞中流级中流中读取数据的速度。

  根据原则,我们分析了流级别的交通控制策略。只有代码将在此处发布。

  本文仔细分析了GRPC-GO中的交通控制策略,这可以帮助我们在开发类似功能时带来一些灵感。我也希望在了解这些GRPC的内部实施之后,我们对GRPC有了更深入的了解。