CN109067663B - 一种针对应用程序内控制请求响应速率的系统和方法 - Google Patents
一种针对应用程序内控制请求响应速率的系统和方法 Download PDFInfo
- Publication number
- CN109067663B CN109067663B CN201810777414.3A CN201810777414A CN109067663B CN 109067663 B CN109067663 B CN 109067663B CN 201810777414 A CN201810777414 A CN 201810777414A CN 109067663 B CN109067663 B CN 109067663B
- Authority
- CN
- China
- Prior art keywords
- queue
- connection
- request
- epoll
- service module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/29—Flow control; Congestion control using a combination of thresholds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种针对应用程序内控制请求响应速率的系统和方法,包括收敛器、EPOLL管理器、请求统计器、发送队列、接收队列、队列负载统计、业务模块连接池和若干个业务模块,用户通过接入网关系统接入到后台系统时,如果客户端发送的请求数据比较多或频率过快,将致使接入层来不及处理,数据堆积在接入层的连接管理模块,导致数据丢失,甚至使接入层进程崩溃。同时各个业务模块的处理能力各不一样,一种业务请求在接入层发送过快,其他业务请求不应该受到影响。本发明的目的在于设计一套对应用程序内部子模块间请求响应速率进行控制的方法和装置,避免不同业务请求之间相互影响,避免因处理不过来而丢弃数据包,避免应用程序因请求速率过快而崩溃。
Description
技术领域
本发明涉及传输控制规程,涉及接入网关应用程序内部请求响应速率的协调和控制,尤指一种针对应用程序内控制请求响应速率的系统和方法。
背景技术
流量控制:指点对点通信量的控制,是端到端正的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。解释如下:
滑动窗口机制
主要针对成块数据流,利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
参见图2,设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是rwnd=400字节”(这里的rwnd表示receiver window滑动窗口)。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。TCP连接建立时的窗口协商过程在图中没有显示出来。再设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。
从图中可以看出,B进行了三次流量控制。第一次把窗口减少到rwnd=300,第二次又减到了rwnd=100,最后减到rwnd=0,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了ACK=1,只有在ACK=1时确认号字段才有意义。
拥塞控制
参见图3,拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制。拥塞控制的方式主要有:快重传、慢开始、快恢复和拥塞避免。
请求过载保护方案
过载是指负载已经超过了系统的最大处理能力。例如,系统每秒能够处理的请求是100个,但实际每秒的请求量却是1000个,就可以判定系统出现了过载。在系统部署上线之前,预估好系统的处理能力,限定最大同时能够处理的请求量、流量或者连接数。当请求量快接近于最大处理能力时,则告警,超过范围,则触发拒绝请求机制。由此可见对于阈值的设置是一个很关键的环节,阈值过高,依然可能导致过载,阈值过低,则又导致负载上不去。阈值的设置也会是一个不断调优的过程
背景技术的缺点:
1)TCP流量拥塞控制只是针对传输层字节流量控制,不能针对应用程序内部进行数据包请求响应速率的限制。
2)过载保护的请求阈值设置很难把握,请求阈值无法应对多业务类型的请求。
发明内容
针对现有技术的缺点,本发明的目的在于提供一种针对应用程序内控制请求响应速率的系统和方法。旨在发明一套对应用程序内部子模块间请求响应速率进行控制的系统和方法,避免不同业务请求之间相互影响,避免因处理不过来而丢弃数据包,避免应用程序因请求速率过快而崩溃。
本发明解决其技术问题所采用的技术方案是:提供一种针对应用程序内控制请求响应速率的系统和方法,其系统的特征在于:
包括收敛器、EPOLL管理器、请求统计器、发送队列、接收队列、队列负载统计、业务模块连接池和若干个业务模块,其中:
收敛器连接EPOLL管理器:负责用户连接的建立,并将建立好的连接通过本地套接字(Unix Domain Socket)发送到多个接入网关进程上去;
EPOLL管理器连接收敛器、请求统计器、发送队列和接收队列:采用EPOLL实现的,管理用户连接的读写状态,开辟若干个连接对象池,每个连接对象都具有发送缓存队列,同时对整个进程和单个连接进行适当请求速率控制;
连接缓存队列属于EPOLL管理器的子模块:针对每个用户连接开辟个缓存队列,用于小包合关发送和响应数据超时丢弃;
请求统计器连接EPOLL管理器、发送队列、接收队列、和业务模块连接池:负责统计每个用户连接上的请求速率和响应速率,统计进程总体请求速率和响应速率,统计业务模块连接池的发送速率和响应速率;当各项速率大于阈值时进行适当控制;
队列负载统计连接发送队列和接收队列:负责统计发送队列和接收队列的利用率情况,当利用率达到一定的阈值时进行适当控制;
发送队列连接EPOLL管理器、请求统计器、接收队列、队列负载统计和业务模块连接池:从业务模块连接池上接收响应数据,供EPOLL管理器提取发送给有用户端;
接收队列连接EPOLL管理器、请求统计器、发送队列、队列负载统计和业务模块连接池:从EPOLL管理器接收请求数据,供业务模块连接池转发到具体的业务模块;
业务模块连接池连接请求统计器、发送队列、接收队列和具体的业务模块:从接收队列接收请求数据,然后将请求发送到对应的业务模块;再从业务模块接收响应数据,并将响应数据传递到发送队列;
业务模块连接业务模块连接池:具体执行某一项业务处理,如K线模块、实时行情模块。
本发明基于上述针对应用程序内控制请求响应速率的系统提供一种针对应用程序内控制请求响应速率的方法,其特征在于包括如下步骤:
S1.当用户通过TCP连接到收敛器模块进程监听的socket套接字时,收敛器进程接受用户连接,并通过本地套接字把用户连接发送到接入进程的EPOLL管理器模块,对所有用户连接进行读写事件监听;
S2.EPOLL管理器通过请求统计器的对总体请求速率、单连接请求速率和接收队列利用率通过一定算法计算,决定是否将某些用户连接去除或加入读事件监控,从而实现对请求速率的控制;
S3.业务模块连接池针对每个业务模块建立一个连接池,针对每个业务连接池进行请求转发,当业务模块压力过大时,接入进程将丢弃业务请求包,并向EPOLL管理器反馈业务状态;
S4.当业务模块发回响应数据后,业务模块连接池首先判断该连接是否已经关闭,如果连接已关闭就直接丢弃数据包,其次依据“该连接的缓存队列已满且发送队列利用率超过阈值”来判断是否需要对响应数据包进行限速,是否需要丢弃响应数据,同时将状态反馈给EPOLL管理器;
S5.当EPOLL管理器从发送队列接收到响应数据时,首先将数据包直接进行发送,如果发送不完全就加入到该连接的缓存队列;下一次EPOLL管理器调度到该连接的写事件时,将检查数据包的时效性,如果是过期的数据包将被丢弃,同时针对该连接的缓存队列进行小包合并后再发送;对于严重阻塞并发送出错的连接,进行关闭操作,并清理发送队列。
步骤S2所述具体算法的逻辑如下:
S21.如果总体QPS大于阈值MAX_TOTAL_QPS,关闭用户连接;
S22.如果接收队列利用率大于阈值,去除读事件;
S23.如果单个连接QPS过大,去除读事件;如果单个连接QPS过小,加入读事件;
S24.依据接收队列利用率、当前连接数、业务模块连接池读取速度之间的比例关系计算单连接QPS动态阈值:
单连接QPS动态阈值=基础常数×50/(当前连接数×(EPOLL读取速度–业务转发速度)×队列利用率)
基础常数=单用户基础QPS×最大连接数×队列最在数据包量;
S25.如果单连接QPS动态阈值大于业务模块连接池转发速率,则去除读事件,反之加入读事件。
本发明的有益效果是:对应用程序内部子模块间请求响应速率进行控制,避免了不同业务请求之间相互影响,避免了因处理不过来而丢弃数据包,避免了应用程序因请求速率过快而崩溃。
附图说明
下面结合附图对本发明作进一步的描述。
图1是本发明的架构和工作流程示意图。
图2是现有技术的滑动窗口机制示意图。
图3是现有技术的拥塞控制示意图。
具体实施方式
参见附图,本发明一种针对应用程序内控制请求响应速率的系统和方法,其特征在于所述系统包括收敛器1、EPOLL管理器2、请求统计器3、发送队列4、接收队列5、队列负载统计6、业务模块连接池7和若干个业务模块81、82、...、8N,其中:
收敛器1连接EPOLL管理器2:负责用户连接的建立,并将建立好的连接通过本地套接字(Unix Domain Socket)发送到多个接入网关进程上去;
EPOLL管理器2连接收敛器1、请求统计器3、发送队列4和接收队列5:采用EPOLL实现的,管理用户连接的读写状态,开辟10万个连接对象池,每个连接对象都具有发送缓存队列,同时对整个进程和单个连接进行适当请求速率控制;
连接缓存队列21属于EPOLL管理器2的子模块:针对每个用户连接开辟1600个缓存队列,用于小包合关发送和响应数据超时丢弃;
请求统计器3连接EPOLL管理器2、发送队列4、接收队列5、和业务模块连接池7:负责统计每个用户连接上的请求速率和响应速率,统计进程总体请求速率和响应速率,统计业务模块连接池7的发送速率和响应速率;当各项速率大于阈值时进行适当控制;
队列负载统计6连接发送队列4和接收队列5:负责统计发送队列4和接收队列5的利用率情况,当利用率达到一定的阈值时进行适当控制;
发送队列4连接EPOLL管理器2、请求统计器3、接收队列5、队列负载统计6和业务模块连接池7:从业务模块连接池7上接收响应数据,供EPOLL管理器2提取发送给有用户端;
接收队列5连接EPOLL管理器2、请求统计器3、发送队列4、队列负载统计6和业务模块连接池7:从EPOLL管理器2接收请求数据,供业务模块连接池7转发到具体的业务模块81、82...或8N;
业务模块连接池7连接请求统计器3、发送队列4、接收队列5和具体的业务模块81、82...或8N:从接收队列5接收请求数据,然后将请求发送到对应的业务模块81、82...或8N;再从业务模块81、82...或8N接收响应数据,并将响应数据传递到发送队列4;
业务模块81、82...和8N连接业务模块连接池7:具体执行某一项业务处理,如K线模块、实时行情模块。
本发明还提供基于上述针对应用程序内控制请求响应速率的方法,包括如下步骤:
S1.当用户通过TCP连接到收敛器模块1进程监听的socket套接字时,收敛器进程接受用户连接,并通过本地套接字把用户连接发送到接入进程的EPOLL管理器模块2,对所有用户连接进行读写事件监听;
S2.EPOLL管理器2通过请求统计器3的对总体请求速率、单连接请求速率和接收队列利用率通过一定算法计算,决定是否将某些用户连接去除或加入读事件监控,从而实现对请求速率的控制;
S3.业务模块连接池7针对每个业务模块81、82...或8N建立一个连接池,针对每个业务连接池进行请求转发,当业务模块81、82...或8N压力过大时,接入进程将丢弃业务请求包,并向EPOLL管理器2反馈业务状态,从而避免业务模块被压跨;
S4.当业务模块81、82...或8N发回响应数据后,业务模块连接池7首先判断该连接是否已经关闭,如果连接已关闭就直接丢弃数据包,其次依据“该连接的缓存队列已满且发送队列利用率超过阈值”来判断是否需要对响应数据包进行限速,是否需要丢弃响应数据,从而避免发送队列被堵塞导致整体不可用,同时将状态反馈给EPOLL管理器2;
S5.当EPOLL管理器2从发送队列接收到响应数据时,首先将数据包直接进行发送,如果发送不完全就加入到该连接的缓存队列;下一次EPOLL管理器2调度到该连接的写事件时,将检查数据包的时效性,如果是过期的数据包将被丢弃,同时针对该连接的缓存队列进行小包合并后再发送;对于严重阻塞并发送出错的连接,进行关闭操作,并清理发送队列。
步骤S2所述具体算法的逻辑如下:
S21.如果总体QPS大于阈值MAX_TOTAL_QPS(最大总体QPS),关闭用户连接
S22.如果接收队列利用率大于阈值,去除读事件
S23.如果单个连接QPS过大,去除读事件;如果单个连接QPS过小,加入读事件
S24.依据接收队列利用率、当前连接数、业务模块连接池7读取速度之间的比例关系计算单连接QPS动态阈值:
单连接QPS动态阈值=基础常数×50/(当前连接数×(EPOLL读取速度–业务转发速度)×队列利用率)
基础常数=单用户基础QPS×最大连接数×队列最在数据包量
S25.如果单连接QPS动态阈值大于业务模块连接池转发速率,则去除读事件,反之加入读事件。
几个缩略语和关键术语定义
Go语言:又称Golang是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言。
Cgo:一种实现Go程序与C的类库交互操作的技术。
本地套接字:UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。
EPOLL:一种高性能的多路IO复用机制,事件驱动机制。
QPS:Query Per Second,每秒查询率,指每秒处理请求的速度。
QPS=并发请求量/平均响应时间。
Claims (2)
1.一种针对应用程序内控制请求响应速率的系统,其特征在于:包括收敛器、EPOLL管理器、请求统计器、发送队列、接收队列、队列负载统计、业务模块连接池和若干个业务模块,其中:
收敛器连接EPOLL管理器:负责用户连接的建立,并将建立好的连接通过本地套接字发送到多个接入网关进程上去;
EPOLL管理器连接收敛器、请求统计器、发送队列和接收队列:采用EPOLL实现的,管理用户连接的读写状态,开辟若干个连接对象池,每个连接对象都具有发送缓存队列,同时对整个进程和单个连接进行请求速率控制;
连接缓存队列属于EPOLL管理器的子模块:针对每个用户连接开辟个缓存队列,用于小包合并发送和响应数据超时丢弃;
请求统计器连接EPOLL管理器、发送队列、接收队列、和业务模块连接池:负责统计每个用户连接上的请求速率和响应速率,统计进程总体请求速率和响应速率,统计业务模块连接池的发送速率和响应速率;当各项速率大于阈值时进行控制;
队列负载统计连接发送队列和接收队列:负责统计发送队列和接收队列的利用率情况,当利用率达到阈值时进行控制;
发送队列连接EPOLL管理器、请求统计器、接收队列、队列负载统计和业务模块连接池:从业务模块连接池上接收响应数据,供EPOLL管理器提取发送给有用户端;
接收队列连接EPOLL管理器、请求统计器、发送队列、队列负载统计和业务模块连接池:从EPOLL管理器接收请求数据,供业务模块连接池转发到具体的业务模块;
业务模块连接池连接请求统计器、发送队列、接收队列和具体的业务模块:从接收队列接收请求数据,然后将请求发送到对应的业务模块;再从业务模块接收响应数据,并将响应数据传递到发送队列;
业务模块连接业务模块连接池:具体执行某一项业务处理。
2.一种针对应用程序内控制请求响应速率的方法,其特征在于包括如下步骤:
S1.当用户通过TCP连接到收敛器模块进程监听的socket套接字时,收敛器进程接受用户连接,并通过本地套接字把用户连接发送到接入进程的EPOLL管理器模块,对所有用户连接进行读写事件监听;
S2.EPOLL管理器通过请求统计器的对总体请求速率、单连接请求速率和接收队列利用率通过算法计算,决定是否将某些用户连接去除或加入读事件监控,从而实现对请求速率的控制;
S3.业务模块连接池针对每个业务模块建立一个连接池,针对每个业务连接池进行请求转发,当业务模块压力过大时,接入进程将丢弃业务请求包,并向EPOLL管理器反馈业务状态;
S4.当业务模块发回响应数据后,业务模块连接池首先判断该连接是否已经关闭,如果连接已关闭就直接丢弃数据包,其次依据“该连接的缓存队列已满且发送队列利用率超过阈值”来判断是否需要对响应数据包进行限速,是否需要丢弃响应数据,同时将状态反馈给EPOLL管理器;
S5.当EPOLL管理器从发送队列接收到响应数据时,首先将数据包直接进行发送,如果发送不完全就加入到该连接的缓存队列;下一次EPOLL管理器调度到该连接的写事件时,将检查数据包的时效性,如果是过期的数据包将被丢弃,同时针对该连接的缓存队列进行小包合并后再发送;对于严重阻塞并发送出错的连接,进行关闭操作,并清理发送队列;
步骤S2所述算法的具体逻辑如下:
S21.如果总体QPS大于阈值MAX_TOTAL_QPS,关闭用户连接;
S22.如果接收队列利用率大于阈值,去除读事件;
S23.如果单个连接QPS过大,则去除读事件;如果单个连接QPS过小,则加入读事件;
S24.依据接收队列利用率、当前连接数、业务模块连接池读取速度之间的比例关系计算单连接QPS动态阈值:单连接QPS动态阈值=基础常数×50/(当前连接数×(EPOLL读取速度–业务转发速度)×队列利用率)
基础常数=单用户基础QPS×最大连接数×队列最大数据包量;
S25.如果单连接QPS动态阈值大于业务模块连接池转发速率,则去除读事件,反之加入读事件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810777414.3A CN109067663B (zh) | 2018-07-16 | 2018-07-16 | 一种针对应用程序内控制请求响应速率的系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810777414.3A CN109067663B (zh) | 2018-07-16 | 2018-07-16 | 一种针对应用程序内控制请求响应速率的系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109067663A CN109067663A (zh) | 2018-12-21 |
CN109067663B true CN109067663B (zh) | 2022-06-24 |
Family
ID=64816719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810777414.3A Active CN109067663B (zh) | 2018-07-16 | 2018-07-16 | 一种针对应用程序内控制请求响应速率的系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109067663B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113269590B (zh) * | 2021-05-31 | 2023-06-06 | 五八到家有限公司 | 一种用于资源补贴的数据处理方法、装置和系统 |
CN116582492B (zh) * | 2023-07-14 | 2023-09-26 | 珠海星云智联科技有限公司 | 优化rdma读取的拥塞控制方法、系统及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005013083A2 (en) * | 2003-07-29 | 2005-02-10 | Orbital Data Corporation | Flow control architecture |
CN102802188B (zh) * | 2012-08-03 | 2016-05-25 | 华为终端有限公司 | 业务控制方法、终端和网络侧设备 |
US9043457B2 (en) * | 2012-10-25 | 2015-05-26 | Qualcomm Incorporated | Dynamic adjustment of an interrupt latency threshold and a resource supporting a processor in a portable computing device |
CN103235735A (zh) * | 2012-11-16 | 2013-08-07 | 佳都新太科技股份有限公司 | 一种基于xen虚拟机系统架构中的利用率资源控制模型 |
US10291472B2 (en) * | 2015-07-29 | 2019-05-14 | AppFormix, Inc. | Assessment of operational states of a computing environment |
CN107071067B (zh) * | 2017-06-13 | 2020-02-07 | 广发证券股份有限公司 | 一种基于Cgo的高性能证券行情接入系统和方法 |
-
2018
- 2018-07-16 CN CN201810777414.3A patent/CN109067663B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109067663A (zh) | 2018-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4587053B2 (ja) | 通信装置、通信システム、パケット欠落検出方法、およびパケット欠落検出プログラム | |
KR101593168B1 (ko) | 물리적 단방향 통신 장치 및 방법 | |
KR101746629B1 (ko) | 통신 장치 및 통신 방법 | |
RU2298289C2 (ru) | Устройство и способ доставки пакетов в беспроводных сетях с многократными ретрансляциями | |
US7369498B1 (en) | Congestion control method for a packet-switched network | |
KR100599920B1 (ko) | 동기식 디지털 계층 전송 네트워크 상에서의 이더넷데이터 흐름을 제어하는 방법 | |
US20050226150A1 (en) | Congestion control system | |
KR20060063652A (ko) | 웹 서비스를 위한 신뢰성 있는 메시징 프로토콜을 이용한메시지의 효율적인 전송 | |
CN107070613A (zh) | 分布式网络环境下数据可靠传输方法 | |
CA2299174A1 (en) | Data communication method, terminal equipment interconnecting installation, data communication system and recording medium | |
CN112203138A (zh) | 基于udp协议的投屏数据传输方法、装置、设备及存储介质 | |
CN104243097A (zh) | 基于卫星网络的数据传输方法及系统 | |
CN202841192U (zh) | 一种支持广域网的高速、可靠的单向传输系统 | |
US20180077171A1 (en) | Transparent bridge for monitoring crypto-partitioned wide-area network | |
CN111147573A (zh) | 一种数据传输的方法和装置 | |
CN109067663B (zh) | 一种针对应用程序内控制请求响应速率的系统和方法 | |
CN103957121A (zh) | 一种面向空天信息网络的跨层tcp优化方法 | |
US7286483B2 (en) | Electronic data transfer based on selective storage of incoming packets | |
CN103152192A (zh) | 数据传输方法及网管系统 | |
US11502986B2 (en) | Reducing transmission delay of transmitting data in Wi-Fi | |
WO2024113459A1 (zh) | 基于双单向光闸系统的数据传输方法、装置、设备及介质 | |
CN104580171B (zh) | Tcp协议的传输方法、装置和系统 | |
US20230269183A1 (en) | Apparatus and method for managing network flow congestion | |
JP5046197B2 (ja) | 通信装置、通信システム、パケット欠落検出方法、およびパケット欠落検出プログラム | |
JP5382556B2 (ja) | 通信装置、通信システム、パケット欠落検出方法、およびパケット欠落検出プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |