每个后端程序员都需要了解的网络分区故障

B站影视 日本电影 2025-03-28 07:47 1

摘要:• 研究背景:随着对云计算系统的依赖增加,用户期望系统具有高可用性和数据持久性。云系统被设计为高度可用,并能承受各种故障,但网络分区故障对现代分布式系统的影响尚不明确。

• 研究背景:随着对云计算系统的依赖增加,用户期望系统具有高可用性和数据持久性。云系统被设计为高度可用,并能承受各种故障,但网络分区故障对现代分布式系统的影响尚不明确。

• 研究目的:更好地理解网络分区故障对现代分布式系统的影响,包括导致用户可见系统故障的具体事件序列,以及如何提高系统对这些故障的容错能力。

• 网络分区类型:包括完全网络分区、部分网络分区和单向网络分区。完全网络分区将网络分为两个不相连的部分;部分网络分区使部分节点与其他部分断开但并非全部;单向网络分区只允许单向流量。

• 理论极限:数据一致性模型定义了读操作可能返回的值,强一致性模型易于理解和使用,但会降低系统可用性。CAP定理指出,在网络分区存在时,系统设计者需在服务可用性和数据一致性之间做出选择。

• 测试方法:常见的测试网络分区故障的方法包括模拟、使用测试框架(如Jepsen)等,但这些方法各有局限性。

• 研究方法:研究了25个广泛使用的分布式系统的136个网络分区故障,包括键值存储系统、数据库、文件系统、对象存储系统等。通过分析故障报告、日志、用户和开发者讨论、源代码、代码补丁和单元测试等来理解故障。

• 局限性:可能存在样本偏差、选择偏差和观察者误差,但研究者通过选择多样化的系统、严格的筛选方法和团队成员的独立审查等来尽量减少这些影响。

• 故障影响:80%的故障具有灾难性影响,其中数据丢失是最常见的(27%)。大多数故障是静默的,不会返回错误或警告信息给客户端,且21%的故障会导致系统永久损坏,即使网络分区愈合后也存在。

• 系统机制的脆弱性:领导者选举、配置更改、请求路由和数据整合是最容易受到网络分区影响的机制。领导者选举是最脆弱的,40%的故障与其有关,常见的问题是同时存在两个领导者。

• 网络故障分析:64%的故障不需要任何客户端访问或只需要访问网络分区的一侧。29%的故障是由部分网络分区引起的,这种故障类型在生产网络中较为常见,但理解和测试不足。

• 表现序列分析:83%的故障在触发网络分区后,只需要三个或更少的输入事件即可表现出来,且所有涉及多个事件的故障都需要事件按特定顺序发生。

• 时机约束:80%的故障是确定性的或具有已知的时机约束,这有助于简化测试。

• 解决分析:47%的故障需要重新设计系统机制,设计缺陷的解决时间比实现错误长2.5倍。

• 忽视网络分区故障:许多系统设计者未充分考虑网络分区的可能性,导致系统在设计阶段未考虑对这些故障的容错。

• 缺乏足够的测试工具:目前的测试工具不足以进行严格的网络分区故障测试,社区需要一个可集成到现有测试框架中的网络分区故障注入工具。

• 概述:NEAT是一个支持三种类型分区的网络分区测试框架,具有简单的API,可简化客户端操作的协调,并使用OpenFlow和iptables工具来注入网络分区故障。

• API:包括创建和愈合分区的方法,以及崩溃任何一组节点的API。

• 设计:由服务器节点、客户端节点和测试引擎组成,测试引擎提供客户端操作的全局顺序,并通过Java RMI调用所有客户端操作。

• 测试系统:使用NEAT测试了七个系统,发现了32个网络分区故障,其中30个是灾难性的,包括数据丢失、陈旧读取、数据不可用、双重锁定和锁损坏等。

• 故障分析:以往的研究分析了分布式系统中的各种故障,包括物理和虚拟机、网络设备、存储系统、软件错误和作业故障等,但本研究专注于网络分区触发的故障。

• 故障容忍技术:包括模型检查、系统故障注入和运行时验证等,本研究的发现可为这些技术提供改进方向。

• 研究意义:本研究是首个深入分析网络分区故障表现序列的研究,通过手动分析详细考察了事件序列,识别了常见漏洞,并发现了可改进测试的故障特征。

• 未来研究方向:需要进一步研究部分网络分区故障的容错技术,开发更准确的节点故障检测器,以及改进系统设计、工程、测试和容错能力。

• 总结:通过对25个广泛使用系统的136个故障报告的深入研究,提出了13个主要发现,可为系统设计者、开发者、测试人员和管理员提供参考,并强调了网络分区容错研究的必要性。

• 未来工作:扩展NEAT以通过工作负载和网络故障生成器自动化测试,并探索部分网络分区故障的容错技术。

来源:SuperOps

相关推荐