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

news2024/10/7 10:25:53

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫 从小白到高手 各种最新案例! Urllib Xpath

Urllib 1.什么是互联网爬虫? 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解释1:通过一个程序,根据Url(http…

实训五:数据库安全控制 - 创建用户

创建用户 第1关:创建用户任务描述相关知识增加用户修改用户名修改用户密码删除用户 编程要求测试说明参考代码 第2关:创建用户-练习任务描述相关知识编程要求测试说明参考代码 第1关:创建用户 任务描述 本关任务:创建用户 user1…

你不知道的HTML属性,让你的网页更加响应式

前言 当我们谈论 HTML 时,通常会想到一些常见的属性,如 class、id、href 等等。但是,HTML 还有许多你可能从未听说过的属性,这些属性可以让你的网页更加丰富多彩。在本文中,我将介绍一些你可能不知道的 HTML 属性&…

SPI通信协议SPI通信外设

目录 SPI 介绍 硬件电路 移位示意图 软件SPI SPI时序基本单元 SPI时序​编辑 W25Q64 硬件电路 W25Q64框图 Flash操作注意事项 指令集 硬件SPI SPI框图 主模式全双工连续传输 非连续传输 SPI 介绍 硬件电路 推挽输出,高低电平都有很强的驱动能力&…

基于Python数据分析的详细讲解+实战(含代码)

名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 载入数据集 数据预处理 探索性数据分析 发现相关性 开发模型 模型部署 Python数据分析代码实…

Vue基础(一)

前言: Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。 …

【Vue2.0源码学习】内置组件篇-keep-alive

文章目录 1. 前言2 用法回顾3. 实现原理propscreateddestroyedmountedrender 4. 生命周期钩子5. 总结 1. 前言 <keep-alive> 是 Vue 实现的一个内置组件&#xff0c;也就是说 Vue 源码不仅实现了一套组件化的机制&#xff0c;也实现了一些内置组件&#xff0c;关于<k…

区块链系统探索之路:比特币核心的编译和探索

前几节我们研究了椭圆曲线&#xff0c;有限域等比特币和区块链所依赖的底层算法。问题在于这些算法不是独立存在&#xff0c;而是作为模块嵌入到整个区块链的体系之中。因此不了解区块链的体系组成或应用场景&#xff0c;那么我们就很难理解这些算法衍生出来的概念或者基于他们…

【硬件1】platform/i2c总线

文章目录 1.platform总线&#xff1a;相对于USB/PCI/I2C/SPI等物理总线来说&#xff0c;platform总线是一种虚拟的总线&#xff0c;实际并不存在&#xff0c;总线的工作就是就是完成总线下的设备和驱动之间的匹配。也就是在左手中找到与右手相匹配的设备驱动&#xff0c;并完成…

基于Java+Springboot的智能图书馆座位管理系统设计和实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

MySQL实战解析底层---为什么只查一行的语句,也执行这么慢

目录 前言 第一类&#xff1a;查询长时间不返回 第二类&#xff1a;查询慢 前言 一般情况下&#xff0c;如果说查询性能优化&#xff0c;首先会想到一些复杂的语句&#xff0c;想到查询需要返回大量的数据但有些情况下&#xff0c;“查一行”&#xff0c;也会执行得特别慢这…

第11讲:BootService 核心实现解析,Agent 的“地基”原来是这样的

之前介绍了 ServiceManager 加载并初始化 BootService 实现的核心逻辑。下图展示了 BootService 接口的所有实现类&#xff0c;本课时将深入分析这些 BootService 实现类的具体逻辑&#xff1a; 网络连接管理 在前面的介绍中提到 SkyWalking Agent 会定期将收集到的 JVM 监控和…

基于Java+Swing实现雷电小游戏

基于JavaSwing实现雷电小游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 基于java的雷电游戏基本功能包括&#xff1a;敌方飞机随机飞行、我方飞机手动控制飞行&#xff0c;射击比拼&#xff0c;游戏闯关等。本系统结构如下&#xff1a; &#xff08;1&…

Java中线程的创建与使用、Thread类的常用方法

1、什么是进程与线程 1.1 含义 1.1.1 进程 进程是指正在运行的程序的实例。在操作系统中&#xff0c;一个进程代表了一个正在执行的程序&#xff0c;它包括了程序的代码、数据以及程序执行时所需要的系统资源。 最直观的就是我们任务管理器&#xff1a; 任务管理器中的每一…

Centos7安装和配置Mysql5.7

第一步&#xff1a;获取mysql YUM源 进入mysql官网获取RPM包下载地址&#xff0c;下面就是mysql5.7的Yum仓库的rpm包&#xff1a; mysql5.7链接地址&#xff1a; https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 第二步&#xff1a;下载和安装mysql…

卷福的十年同学会

1.一通电话 某个上班日的午休时间里&#xff0c;小卷正趴在办公桌玩着手机准备睡一会&#xff0c;“叮咚”&#xff0c;一条微信消息弹出来&#xff0c;是大学的班群消息。 “五一期间大家来学校聚一下吧&#xff0c;今年是我们成为同学的十年了&#xff0c;大家提前报名哦&a…

Qt设置软件启动动画(支持图片和视频俩种方式)

目录 软件启动动画效果静态背景动态背景 程序启动动画QSplashScreen启动时加载静态图片启动时加载视频动画将启动动画置于所有窗口顶层 软件启动动画效果 先来看效果。下面录制了加载图片和gif动图的俩种效果。 静态背景 动态背景 这里我加载了一个gif的动图&#xff0c;你也…

AMBA AHB的burst termination

前言 在AMBA AHB协议中&#xff0c;AHB master可以用burst传输连续取多笔数据。AHB定义了4、8和16拍的burst传输、未定义长度的burst传输和单次传输。Burst传输中支持incrementing和wrapping。 Incrementing burst用于访问顺序的memory地址&#xff0c;burst中每个拍的地址都…

数据压缩的常用手段以及方法

0. 简介 之前我们在《经典文献阅读之–R-PCC(基于距离图像的点云压缩方法)》中提到了&#xff0c;我们可以通过一些算法层面来完成数据的压缩&#xff0c;而其实更简单或者说更直接的方法就是使用half这种形式来完成数据压缩。 1. half和float Half是用16位表示浮点数的一种…

什么是 FL Studio?2023年最新版 FL Studio21.0.3.3517中文版图文安装教程

什么是 FL Studio&#xff1f; FL Studio 是一个数字音频工作站 (DAW)。该软件借助各种编辑工具、插件和效果&#xff0c;让您可以录制、混音和掌握高度复杂的音乐作品。FL Studio 还允许您注册和编辑 MIDI 文件&#xff0c;您可以在众多可用乐器之一上演奏这些文件。FL Studi…