Alibaba sentinel原理解析

sentinel一般作为服务的熔断降级、限流。

sentinel有两种方式来实现服务的熔断降级、限流,第一种为注解的方式(由spring AOP来实现),第二种为客户端配置的方式(有拦截器来实现)

sentinel在拦截器里面通过SPI机制加载了8种slot,每种slot负责不同的运算,并且将这些slot存在到一个链表结构当中,形成一个调用链,依次调用每一个slot。

熔断降级:sentinel会拦截请求,在请求开始的时候,会判断当前的状态(存在三种状态:open、halfopen、close),open的话需要判断是否超过熔断时间,超过的话改为halfopen,halfopen的话会通过cas放一个请求过来,close的话直接请求;在请求结束的时候,同时也会判断当前的状态,如果是halfopen的话并且请求时长符合设置标准,那么将状态改为open,不符合的话,延期熔断时间,如果是close的话,不符合标准则会计算,并且算出比率值判断出是否需要改到open状态。

限流:有三种方式来实现限流(滑动时间窗、漏桶、令牌桶)

滑动时间窗算法:sentinal的滑动时间窗有一点区别,它可以理解成一个环状的方式来实现的,分为秒级和分钟级,以秒级来举例说明,是将1S分为两个500ms,存在一个开始时间,通过获取到请求的秒数,来算出具体在哪一个区间,并且如果与上一轮开始时间相同,则计数器开始统计合格与不合格,如果不同则重置开始时间,并且计数器统计合格与不合格,在请求开始时通过和设置的进行比较来确认是否需要拦截。

漏桶算法:相当于给时间划分区间,一定的时间只能运行一个请求进来。

令牌桶算法:首先会有token bucket(令牌桶),令牌生成器会以指定的速度向令牌桶输入令牌,如果令牌桶满时,会丢弃掉新生产的令牌,当有一个请求过来时,会消耗掉一个令牌。如果没有获取到令牌,会直接拦截,只允许获得到令牌的请求通过。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值