ddia-第九章-一致性与共识

Last updated: 2020-06-18 22:43:47

这一章好家伙 读了三个月。

阅读地址

在分布式中,重要的是只有一个领导者,且所有的节点都认同其领导。如果两个节点都认为自己是领导者,这种情况被称为脑裂(split brain),且经常导致数据丢失。正确实现共识有助于避免这种问题。

事务隔离主要是为了,避免由于同时执行事务而导致的竞争状态,而分布式一致性主要关于,面对延迟和故障时,如何协调副本间的状态。

一致性保证

最终一致性:如果你停止向数据库写入数据并等待一段不确定的时间,那么最终所有的读取请求都会返回相同的值。换句话说,不一致性是暂时的,最终会自行解决(假设网络中的任何故障最终都会被修复)。最终一致性也叫收敛(convergence)

分布式一致性模型和我们之前讨论的事务隔离级别的层次结构有一些相似之处。

事务隔离主要是为了,避免由于同时执行事务而导致的竞争状态

而分布式一致性主要关于,面对延迟和故障时,如何协调副本间的状态。

线性一致性

线性一致性(linearizability)的最终想法是让一个系统的数据库看上去只有一个副本,而且所有的操作都是原子性的。

如果读取(与写入同时发生时)可能返回旧值或新值,则称该寄存器为常规寄存器。

线性一致性与可序列化

可序列化(Serializability)是事务的隔离属性,每个事务可以读写多个对象(行,文档,记录)。它确保事务的行为,与它们按照某种顺序依次执行的结果相同(每个事务在下一个事务开始之前运行完成)。这种执行顺序可以与事务实际执行的顺序不同。

线性一致性(Linearizability)是读取和写入寄存器(单个对象)的新鲜度保证。它不会将操作组合为事务,因此它也不会阻止写偏差等问题。

依赖线性一致性的场景:

1.锁定和领导选举。一个使用单主复制的系统,需要确保领导真的只有一个,而不是几个(脑裂)。一种选择领导者的方法是使用锁:每个节点在启动时尝试获取锁,成功者成为领导者。不管这个锁是如何实现的,它必须是线性一致的:所有节点必须就哪个节点拥有锁达成一致,否则就没用了。

2.约束和唯一性保证:用户名或电子邮件地址必须唯一标识一个用户;账户余额永远不会为负数;不会出售比仓库里的库存更多的物品;两个人不会都预定了航班或剧院里同一时间的同一个位置。

281