服务熔断及降级

  • 断路器(circuitbreaker):断路器有三种普通状态:关闭(closed)、开启、半开(half_open);还有两个特殊状态:禁用(disabled)、强制开启(forced_open)

  • 当熔断器关闭时,所有的请求都经过熔断器

    • 如果失败率超过设定的阈值,熔断器就会从关闭状态转换到打开状态,这时所有的请求都会被拒绝

    • 当经过一段时间之后,熔断器就会从打开状态转换为半开状态,这时仅有一定数量的请求会被放入,并重新计算失败率

    • 如果失败率高于阈值,则变为打开状态,如果低于,则变成关闭状态

  • 断路器使用滑动窗口来存储和统计调用的结果,可以选择基于调用数量的滑动窗口或者基于时间的滑动窗口

    • 基于数量的统计了最近n次调用的返回结果,基于时间的统计了最近n秒的调用结果

  • 断路器代码要装在消费者调用侧,使用@circuitBreaker注解(aop)的方式进行调用

  • bulkhead隔离:

    • 依赖隔离&负载保护:用来限制下游服务的最大并发量,提供了两种方式

      • fixedThreadPoolBulkhead线程池(使用了有界队列和固定线程池舱壁)

      • semaphoreBulkhead(信号量舱壁)

    • core包含在max里面,所以不用管core的容量,只需要max+阻塞队列的容量即可

    • 使用@BUlkhead注解进行舱壁隔离

  • 限流:@RateLimiter:

    • 常见的限流算法:漏桶算法:漏出的速率是规定不变的,对突发性的流量缺乏效率

    • 令牌桶算法:spring cloud默认算法(token bucket)

    • 滚动时间窗:允许固定数量的请求进入(如疫苗取四个数据相加,超过25就over)超过数量就拒绝或者排队:缺点,容易在某个时间节点突然涌入大量请求,导致系统过载,比如最后一秒是该段的结束同时也是下一段的开始,所以可能会导致系统崩溃

    • 滑动时间窗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值