分布式一致性-前言
前言
什么是分布式一致性?
对一个副本更新的同时,确保其他副本也能更新,否则不同副本之间的数据将不再一致。
分布式一致性分类?
分布式系统达到一致性后是什么样的状态?
如果失去一致性约束,分布式系统是否可以依赖?
一味地追求一致性,对系统的整体架构和性能又有多大影响?
问题提出
不同产品对于一致性的需求不同:
火车票系统:窗口购票,严格保证一致性(不能买到票不能进站)
银行系统:一致性有一定的延迟(可能转账需要几天),严格保证一致性
秒杀:页面显示库存量可能是错误的(已过期),但是仍可下单,但是在付款时,保证一致性。
解决分布式一致性方案:
阻塞写入动作,直到所有副本更新完毕。
带来问题:写性能下降
一致性与系统性能的权衡:一致性级别
1.强一致性:
符合用户直觉,写入什么读出的就是什么,体验好,性能影响大。
2.弱一致性:
写入成功后,不承诺多久能达到一致,尽可能保证某个时间级别(如秒级)后,数据达到一致状态。在细分为:
会话一致性:写入的值在同一个客户端回话中可以读到,其他会话不能保证
用户一致性:写入的值对同一用户可以读到,其他用户不能保证。
3.最终一致性:
弱一致性的一个特例,系统保证一定时间内,数据达到一致状态。单独提出来,是因为它是弱一致性中非常重要的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型。