14、校验和(checksum)
在分布式系统中,在组件之间移动数据时,从节点获取的数据可能会损坏。
计算校验和并将其与数据一起存储。
要计算校验和,请使用MD5、SHA-1、SHA-256或SHA-512等加密哈希函数。哈希函数获取输入数据并生成固定长度的字符串(包含字母和数字);此字符串称为校验和。
当系统存储某些数据时,它会计算数据的校验和,并将校验和与数据一起存储。当客户端检索数据时,它会验证从服务器接收的数据是否与存储的校验和匹配。如果没有,则客户端可以选择从另一个副本检索该数据。
HDFS和Chubby将每个文件的校验和与数据一起存储。
15、CAP定理
CAP定理指出,分布式系统不可能同时提供以下所有三个理想属性:
一致性(C)、可用性(A)和分区容差(P)。
根据CAP定理,任何分布式系统都需要从三个属性中选择两个。这三个选项是CA、CP和AP。
Dynamo:在CAP定理术语中,Dynamo属于AP系统的类别,旨在牺牲强一致性为代价实现高可用性。
BigTable:就CAP定理而言,BigTable是一个CP系统,即它具有严格一致的读取和写入。
16、PACELEC定理
PACELC定理指出,在复制数据的系统中:
- 如果有一个分区('P'),分布式系统可以在可用性和一致性(即'A'和'C')之间进行权衡;
- 否则('E'),当系统在没有分区的情况下正常运行时,系统可以在延迟('L')和一致性('C')之间进行权衡。
定理(PAC)的第一部分与CAP定理相同,ELC是扩展。整个论点假设我们通过复制来保持高可用性。因此,当失败时,CAP定理占上风。但如果没有,我们仍然必须考虑复制系统的一致性和延迟之间的权衡。
17、提示交接(Hinted Handoff)
如果节点关闭,系统会保留它们错过的所有请求的提示(或注释)。故障节点恢复后,将根据存储的提示将请求转发给它们。
当节点关闭时,领导者会在本地磁盘上的文本文件中写入提示。此提示包含数据及其所属的节点信息。当领导者意识到它为其保留提示的节点已恢复时,它会将每个提示的写入请求转发到该节点。
18、读取时修复
在分布式系统中,数据跨多个节点复制,某些节点最终可能会拥有过时的数据。
在读取操作期间修复过时的数据,因为此时,我们可以从多个节点读取数据以进行比较并找到具有过时数据的节点。此机制称为读取修复。一旦已知具有旧数据的节点,读取修复操作就会将较新版本的数据推送到具有较旧版本的节点。
Cassandra和Dynamo使用“读取修复”将最新版本的数据推送到具有旧版本的节点。
19、默克尔树(Merkle Trees)
“读取修复”可在处理读取请求时消除冲突。但是,如果某个副本明显落后于其他副本,则可能需要很长时间才能解决冲突。
副本可以包含大量数据。单纯地拆分整个范围来计算校验和进行比较并不是很可行;有太多的数据需要传输。相反,我们可以使用Merkle树来比较一个范围的副本。
Merkle树是哈希的二叉树,其中每个内部节点是其两个子节点的哈希,每个叶节点是原始数据一部分的哈希。
比较Merkle树在概念上很简单:
- 比较两个树的根哈希。
- 如果它们相等,请停止。
- 在左边和右边的孩子上递归检查。
为了实现反熵和在后台解决冲突,Dynamo使用Merkle树。