高效的限流、灵活的熔断
限流、熔断解决微服务异常问题
限流的纬度
- 接口限流
- 总限流
限流的单位
- 限并发
- 限QPS/TPS
限流的分类
- 单击限流
- 集群限流
单击限流方案:限制并发VS限制QPS/TPS
- 单击:
1.限制并发:计数器(需原子性和互斥性)放在aop处理 ,count++执行之后再count–
2.限制qps/tps(令牌桶不放回,每秒充令牌,请求先取到令牌) - 集群:集中式缓存
Redis获取令牌,
1.另一个程序定时充令牌较危险;
2.另一种获取时间隔相同步长(过期时间)充令牌,需注意同时充令牌时循环覆盖,采用redis的乐观锁机制watch->multi->exec;很难减负载
3.自研方案:分布式系统内执行单击限流,按不能的逻辑拆分成不同的系统;类似雪花算法,总系统自己维护一个计数器,用完时到对应的分布式系统中申请令牌
熔断的本质:减少级联错误
调用不同服务进入不同的线程不相互影响
- 失败率触发:比如100次5次熔断
- 失败总次数触发:比如10秒内发生了100次熔断
熔断的恢复
- 全回复
- 半转全(配置策略尝试调用已熔断的系统,可控制半转全的节奏)
微服务监控
监控常用纬度
- 接口
- DB:慢查询
- Redis:大key
- …
- 硬件(CPU\IO Wait\Memory,网卡)
监控指标
- 接口TPS/QPS,AVG耗时,95线,99线和99.99线
- CPU load average:真正体现系统忙闲的关键
- Memory占用
- IO Wait
- 网卡占用
- 客户端监控:可以使用客户端埋点
监控工具
- 大众点评开源CAT
- Zabbix:硬件指标和图标报盘