解决一致性问题的模式和思路
ACID 理论
关系型数据库天生用于解决具有复杂业务场景的问题,满足ACID的特性。
- A(Atomicity):原子性
- C(Consistency):一致性
- I(Isolation):隔离性
- D(Durability):持久性
具有ACID特性的数据库支持强一致性,通常使用MVCC实现的。
目前互联网项目都是面对大规模,高并发的业务场景,必须要使用拆分的理念对高并发的压力分而治之,这样通过关系型数据库就解决不了一致性的问题。
CAP 理论
针对分布式系统的CAP理论。
- C(Consistency):一致性。所有节点在同一时刻读取的数据都是最新的。
- A(Availability):可用性。服务能在有限的时间内处理完成并给出相应。
- P(Partition tolerance):分区容错性。尽管网络有部分消息丢失,系统仍需要能够工作。
CAP理论表明,任何分布式系统只能同时满足以上2点。分布式的服务化系统都需要满足分区容错性,所以我们更多的实在C和A之间做权衡。
BASE 理论
因为大多数时候我们只需要系统达到最终一致性即可,并不需要强一致性。所以BASE理论满足CAP理论,牺牲了强一致性。
- BA(Basically Available):基本可用
- S(Soft State):软状态
- E(Eventurlly Consistent):最终一致性
系统在处理某个业务的时候,允许系统中短暂的出现不一致的情况发生,并且在系统操作的过程中都会记录每个临时状态,当系统出现问题的时候,可以通过这个临时状态来选择回退操作或者重试操作来达到最终一致性。记录状态的方式可以是通过持久化来实现,但是考虑到大规模,高并发的业务场景下性能不高的问题,也可以使用类似数据库BinLog的方式记录。
参考资料
[1] 李艳鹏 杨彪. 分布式服务架构 [M].电子工业出版社,2017.8