一种简单流控算法

 

  • 所有实例之间维护时间窗口队列,如果最近一秒内的元素数量超过阈值,施行流控拦截
  • 如果最近一秒内的元素数超过阈值,新的元素不会被加入,而是等待流控拦截最大时长过去之后再开始继续加入元素。
//que 时间戳队列 tps 单位时间容量 timeValue时间戳
bool baseCheck(std::deque<long long> &que, int tps, long long timeValue)
{ 
    if (que.size() >= tps)
    {
        if (timeValue - que.front() < m_interval_time)
        {
            XLOG(debug) << "tps limit, check deque failed";
            return false;
        }
        else
        {
            que.pop_front();
            que.push_back(timeValue);
            XLOG(debug) << "history deque task timeout, check success";
            return true;
        }
    }
    else
    {
        que.push_back(timeValue);
        XLOG(debug) << "deque size < tps, check success";
        return true;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值