这是一份关于分布式系统可靠性相关概念的词汇表,主要内容如下:
引言:为行业从业者编写,旨在整合分布式系统测试相关信息,是首个这样的资源,旨在鼓励深入了解重要概念,提供直观解释和指向更正式定义的指针,包含组织架构和联系方式等。
- 初步概念:用于定义现象和一致性模型,包括依赖、确定错误、不确定错误、对象、操作、谓词、进程等。
- 一致性模型:定义系统允许的行为,如因果一致性、最终一致性等,每种模型都规定了一些现象是被禁止的。
- 可用性模型:不同的系统可用方式,包括总可用性、粘性可用性、多数可用性等,不同模型对应可实现的一致性模型。
- 现象:系统中被认为是不良的行为,如各种读/写现象、内部一致性异常等。
- 故障:分布式系统中可能出现的问题,如遗忘、比特腐烂、拜占庭故障等。
- 测试技术:并发测试、约束编程、循环检测等多种测试技术,用于验证系统的安全性和正确性。
- 进一步阅读:提供了一些分布式系统和测试相关的阅读列表。
初步概念:
- 依赖:一致性模型中的操作关系,如进程依赖、读写依赖等。
- 确定错误:明确未发生的操作返回的错误。
- 不确定错误:操作可能发生也可能未发生或稍后发生返回的错误,区分两者是分布式系统设计和测试的关键挑战。
- 对象:数据库中的不同项,每个对象有唯一标识符和版本。
- 操作:系统的行为,具体取决于系统,如队列系统的入队和出队操作等。
- 谓词:用于识别对象集合的方式。
- 进程:参与分布式系统的逻辑单线程状态机,可将单个数据库客户端视为进程。
- 其他相关概念:如进程依赖、实时依赖、读写依赖、会话依赖、版本、版本顺序等。
一致性模型:
- 一致性模型定义:一组允许的历史记录,约束操作的允许性和顺序。
- 各种具体的一致性模型:如因果一致性、最终一致性、线性izability等,每种模型都有其特点和禁止的现象。
可用性模型:
- 总可用性:非故障节点可执行任何操作,许多系统声称提供此可用性。
- 粘性可用性:非故障客户端连接到非故障服务器时的可用性。
- 多数可用性:多数非故障节点可通信时系统可用。
现象:
- 各种具体的现象:如读偏斜、写偏斜、断裂读等,每种现象都有其定义和禁止的一致性模型。
故障:
- 多种故障类型:如遗忘、比特腐烂、拜占庭故障等,每种故障都有其特点和影响。
测试技术:
- 并发测试:分布式系统本质上是并发的,测试也应如此。
- 约束编程:将操作历史编码为约束问题进行求解。
- 循环检测:通过检测依赖图中的循环来验证一致性模型。
- 确定性模拟测试:使模拟层确定性,便于重现错误。
- 示例-based 测试:写下具体输入和期望结果进行测试。
- 故障注入:在测试中故意注入故障以检查系统的不变性。
- fuzz 测试:提交随机输入并检查属性是否成立。
- 引导搜索:通过收集系统反馈选择“有趣”的输入。
- 变形测试:通过变换输入并检查输出关系进行测试。
- oracle:为测试提供信息,帮助确定测试是否正确。
- property-based 测试:生成随机输入并验证属性。
- 收缩:将大型失败输入缩小为更易理解的输入。
- 模拟测试:模拟分布式系统的部分或全部进行测试。
- 进一步阅读:提供了多个关于分布式系统和测试的阅读列表和资源。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。