论文部分内容阅读
目前,分布式系统的应用已经越来越广泛,规模和复杂性不断增加,其可靠性变得越来越重要,却越来越难以实现。然而对于一些关键应用领域(如航天、军事、金融、医疗等),确保系统的高可靠性是非常必要的。故障检测是构建可靠的分布式系统所必需的基础服务组件之一。随着分布式系统规模的不断扩大,故障检测的自适应能力和可扩展性已经变得非常重要。本文的工作针对这两个问题展开,研究了其中几项关键技术。首先,在自适应于网络变化的基础上,进一步研究了能够自适应于多个应用程序检测需求的故障检测器;然后针对层次式检测方法存在的缺陷,分别研究了Leader节点的可用性问题和链路故障的检测问题。本文的研究结果可直接应用于层次式检测方法各个环节的设计之中,为大规模分布式系统故障检测机制的设计提供了理论支持。分布式系统规模的不断扩大产生了大量对故障检测有着不同服务质量(Quality of Service, QoS)需求的分布式应用,对于故障检测器,为保持其有效性和可扩展性,应该既能够准确提供应用程序所需的故障检测QoS,又能够避免为满足不同QoS而设计多套故障检测器产生的多余负载。为此,检测器在自适应于网络条件的基础上,还应该能够适应于不同应用程序的需求。本文基于QoS基本评价指标(TDU,TMRL,TMU) ,采用PULL模式主动检测策略实现了一种新的故障检测器—QA-FD,可以同时支持多个应用程序定量描述的QoS需求,不需要关于消息行为和时钟同步的任何假设。同时,证明了QA-FD在部分同步模型下可实现一个◇P类的故障检测器,并给出了相应的实验及数据。层次式故障检测方法是降低检测负载,提高系统可扩展性的一种重要方法,并且具有较高的实际应用价值。但是,这类方法过分依赖于每个分组的Leader节点,形成了一个单故障点,使Leader节点成为系统可靠性瓶颈。本文根据分布式系统自身的特点,提出了一种基于仲裁的双模容错Leader节点解决方案。通过马尔科夫模型对双模系统进行分析,指出了高覆盖率和高成功率的故障检测机制对系统可用性的重要影响。针对传统使用的故障检测机制成功率较低的问题,提出了一种仲裁检测机制,仲裁系统采用容错方案设计,具有较高的可靠性,在双机无法对故障做出正确判断时,可作为可信的第三方对故障做出准确的定位,有效地提高了系统的检测成功率。在此基础上,结合自检测和心跳检测机制,设计了一种基于仲裁的多级故障检测机制,进而提出了一个完整的双模高可用Leader节点解决方案,并将其应用到了实际项目的研发之中,通过故障注入实验验证了其可用性能够满足系统的设计要求。目前大多数故障检测算法都将故障模型局限于节点故障,将链路故障简单的掩盖或是直接模型化为节点故障,这造成了系统节点资源的迅速消耗,导致系统可用性的潜在下降。本文提出了一个基于多中心节点的故障检测协议(DPHM),引入了多中心节点的检测结构,通过多中心节点间的表决机制可以迅速、准确地检测并定位故障链路,解决了故障链路与故障节点无法区分的问题。同时,中心节点之间引入了选举能力,可在中心节点发生故障时及时的选举新的中心节点,进一步延长了系统连续工作时间,提高了系统可用性。拜占庭故障是最为复杂的一种故障模型,对其进行掩盖或是检测都需要更大的代价。但是,在某些对可靠性要求非常高的场合,在故障模型的假设中却必须要考虑。为此,本文进一步研究了存在拜占庭故障链路和节点的系统的故障检测问题。针对拜占庭故障行为的任意性,首先提出了一种无效链路故障模型,可以更加准确的描述恶意组件的故障行为对系统的影响,有效提高故障检测的覆盖率。在此模型基础上,提出了一个基于证据的故障诊断一致性协议PLFDA,可以同时实现对拜占庭节点和链路的检测。最后,给出了PLFDA的正确性和复杂性证明及实验结果。