Nginx 限速使用的是漏桶算法,此算法图示如下,一个桶有一定的容量,水从桶的上方流入,如果桶中有水,水就会从下方按照一定的速率流出。
当然如果桶的容量已满,流入的部分水就会溢出。如果桶没有满,水流入速度大于流出速度,那么桶的容量就会上升。
类比nginx环境,设置限速是1秒100个请求。Nginx时间粒度是毫秒,也就是10ms允许通过1个请求。那么可以认为桶的容量(10ms)是1。如果10ms到达2个请求,那么1个请求可以通过,1个会被拒绝。如果10毫秒到达1个请求,那么都可以顺利的通过。这是非常简单的场景,实际上漏桶算法也会考虑burst突发的场景。