net的分布式系统限流组件
在互联网应用中,流量洪峰是常有的事情。在应对流量洪峰时,通用的处理模式一般有排队、限流,这样可以非常直接有效的保护系统,防止系统被打爆。另外,通过限流技术手段,可以让整个系统的运行更加平稳。今天要与大家分享一下限流算法和C#版本的组件。
Image
一、令牌桶算法:
令牌桶算法的基本过程如下:
假如用户配置的平均发送速率为r,则每隔1/r秒速率将一个令牌被加入到桶中;
假设桶最多可以存发b个令牌。当桶中的令牌达到上限后,丢弃令牌。
当一个有请求到达时,首先去令牌桶获取令牌,能够取到,则处理这个请求
如果桶中没有令牌,那么请求排队或者丢弃
工作过程包括3个阶段:产生令牌、消耗令牌和判断数据包是否通过。其中涉及到2个参数:令牌产生的速率和令牌桶的大小,这个过程的具体工作如下。
产生令牌:周期性的以固定速率向令牌桶中增加令牌,桶中的令牌不断增多。如果桶中令牌数已到达上限,则丢弃多余令牌。
消费 令牌:业务程序根据具体业务情况消耗桶中的令牌。消费一次,令牌桶令牌减少一个。
判断是否通过:判断是否已有令牌桶是否存在有效令牌,当桶中的令牌数量可以满足需求时,则继续业务处理,否则将挂起业务,等待令牌。
下面是C#的一个实现方式
class TokenBucketLimitingService: ILimitingService
{
private LimitedQueue