MDCC: Multi-Data Center Consistency 读后感

今天看了下MDCC,整体感觉是一篇务实的文章,其核心理念在于以最终一致的代价(1-round trip)实现了强一致的目标。

1. 基于Paxos协议:该协议本身以多数取胜的方式来做决定,最终只要活着的机器占总机器的大多数,就能做出正确的选择。Paxos的核心理念是,谁都可以提出建议,按照规则淘汰,取胜的(只有一个)广播自己的决定。

2. 每条记录都可以是一个单独的paxos实例,不过文中也说一般一段记录一个实例就够了。在我看来,在更高的逻辑层面,比如表或者用户层面一个实例就可以了,过多的实例增加了复杂性但是并未带来多少好处,而且master的不固定也会导致stale read的问题不好解决。

3. coordinator不做决策:很好的想法,状态记录在持久层,上层server总是靠存储层恢复自己的状态。不过我记得有一篇文章提过类似的做法,似乎是percolator?

4. 文中说他们根据条件来判断propose是否应该被accept,而不是其他产品只使用fix value,这点我觉得确实很自然,特别是对于事务系统,不过我总认为megastore那帮人会没想到?可能只是取舍不同。

5. 文中对2PC和3PC的总结一阵见血,2PC就是无法解决coordinator failover的可用性问题,3PC就是要求额外的roundtrip的问题。

6. 文中说master是remote就需要2round-trips我不太理解,我觉得只需要一次远程通信到master加上1round-trip就可以了。fast paxos 了解不清楚。不过我认为可以尽快以迁移的方式将master选在local,避免remote master的问题,就像spanner里面降到的策略。

7. 文中针对global constraints的方法值得参考,但是我认为不够泛化,各个应用应该可以根据各自的业务场景定义自己的实现方法。

8. Atomic durability解决之后,Atomic visibility没有解决,这点类似spanner的versioned isolation是可以解决的,level db里面有类似的版本的概念。

 

这篇文章算是总结了之前的一些成果,将其中ref的文章读一遍然后实现一个开源的系统也许是不错的做法。

posted on 2014-05-11 21:54  RaymondSQ  阅读(815)  评论(0编辑  收藏  举报