Nginx限速算法简介

2024-11-14 14:02 By "Powerless" 1623 0 0

【核心算法】

在探究Nginx限速模块之前,我们先来看看网络传输中常用两个的流量控制算法:漏桶算法和令牌桶算法。这两只“桶”到底有什么异同呢?


【漏桶算法】

漏桶算法(leaky bucket)算法思想如图所示

1731564444958.jpg

一个形象的解释是:

    水(请求)从上方倒入水桶,从水桶下方流出(被处理);

    来不及流出的水存在水桶中(缓冲),以固定速率流出;

    水桶满后水溢出(丢弃)。

这个算法的核心是:

    缓存请求、匀速处理、多余的请求直接丢弃。


【令牌桶算法】

令牌桶(token bucket)算法思想如图所示

1731564566979.jpg

算法思想是:

    令牌以固定速率产生,并缓存到令牌桶中;

    令牌桶放满时,多余的令牌被丢弃;

    请求要消耗等比例的令牌才能被处理;

    令牌不够时,请求被缓存。

相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的。

从作用上来说,漏桶和令牌桶算法最明显的区别就是是否允许突发流量(burst)的处理,漏桶算法能够强行限制数据的实时传输(处理)速率,对突发流量不做额外处理;而令牌桶算法能够在限制数据的平均传输速率的同时允许某种程度的突发传输。

Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。


评 论

Others Discussion

  • 分布式服务限流
    Posted on 2020-02-07 18:57
  • 有状态服务VS无状态服务
    Posted on 2020-02-07 18:18
  • 企业级PAAS云平台几个关键问题和挑战
    Posted on 2019-06-12 18:33
  • MySQL 单库后期分库策略
    Posted on 2019-08-19 14:31
  • Redis七大经典问题
    Posted on 2021-05-27 11:14
  • 关于HTTPS的五大误区
    Posted on 2020-02-02 01:10
  • PHP扩展GD安装
    Posted on 2018-10-29 18:29
  • PHP实现精确发布时间
    Posted on 2018-12-06 21:00