springcloud之sentinel(一)

1、常见的限流算法:

1)semaphore:处理了一个请求,计数器加一,一个请求处理完毕之后计数器减一。

  缺点:假设我们允许的阈值是1万,此时计数器的值为0,如果并发一万个请求进来,服务器可能会出问题。

2)固定窗口:首先维护一个计数器,将单位时间段当做一个窗口,计数器记录这个窗口接收请求的次数

  缺点:一段时间内(不超过时间窗口)系统服务不可用;窗口切换时可能会产生两倍于阈值流量的请求。

3)滑动窗口:滑动窗口除了需要引入计数器之外还需要记录时间窗口内每个请求到达的时间点,因此对内存的占用会比较多。

  规则如下,假设时间窗口为 1 秒:

  a记录每次请求的时间
  b统计每次请求的时间 至 往前推1秒这个时间窗口内请求数,并且 1 秒前的数据可以删除。
  c统计的请求数小于阈值就记录这个请求的时间,并允许通过,反之拒绝。

  缺点:滑动窗口和固定窗口都无法解决短时间之内集中流量的突击

4)漏桶算法:缺点:面对突发请求,服务的处理速度和平时是一样的

5)令牌桶:根据限流大小,定速往令牌桶里放令牌,令牌数量满了,超过令牌桶容量的限制,那就丢弃;系统在接受到一个用户请求时,都会先去令牌桶要一个令牌。如果拿到令牌,那么就处理这个请求的业务逻辑。

2、限流要素:

  1)资源:服务,接口,方法,链路

  2)规则:并发线程数量

  流量控制之后:抛异常,队列,降级

3、流控行为:抛异常、warm up 、匀速排队、冷启动+匀速排队

 

posted @   董振  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示