设为首页 加入收藏

TOP

自适应流控方案
2019-05-14 00:18:49 】 浏览:40
Tags:适应 方案
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangguosb/article/details/79139388

入口流控自适应方案

问题:在Netty中引入业务线程池带来的问题就是速率不匹配,如果IO线程接受数据的速度超过业务线程的处理速度,就会出现缓冲队列溢出,此时需要能够对客户端的发送速率进行控制。

  如下图所示,提供了一种基于TCP Flow-Control机制的自适应流控方案。当缓冲区溢出时,服务端会按一定的规则选取出最消耗业务线程资源的客户端,然后将客户端对应连接的auoread属性设置为false,过段时间再重新恢复,设为true。背后的原理就是利用了TCP的 Flow-Control机制,当auoread设为false时,Selector不再监听连接的读事件,这样很快TCP的接受缓冲区就会被填满,进而客户端接受到的ACK中的窗口大小会逐渐变小,直至变成0,从而达到客户端降低发送数据速率的目的。
这里写图片描述

注意:连接的autoread不能长时间关闭。如果autoread

被长期设为false,对端发送FIN的时候,接收端应用层是感知不到的。此时内核将这个socket的状态变成CLOSE_WAIT,但是因为应用层感知不到,所以应用层一直没有调用close,此时这个连接就会长期处于CLOSE_WAIT状态。

出口流控自适应方案

这里写图片描述

查阅:http://www.cnblogs.com/rainy-shurun/p/5213086.html


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Scala-模式匹配 下一篇sqoop   把 hdfs 和关系型数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }