分布式系统中,强一致性通常被认为和高可用、高吞吐不相容,为了实现系统的高可用、高吞吐必须要牺牲强一致性。比如在亚马逊的Dynamo提供最终一致性,但是这样其实给开发者带来很多问题[0]
写入的数据在后续的读操作中不能被读取到
写入的数据有可能在后续的读操作中获取到,但是读到后下一次又读不到
Dynamo不保证一定能够读到写入的数据,将复杂的冲突合并工作留到了客户端;由于Dynamo的冲突合并过于复杂,在后来的系统Amazon S3使用'Last-write wins'来解决冲突,但是仍然不能完全解决上面提到的问题。
Google的GFS在写成功时是一致的,写失败时是不一致的,因此GFS的Record Append提供的是至少成功写一次的语义,由客户端读的时候自己来解决一致性问题。
这样会带来一致性问题[1],比如: 数据在某个chunk副本中重复出现了多次,但是在其他副本中可能没有。在记录级别上,读到的记录顺序依赖于刚好读取到哪个chunk副本。
而开发者更加希望系统能够提供强一致的保证,由分布式系统提供强一致性的保证,这样可以提高开发效率。
Read full article from 分布式存储复制技术:链式复制 | 机会永远留给有准备的人
No comments:
Post a Comment