一些散乱的关于Eventual Consistency的笔记

1.对于跨数据库的业务操作,如果追求强一致性,就要走2PC(two-phase commit) 协议。而这个协议在Availability方面可能表现不佳:

   a.只要一个库回滚,大家都得回滚

   b.导致多处的资源上锁,影响性能

2.按不同的语境,弱一致性有两种含义:

  a. 不要求所有子操作原子地执行。可以容忍有的操作成功,有的操作失败,比如用于估算的数据,可以允许零星的失败

  b. 不要求在甲方扣款后乙方在同一瞬间收到款,可以允许乙方隔一段时间后(最终)收到款(即最终一致性)

3.“最终一致性”一般可以通过消息队列来实现:完成一个子操作后,发出一个消息,这个消息将被异步地处理

  a. 即使一个系统挂了,也不会影响上游系统继续工作

  b. 如果系统处理一个消息失败,可能需要重复处理这个消息。 所以最好把消息消费设计成Idempotent

参考资料:

http://queue.acm.org/detail.cfm?id=1394128

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.