一、背景
在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量;降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀)、写服务(下单),因此需有一种手段来限制这些场景的并发/请求量,即限流。
限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求量进行限速来保护系统,一旦达到限制链接数、速率则可以拒绝服务、排队等。
高并发系统常见的限流主要有:限制并发数、限制每秒请求数等。
限流的实现方案有很多种,日常工作主要会遇到如下方式限流:
- 容器限流:比如 Tomcat、Nginx 等限流手段,Tomcat 可以设置最大线程数, Nginx 提供了两种限流手段:一是控制速率,二是控制并发链接数;
- 应用服务层限流:我们在应用程序通过限流算法实现限流。