服务高可用-限流、熔断、降级、混沌工程

  • 目的:防止分布式系统雪崩;
  • 方法:熔断和自恢复;
  • 状态机:
    • closed,open,half-open 自动切换:
    • open状态: 说明打开熔断,也就是服务调用方执行本地降级策略,不进行远程调用。
    • closed状态:说明关闭了熔断,这时候服务调用方直接发起远程调用。
    • half-open状态:则是一个中间状态,当熔断器处于这种状态时候,直接发起远程调用。

详细参数说明

参数 解释 默认值
DefaultTimeout 请求默认超时时间 1000ms
DefaultMaxConcurrent 最大并发数 10
DefaultVolumeThreshold 最低触发熔断的请求数 20
DefaultSleepWindow 睡眠窗口,超时后进入half-open状态 5000 ms
DefaultErrorPercentThreshold 错误比率 50%

隔离

  • 数据隔离
  • 机器隔离 核心业务提供独立服务,通过client ID 切流
  • 协程池隔离 不同响应的rpc 隔离开,并限制协诚池的大小
  • 信号量隔离 atomic 计数控制并发量

限流

  • 是服务端对请求过载限制的保护方式

技术层面(资源限制)

限制数量

  • 连接池
  • 线程池
  • nginx limit_conn

限制qps(压测获得后设置)

  • ratelimit
  • nginx limit_req

限流算法

  • 漏桶算法: 桶容量固定,流出速度固定,流入超限则丢弃/排队;限制平均流入速度;
  • 令牌桶算法:令牌数量固定,取到令牌则处理,否则丢弃/排队;削峰;

业务限流

  • 秒杀:redis/nginx+lua

熔断

  • 熔断是客户端避免依赖服务对当前服务的影响的保护方式
  • 也是一种降级方式

基于错误率的熔断

  • hystrix

基于响应时间熔断

  • sentinel

降级

  • 实际是兜底方案;系统出现异常是,保证核心业务可用性。

全链路压测

切流-灰度发布

盲测

  • chaos monkey 故障演练平台
  • 混沌工程: 识别云环境中的服务,然后随机的对他们进行关闭。由于避免对于线上有过大的影响,这个运行的时候一般是特定的时间点和特定的时间段。 可以采取的破坏性措施,例如关闭特定服务接口,关闭特定缓存服务,关闭特定DB服务,增加网络丢包率,增大网络延迟等.
WRITTEN BY:    陈贞

个人博客