分布式系统(六)故障、容错

401 阅读3分钟

故障、容错

容错性简述

什么是故障

任何系统在长时间运行过程中,都可能发生故障。要么是设备上运行的服务故障;要么是设备的软件系统故障;要么是硬件系统故障;要么是通信链路故障;要么是时钟错乱故障等。

什么是容错

任何系统都有可能出现故障,每个系统都必须解决故障,如早期的RDBMS对于事务故障、系统故障、硬件故障等都有自己的容错方案(备份、恢复等)。

当系统出现故障后就可能会导致系统不可用,因此避免这些故障或故障后的解决方案就是容错。

分布式系统下的容错

集中式系统下,故障产生原因可能是设备上的服务、设备软硬件、网线等,对于大型系统来说,这些故障很难发生,服务通常可以认为是稳定的,因为轻易不会去动它;软硬件同样是稳定的。

分布式系统下,故障产生的原因变多了,如通信失败、时钟错乱等,故障原因的增多增加了故障的概率。另一方面集中式系统下只有单个设备,而分布式系统下是多个设备协作的,因此故障概率也从1变为了多。

所以由于分布式系统下这两种情况导致了故障率的增大,因此在分布式系统下需要专门进行针对系统进行容错。

分布式系统下的故障避免或解决方式

针对事务相关故障,使用分布式事务、WAL等技术解决。

针对系统软硬件故障,使用复制技术解决。

针对时钟故障,使用Ntp等时钟同步技术解决。

针对通信故障,使用重试、fullback等技术解决。

事务故障

事务执行失败
  • 使用分布式事务解决,如2PC,事务失败后,所有设备不要提交,设备自身进行回滚。
事务执行成功但未持久化
  • 设备自身使用WAL等技术实现服务重启后的恢复。

通信故障

目标设备无法找到
  • 返回缓存消息
  • 返回fullback消息
  • 直接报错
接收端未收到响应
  • 返回超时错误
  • 再次查询接收端是否接收到消息
  • 重试
发起端未收到响应
  • 返回超时错误
  • 再次查询接收端是否接收到消息
  • 重试
消息不全
  • 重试
  • 通信接口支持幂等

时钟故障

发起端时钟过期、过早
  • 使用更精确的时钟
  • 使用NTP等协议实现时钟同步

服务故障

进程崩溃
  • 守护进程拉起崩溃的进程
  • 负载均衡,调用端探测服务从而切换下一次的目标设备
  • 复制技术实现多个副本

设备故障

软件系统崩溃
  • 负载均衡,调用端探测服务从而切换下一次的目标设备
  • 复制技术实现多个副本
网卡、CPU、磁盘等硬件损坏
  • 负载均衡,调用端探测服务从而切换下一次的目标设备
  • 复制技术实现多个副本