[分布式系统] 高并发系统限流算法
当请求流过大时,可能导致服务接口不可用或者整个服务系统崩溃。
一般解决办法为引流或者限流,常用的限流算法包括漏桶和令牌桶算法。
1.漏桶算法
即将请求缓存在桶中,桶底限制一个最大速率来对接口进行请求。
漏桶算法可以限制请求的平均数量,但当需要允许某些突发传输情况时可能不合适。
2.令牌桶算法
系统以恒定速率向桶中放入令牌,接受到的请求需要从桶中取得令牌以得到服务,否则会拒绝服务。
Google开源的Guava提供的限流工具类RateLimiter即基于令牌桶算法进行限流。
3.适用场景
令牌桶算法适用于自己的服务,即自己能够预留一定余量来应对部分突发流量。
漏桶算法则用在请求第三方调用库,对方有严格的速率限制时。