- 目的:防止分布式系统雪崩;
- 方法:熔断和自恢复;
- 状态机:
- 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服务,增加网络丢包率,增大网络延迟等.