微服务系统可能会出现的故障:
- 集群故障
- 单 IDC 故障
- 单机故障
集群故障
产生集群故障的原因:
- 代码 bug
- 流量冲击
解决思路:
- 限流
- 降级
限流
- 设置流量阈值
- 要考虑同一台服务器间多个服务的影响
实施:
- QPS
- 工作线程数
降级
- 停止系统的某些功能
- 系统已经出现故障所采取的措施
实施:
- 实现一个开关, 可以动态更改
开关用在:
- 新增的业务逻辑
- 依赖的服务或资源
降级需要分等级, 一般为三级:
- 一级降级: 对业务影响最小, 可设置为自动降级
- 二级降级: 人工开启
- 三级降级: 对业务有较大影响
单 IDC 故障
- 不可抗力: 机房着火, 光缆被挖断
解决方案:
- 多 IDC 部署, 出现问题时切换流量
流量切换方式:
- 基于 DNS 解析
- 基于 RPC 分组 (配置中心)
单机故障
- 发生率最高
- 数量多, 人肉运维不行
解决方案:
- 自动重启
总结
在遇到实际的故障时,往往多个手段是并用的,比如在出现单 IDC 故障,首先要快速切换流量到正常的 IDC,但此时可能正常 IDC 并不足以支撑两个 IDC 的流量,所以这个时候首先要降级部分功能,保证正常的 IDC 顺利支撑切换过来的流量。
而且要尽量让故障处理自动化,这样可以大大减少故障影响的时间。因为一旦需要引入人为干预,往往故障处理的时间都得是 10 分钟以上,这对大部分用户敏感型业务的影响是巨大的,如果能做到自动化故障处理的话,可以将故障处理的时间降低到 1 分钟以内甚至秒级别,这样的话对于用户的影响最小。
