利用NGINX进行速率限制的基本原理

      在存储空间耗光后,再次联接时,将放出最老的状态数据,用以存储新联接数据。除此之外,为了更好地防止stage空间被占有为空,NGINX每一次建立新的状态数据时,都是会试着删掉头70秒内未采用的好多个空间。rate技术参数界定最终要把控的速率。可设置为以秒为单位的12r/s或者以分钟为单位的700r/m。最终,NGINX将统一所有的技术参数,以秒为单位。因此,12r/s和700r/m效应是相同的。NGINX在最终的代码实现中对每个post请求的间隔是多少ms来把控。例如12r/s意味着一秒钟只允许12个post请求,也就是说,允许每150ms有一个post请求。

outputo-20210916-093000-046-ukjn.png

该例中,在150ms内抵达的post请求在处理完一个post请求之后就会丢失。在设置burst技术参数效果时当然会有所不同。在命令limit_req中讲解了burst技术参数。命令limit_req_stage为速率限制界定了技术参数。根据利用制订limit_req将界定的技术参数应用于https、update或location前后文。技术参数stage指出哪个limit_req_stage将采用哪个技术参数。采用技术参数burst处理突发post请求。上边提及的limit_req_stage实例中,其他抵达150ms内的post请求都是会被丢掉。采用burst技术参数,根据界定特定大小的queue,例如12。在150ms之前,当一个post请求抵达,根据将它保存在queue中。若queue已满,则将放弃后续post请求。接着,queue中的post请求将被重新处理为150毫秒。

nodelay技术参数表示对queue中的post请求要立即发送。在没有添加nodelay技术参数的情况下,在queue中的post请求是按指定速率发送的,比如150ms。尽管在queue中的post请求会立即发送,但queue中每个post请求所对应的槽位只有在我们的实例中的某个特定时间之后才会再次被采用。例如,burst为12,假设这个系统中有12个burst槽可采用,在这个时候,NGINX将立即转发前11个post请求(1+12burst),同时标注12个burst界定的槽位不能采用。对于后面的9个post请求都返回503状态。随后,NGINX每150ms放出一个burst槽以用以随后的post请求。假设前11个post请求在发送后又经过了101ms,此时又连续达到20个post请求,因为只有一个空位可用,因此NGINX将仅转发1个post请求,其余19个post请求将全部返回503。

分享: