副本一致性思考的角度
A. 强一致性和弱一致性的本质区别是,当进程访问系统时是否允许副本之间存在不一致
B. 观察分布式系统一致性可以从这三个方面的组合来看:
多个线程还是一个线程,同一时刻还是不同时刻,同一副本还是不同副本。
组合的结果共有6种:
一个线程,同一时刻,访问同一副本, 无效的。
一个线程,同一时刻,访问不同部分, 无效
一个线程,不同时刻,访问同一副本, 单机模式
一个线程,不同时刻,访问不同副本, 单用户多终端模式
多个线程,同一时刻,访问同一副本, 并发访问
多个线程,同一时刻,访问不同副本, 要看线程数与副本数的比例,以及具体的访问模式,既可以是1对1,也可以是N对1
多个线程,不同时刻,访问同一副本, 队列,串行化
多个线程,不同时刻,访问不同副本, 也要具体分析
C. 单调读、单调写、读写一致性、写读一致性,这四类是否组成了最终一致性的全部?
我认为不是。这四种一致性,都基于同一个假设:
在副本应用其它节点更新这个过程中,用户不对同一一致性单元进行更新。
同步系统在用户再次访问同一一致性单元前,完成对他的更新,用户访问的是不同副本节点。
最终一致性的定义,没有约束,节点的一致状态同步要在用户下一次访问前完成。所以我认为,这四种
类型并不是最终一致性的全部。只要在用户不再进行更新后,节点最终能获得一致性,即是最终一致性。
同步的过程中,用户最终将看到节点的一致状态,没有特定的时间约束。
比如,使用Wiz在家编辑了文件,并同步到了云端。但来到学校后,因为网络中断,我看到将仍是旧版本的数据,
这就不符合读写一致性。
这个四种一致性,是一种参考,如果你开发的同步系统想提供某种一致性,就需要对用户的访问有所限制。
比如,在某个一致性单元完成同步前,不允许用户访问。