CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
请分析讨论,与 sequential consistency 相比,eventual consistency 的优势和价值,并通过例子进行说明。
顺序一致性要求任何一次读都能读到某个数据的最近一次写的数据,且系统的所有进程的顺序一致,而且是合理的。即不需要和全局时钟下的顺序一致,错的话一起错,对的话一起对。最终一致性由于放松了多进程同一时刻读取结果的一致,减少了多进程同步与加锁的开销,从而大大增加了系统的可扩展性。
DNS 服务是一个典型的最终一致性的例子,域名所有者修改域名并不会马上就使所有 ISP(网络业务提供商的域名缓存修改及访客的浏览重定向;但是随着时间的推移,ISP 的域名缓存和用户本地的缓存失效后都会更新到最新的的结果。在这里最终一致性使得事务(比如域名修改)发生的瞬间不需要立刻产生与接受大量的流量(用于保证原子性)以至于服务中断。
如何实现数据副本的因果一致性?给出主要思路。
可以使用向量时钟,基于向量时钟可以获得任意两个事件的顺序关系,结果要么是有因果关系(先后顺序),要么是没有因果关系(同时发生)。通过向量时钟,如果两个数据更新操作是同时发生的关系,那么说明出现了数据冲突。