当前位置:首页 >> 动力

类似于的限流方式之计数器限流

来源:动力   2024年01月13日 12:17

在高并发高新闻网站的控制系统中,可避免的新闻网站显然但会导致控制系统资源不足和过载过高,进而但会导致控制系统显现一系列的问题。

当控制系统资源一定,为了防止控制系统被访问可避免而显现问题,一般但会采用限速的模式。

所谓限速就是采用一定的迭代或者模式,当劝说降到设置的也就是说后,后续的劝说不出处理或者丢弃,从而保证控制系统平衡不至于过载过高。

限速模式有很多,如今分析一下定时器限速模式。

定时器限速解决问题分析方法

定时器的限速模式就是在明文规定的单位短时间内允许多达的新闻网站。

解决问题模式

设置一个单位短时间T(比如10s),在单位短时间内对多新闻网站为1000。

当一个劝说到来时,先确实有一定但会有延时,若一定但会延时,在确实在此单位短时间内新闻网站确实大约1000,若未超限,则接受劝说,超限,则丢弃。

为延时,则进入下一个短时间片。

标识符解决问题如下:

#include #include #include #include #include int gMax; //短时间片内多达处理的劝说个仅int gDuration; //短时间片,单位为秒time_t gLastUpdateTime; //上一次修正定时器的短时间int gReqNum; //这两项短时间片内的处理的劝说仅time_t getCurrentTime(){struct timeval stTimeVal;struct tm *pstTimeCurrent = NULL;gettimeofday(AndrewstTimeVal, NULL);pstTimeCurrent = localtime((time_t *)AndrewstTimeVal.tv_sec);return mktime(pstTimeCurrent); }void init(int max, int duration){gMax = max;gDuration = duration;gLastUpdateTime = getCurrentTime();return;}int IsValid() {time_t now = getCurrentTime();//未延时if(now < gLastUpdateTime + gDuration){gReqNum++;return gMax> gReqNum;} else { //延时gLastUpdateTime = now;gReqNum = 1;return gMax> gReqNum;}}

定时器限速方案的解决问题是在成员函仅IsValid()中解决问题的,即为该次劝说确实必要。在该解决问题中,先确实这两项短时间确实大约明文规定的短时间片,若一定但会有,则劝说至多累加1,然后确实确实大约远超过劝说仅,若一定但会有大约,则标志本次劝说必要,若大约,则对此本次劝说无效。

若延时,修正短时间及劝说仅。

定时器限速基本特征

优点 : 解决问题简单。缺点:有显然控制系统显现空闲或者在短时间片切换短时间内显然流量暴增,导致控制系统崩溃。比如但会显现如下2种情况:1、一段短时间内(不大约短时间车站内)控制系统免费不宜用。比如车站内大小为1s,限速大小为100,然后碰巧在某个车站内的第1ms来了100个劝说,然后第2ms-999ms的劝说就都但会被拒绝,这段短时间用户但会心里控制系统免费不宜用。2、车站内切换时显然但会产生两倍于也就是说流量的劝说。比如车站内大小为1s,限速大小为100,然后碰巧在某个车站内的第999ms来了100个劝说,车站内前期一定但会有劝说,所以这100个劝说都但会通过。于是又碰巧,下一个车站内的第1ms又来了100个劝说,也全部通过了,那也就是在2ms这样一来通过了200个劝说,而我们基本上的也就是说是100,通过的劝说降到了也就是说的两倍。八子补肾胶囊
得了新冠吃什么药好得快
肠炎宁片的功效与作用
胸腺法新的作用
迈普新怎么样
标签:计数器方式
友情链接