读书人

一些错乱的关于Eventual Consistency的

发布时间: 2012-11-17 11:14:16 作者: rapoo

一些散乱的关于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

读书人网 >软件架构设计

热点推荐