微服务系统可能会出现的故障:

  • 集群故障
  • 单 IDC 故障
  • 单机故障

集群故障

产生集群故障的原因:

  • 代码 bug
  • 流量冲击

解决思路:

  • 限流
  • 降级

限流

  • 设置流量阈值
  • 要考虑同一台服务器间多个服务的影响

实施:

  • QPS
  • 工作线程数

降级

  • 停止系统的某些功能
  • 系统已经出现故障所采取的措施

实施:

  • 实现一个开关, 可以动态更改

开关用在:

  • 新增的业务逻辑
  • 依赖的服务或资源

降级需要分等级, 一般为三级:

  • 一级降级: 对业务影响最小, 可设置为自动降级
  • 二级降级: 人工开启
  • 三级降级: 对业务有较大影响

单 IDC 故障

  • 不可抗力: 机房着火, 光缆被挖断

解决方案:

  • 多 IDC 部署, 出现问题时切换流量

流量切换方式:

  • 基于 DNS 解析
  • 基于 RPC 分组 (配置中心)

单机故障

  • 发生率最高
  • 数量多, 人肉运维不行

解决方案:

  • 自动重启

总结

在遇到实际的故障时,往往多个手段是并用的,比如在出现单 IDC 故障,首先要快速切换流量到正常的 IDC,但此时可能正常 IDC 并不足以支撑两个 IDC 的流量,所以这个时候首先要降级部分功能,保证正常的 IDC 顺利支撑切换过来的流量。

而且要尽量让故障处理自动化,这样可以大大减少故障影响的时间。因为一旦需要引入人为干预,往往故障处理的时间都得是 10 分钟以上,这对大部分用户敏感型业务的影响是巨大的,如果能做到自动化故障处理的话,可以将故障处理的时间降低到 1 分钟以内甚至秒级别,这样的话对于用户的影响最小。