广州皮具网站建设,学校局域网站建设,网站开发会什么软件,互联网项目推广是什么文章目录 分布式故障基础知识故障类型故障检测故障恢复 分布式故障检测原理故障恢复策略 分布式故障基础知识 故障类型
在任何一个分布式系统中#xff0c;故障都是不可避免的。这里的故障#xff0c;通常包括两类#xff1a; 一类是物理故障#xff0c;比如硬盘损坏、断电… 文章目录 分布式故障基础知识故障类型故障检测故障恢复 分布式故障检测原理故障恢复策略 分布式故障基础知识 故障类型
在任何一个分布式系统中故障都是不可避免的。这里的故障通常包括两类 一类是物理故障比如硬盘损坏、断电断网、硬件升级等另一类是软件层故障比如系统存在 Bug 导致系统崩溃、系统负载过高导致系统崩溃等。 在讨论分布式系统故障时我们通常还会从是否是网络导致的故障的角度来进行故障划分包括节点故障和网络故障而这两类故障可能同时包括物理故障和软件层故障。由于软件层故障和具体的程序实现等相关因此主要由开发者根据自己的实现去解决而物理故障通常具有很多共同特征。
节点故障
简单地说节点故障就是单个机器自身出现故障。比如由机器 A、B……Z 构成的分布式集群中机器 A 自身出现故障而不是非机器之间的网络连接出现故障就是节点故障。 节点故障有很多种大体可以分为两类 一类是硬件故障比如机器硬盘损坏、内存接触不良等另一类是软件故障比如由于请求过多超过服务器处理能力上限导致无法处理又或者是机器被攻击导致机器瘫痪等。 节点故障在软件层的表现结果是该机器无法为用户提供服务。
网络故障
简单地说网络故障就是分布式集群中节点之间无法完成通信。比如由机器 AB……Z 构成的分布式集群中机器间比如机器 A 和 B 之间无法完成通信就属于网络故障。 网络故障也有很多种比如路由器故障、DNS 故障、网络线路断裂等。这些物理故障在软件层的表现结果是机器间无法通信影响分布式应用正常提供服务。
故障检测
故障检测就是指通过一定的方式识别或发现故障。就好比我们把火灾、地震等危险事件看作是故障采用火灾报警器、地震仪等来检测发现火灾或地震。如果可以提前检测到事件的发生就能将损失降到最小。在分布式系统中检测硬件故障通常比较麻烦因此会通过查看软件层的表现结果来进行故障检测。比如网络故障导致服务器之间无法通信因此就可以通过检测服务器之间是否可以通信比如服务器之间心跳包是否可以正常地发送和接收来检测是否存在网络故障。
故障恢复
故障恢复就是指修复分布式系统中出现的故障使系统恢复正常。简单来说故障恢复就是故障发生之后的弥补方案可以理解为对故障进行修正或修复以保证服务正常运行有点类似“知错能改善莫大焉”。
分布式故障检测原理
在分布式系统中常见的故障检测方法是心跳机制。基于心跳进行故障检测的策略主要分为两类固定心跳检测策略和根据历史心跳信息预测故障策略。
故障恢复策略 关于故障恢复策略从单节点故障和网络故障两个维度展开。 对于单节点故障问题往往采取主备策略即当主节点故障后从备节点中选出一个作为新的主节点以继续提供服务。这种备升主的方式比较好理解。 如下图所示用户 A 访问分布式集群时一直是与 Master 交互的但当 Master 故障后其他 Slave 会通过分布式选举算法选出一个新的主节点。假设从 Slave 1、Slave 2 和 Slave 3 中选举出 Slave 2 作为新的 Master则 Slave 2 需要承担原来 Master 的职责继续为用户提供服务因此当用户 A 再次访问集群时提供服务的是新选出的 Master也就是 Slave 2。这就是备升主的过程。 从用户 A 的角度来看并不会感受到服务有什么异常因为依旧可以正常访问集群。因此主备策略可以大大提高分布式系统的可用性在分布式系统中随处可见。比如Redis 集群、ZooKeeper 集群等都是采用了这种主备策略来做故障恢复。 对于网络故障问题的解决方案简单来说就是 C、A、P 选择的问题即在分布式系统的可用性和数据一致性之间做权衡。根据不同的应用场景选择不同的解决方案。 当分布式系统中出现网络故障时对于高可用性要求严格的系统比如要求必须及时响应用户的场景就需要采用保 AP 弃 C 的策略对于数据一致性有严格要求的系统比如银行、金融系统等场景就需要采用保 CP 弃 A 的策略。 网络故障恢复问题也可以看作数据复制的问题即网络故障恢复后节点间数据同步的问题。 节点故障和网络故障也有交叉的地方比如网络故障产生的原因可能是节点故障即因为节点故障导致节点间无法通信而不是纯粹的网络链路问题。这种情况有两种可能性一种是节点临时性故障即一段时间后就会恢复一种是节点永久性故障即节点不会恢复。针对第一种情况只需等到故障恢复后数据进行同步即可第二种情况则需要备升主策略来解决。 知识扩展固定心跳检测和基于历史心跳信息预测故障的策略各有什么特点呢 固定心跳检测的核心是固定周期 T 秒发送心跳若连续 k 次未收到心跳回复时间 T 内则判断心跳超时的时间为 kT 秒。可以看出k 和 T 的设置非常重要。比如对于要求秒级故障检测的场景时延敏感性场景则 kT≤1s因此需要将 T 设置为 ms 级比如200msk 设置为 1000/2005 次。但这样一来容易导致误判。因为判断超时的时间设置得太短很可能是系统做内存回收或系统本身有高任务在运行导致心跳回复延后。对于时延不太敏感的场景k 或 T 可以设置得大一些降低误判率但却会增加发现故障的时间。 φ值故障检测。φ值故障检测是基于心跳间隔符合正态分布的假设通过对历史心跳数据采样来预测当前心跳是否超时的。也就是说心跳间隔符合比较平稳或符合规律的情况下比较适合但对于具有突发情况或心跳间隔无规律的场景误判率比较高。 在网络状况确定且比较稳定的场景下大多数系统会采用固定心跳检测策略因为其可以根据网络状况与业务场景自主设定合适的 k 和 T 值简单有效而当网络状况有所变化且变化有规律的场景则可以使用φ值故障检测策略。 你知道的越多你不知道的越多。