提到分布式系统,就一定绕不开“一致性”,这次我们说说:最终一致性。
最终一致性是现在大部分高可用的分布式系统的核心思路。
估计有人对最终一致性不太熟,先来个简单介绍:
最终一致性指的是系统中的所有分散在不同节点的数据,经过一定时间后,最终能够达到符合业务定义的一致的状态。
划重点:
-
是数据一致性,不是事务一致性(ACID 是事务一致性);
-
存在条件:多个节点/系统;
-
不一致可能是暂时的,最终要一致(鬼知道“最终”是多久)
好,正文开始。
莫看江面平如镜,要看水底万丈深
最终一致性,一言以蔽之,过程松,结果紧。不管中间过程如何,结果必须符合业务需求,满足数据一致性的要求。
虽然,在实现中,有各种花样百出的方案,但是本质的思想都是一样的。我们现在就来忽略那些乱花迷眼的过程,仔细探讨下最终一致性的本质。
何事居穷道不穷,乱时还与净时同
在我刚入行不久的时候,能力有限,菜鸟一个,只能做一些小的功能模块。我印象最深的就是订单模块。
用户下单,订单模块收到下单请求后,执行对应的订单业务逻辑。最终,会把订单插入到订单表,并返回下单结果给用户。用户结算后,订单模块就会去根据支付情况去更新订单状态。