GPDB-内核特性-UDP流量控制

GPDB的Interconnect组件通过UDPIFC协议实现内部数据传输,其中流量控制依赖于拥塞控制策略。初始拥塞窗口为1,最大不超过gp_interconnect_snd_queue_depth的设置(默认2)。当丢包发生,慢启动门限值减半,拥塞窗口重置,以避免严重拥塞。该机制有助于在分布式数据库环境中维持稳定的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPDB-内核特性-UDP流量控制

GPDB是在开源PostgreSQL基础上,采用MPP架构的关系型分布式数据库,具有强大的大规模数据分析任务处理能力。采用Shared-Nothing架构,整个集群由多个数据节点(segment)和控制节点(master)组成。数据节点之间会出现数据洗牌,并且数据节点会将数据发送到控制节点进行汇总输出。数据节点之间的数据洗牌和数据节点向控制节点发送数据通过Interconnect实现。

1、Interconnect概要介绍

Interconnect是GPDB数据库中负责不同节点进行内部数据传输的组件。GPDB中由特定的执行算子Motion用来负责查询处理执行器节点之间交互数据,底层网络通信协议通过Interconnect实现。

由控制参数gp_interconnect_type来指定使用哪种协议。该参数取值范围:UDPIFC:基于UDP的可靠协议,实现了重传、乱序处理、不匹配处理、流量控制等功能;TCP:TCP协议;proxy:基于TCP改造而来,主要用来应对在大规模集群里面网络连接数巨大的情况。

本文关注UDPIFC协议。该协议下由gp_interconnect_fc_method参数控制使用哪种流量控制方式:capacity根据接收方窗口来控制发送;loss(默认)根据丢包情况控制发送速度。

gp_interconnect_snd_queue_depth:设置发送方发送窗口大小,增加该值会占用更多内存,默认2。仅在UDPIFC协议下才生效。

gp_interconnect_queue_depth:设置接收端UDP接收窗口大小。当数据达到接收方,但是接收窗口每位置的时候,就会丢弃这个数据,需要重新传输。因此,增加该值需要更多内存,但能够改善性能。默认为4,设置1-10较为合理。

2、UDPIFC如何控制流量

通过拥塞控制来控制发送速度。和TCP的拥塞控制类似。先介绍几个概念相关变量。

  • static SendControlInfo snd_control_info::拥塞控制相关信息

struct SendControlInfo
{
  /* The buffer used for accepting acks */
  icpkthdr   *ackBuffer;
  float    cwnd;//拥塞窗口
  float    minCwnd;//最小拥塞窗口
  float    ssthresh;//慢启动门限
};
  • 网络拥塞:ack超过超时传送时还没收到。

流量控制机制

流量控制流程如下图所示。

1)SendControlInfo初始化:初始化在进程初始化的时候操作,也就是InitMotionLayerIPC函数完成。仅将拥塞窗口初始化为0。

2)在执行器执行的时候,primary上设置拥塞窗口和慢启动门限值。可以看到拥塞窗口cwnd被设置成了1,而慢启动门限被设置成了2,即门限值由gp_interconnect_snd_queue_depth控制。

3)SendChunkUDPIFC函数完成发送数据的功能:sendBuffers发送后进入pollAcks等待ack事件发生。有ack事件到来后,由函数handleAcks处理接收到的ack。可以看到若拥塞窗口小于慢启动门限值,则拥塞窗口+1,否则+1/cwnd。但这里有个阈值,cwn最大不能超过gp_interconnect_snd_queue_depth(默认2)的值。

4)当接收端发生丢包发来对应ack:会将慢启动门限值调整到一半,拥塞窗口更新为ssthresh值。此时认为拥塞不严重,还可以慢慢增加发包数;当超时重传时,认为拥塞比较严重了,此时将ssthresh门限值调整为一半,拥塞窗口重回1值,从发送一个包重新开始。

5)sendBuffers函数中根据拥塞值控制是否发送:当numSharedOutStanding值>=拥塞窗口cwnd时,表示已经有这么多的发送未接收到ack了,发生丢包严重了。就不再让发送数据了。

5cbaacc57d1540ff004f0b8f7b337285.png

3、总结

f500fc2d19adf87581be8fe8478174d7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzs87

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值