美文网首页
一致性--线性

一致性--线性

作者: MontyOak | 来源:发表于2018-07-07 21:11 被阅读32次

    所谓线性化(linearizability),是指分布式系统对外表现就像只有一个数据片一样,数据遵循因果先后关系,读取数据时总能够读到最新的数据。


    没有实现线性化

    在一个线性化系统中(如下图示),读写关系有以下几种:

    • 读请求在写请求开始之前就已经完成,读到的值为0;
    • 读请求与写请求在操作时间上存在重合,不确定读到0还是1;
    • 读请求在写请求之后发生,读到新值1;


      线性化系统图示

    上面还不是线性化约束的完整描述,在读写请求重合的区间内,可能会出现先读到1后读到0的情况,这明显与线性化保证的描述不符合。为了加强描述,又引入了下面的约束:


    读请求顺序保证

    更进一步,引入cas(compare-and-set)操作,线性化保证严格变成:


    线性化

    线性化(Linearizability)经常与序列化(Serializability)相混淆。序列化是事务隔离级别的一种,对外展现数据结果与事务串行执行结果一致。线性化是对单一数据的读写结果保证。
    在下面场景中,线性化将会是非常重要的特性:

    • 分布式锁和选主过程,ZooKeeper,etcd等一般通过共识算法(paxos或者raft)来实现分布式锁和选主。
    • 约束和唯一性保证 比如用户名或者用户邮箱的唯一保证,不允许多个请求同时创建同一用户邮箱。

    在线性化的实现上,需要从以下几个场景来讨论:

    • 在单主架构中,可以通过主节点处理写请求和阻塞同步数据到从节点来保证线性化;
    • 一致性算法 这也是zookeeper和etcd等采用的方案;
    • 无主架构中暂时没有有效的线性化保证措施;

    相关文章

      网友评论

          本文标题:一致性--线性

          本文链接:https://www.haomeiwen.com/subject/avuguftx.html