分布式系统模式目录
分布式系统对编程提出了特殊的挑战。它们通常要求我们拥有多个数据副本,这些副本需要保持同步。然而,我们不能依赖处理节点可靠地工作,网络延迟很容易导致不一致。尽管如此,许多组织依赖于一系列核心分布式软件来处理数据存储、消息传递、系统管理和计算能力。这些系统面临着共同的问题,并使用类似的解决方案来解决这些问题。
2020年,我开始将这些解决方案收集为模式,并在开发过程中将它们发布在这个网站上。2023年,这些模式被收录在《分布式系统模式》一书中。在本网站上,我现在对每种模式都有简短的总结,并提供指向oreilly.com上在线电子书出版物相关章节的深度链接(在本页上标记为)。
时钟绑定等待 
在读取和写入值之前等待覆盖集群节点之间的时间不确定性,以便可以在集群节点之间正确排序值。
一致性核心 
维护一个提供更强一致性的较小集群,以允许大型数据集群协调服务器活动,而无需实现基于仲裁的算法。
紧急领导者 
根据集群节点在集群中的年龄对它们进行排序,以允许节点选择领导者,而无需进行显式选举。
固定分区 
保持分区数量固定,以便在集群大小更改时保持数据到分区的映射不变。
追随者读取 
从追随者那里提供读取请求,以实现更高的吞吐量和更低的延迟。
代时钟 
一个单调递增的数字,指示服务器的代。
八卦传播 
使用随机选择的节点传递信息,以确保信息到达集群中的所有节点,而不会导致网络泛洪。
心跳 
通过定期向所有其他服务器发送消息来表明服务器可用。
高水位线 
预写日志中的一个索引,显示最后一次成功的复制。
混合时钟 
使用系统时间戳和逻辑时间戳的组合来表示日期和时间的版本,这些版本可以排序。
幂等接收器 
唯一标识来自客户端的请求,以便在客户端重试时可以忽略重复的请求。
键范围分区 
在排序的键范围内对数据进行分区,以有效地处理范围查询。
兰伯特时钟 
使用逻辑时间戳作为值的版本,以允许跨服务器对值进行排序。
领导者和追随者 
拥有一台服务器来协调一组服务器之间的复制。
租约 
对集群节点使用时间绑定租约来协调它们的活动。
低水位线 
预写日志中的一个索引,显示日志的哪一部分可以丢弃。
多数仲裁 
通过要求多数节点同意才能做出每个决定,来避免两组服务器做出独立的决定。
Paxos 
使用两个共识构建阶段来达成安全的共识,即使在节点断开连接的情况下也是如此。
复制日志 
通过使用复制到所有集群节点的预写日志来保持多个节点的状态同步。
请求批处理 
组合多个请求以优化网络利用率。
请求流水线 
通过在连接上发送多个请求而不必等待先前请求的响应来改善延迟。
请求等待列表 
跟踪需要在根据来自其他集群节点的响应满足响应条件后才能响应的客户端请求。
分段日志 
将日志拆分为多个较小的文件,而不是单个大型文件,以便于操作。
单套接字通道 
通过使用单个 TCP 连接来维护发送到服务器的请求的顺序。
单一更新队列 
使用单个线程异步处理请求,以保持顺序而不阻塞调用者。
状态监视 
在服务器上的特定值更改时通知客户端。
两阶段提交 
在一个原子操作中更新多个节点上的资源。
版本向量 
维护一个计数器列表,每个集群节点一个,以检测并发更新。
版本化值 
使用新版本存储对值的每次更新,以允许读取历史值。
预写日志 
通过将每个状态更改作为命令持久化到仅追加日志中,来提供持久性保证,而无需将存储数据结构刷新到磁盘。