线性一致性与可串行化
线性一致性
线性一致性(线性化)为分布式系统提供了数据单一副本的假象,也就是对外表现看起来就像只有1个数据副本,并且所有操作都是原子发生的。
可串行化
可串行化为事务的隔离性保证,特别是涉及多个对象读写的事务,可串行化保证了并行事务的执行和串行执行事务的结果一致。
区别
线性一致性是针对单一对象的读写而言,可串行化是涉及多个对象读写的事务。
线性化与串行化不同,它不构成事务,因此不能完全保证并发写的安全性。
数据库可以同时提供串行化和线性化,如两阶段锁便是可以同时提供串行化与线性化,而序列化的快照隔离不是线性化的。
从理论上讲,隔离是假装没有并发。
线性一致性的使用场景
- Leader 选举
- 分布式锁
- 实现唯一约束
- 时序依赖
全序广播
全序广播要求每个消息被传递一次,并且在所有节点上的顺序一致。如果每一轮消息传递都采用共识算法,即能保证每个节点每一轮收到的消息一致,回顾共识算法的四个性质:
- Uniform agreement
每个节点最终采纳的提议是一致的,最终所有节点上消息的顺序保证是一致的。
- Integrity
每个节点只采纳提议一次,不会重复采纳,保证了消息不会重复处理。
- Validity
被采纳的值必须是由某个节点提议的,保证消息是真实有效的。
- Termination
每个节点最终都会采纳提议,保证消息传递的可靠性。
可以推导出,全序广播等价于多轮共识算法,基于全序广播可以实现线性一致性,因此基于多轮共识算法可以实现线性一致性。
其他
fencing 假设每次锁服务在授予锁或租约时,还会同时返回一个fencing令牌, 该令牌(数 字)每授授予一次就会递增(例如,由锁服务增加) 。然后,要求客户端每次向存储 系统发送写请求时,都必须包 含 所持有的 fencing令牌。fencing (栅栏,隔离之意)
写倾斜 可以将写倾斜视为一种更广义的更新丢失问题。即如果两个事务读取 相 同的 一 组对 象,然后更新其中 一部分:不同的事务可能更新不同的对象,则可能发生写倾斜。