- 负载的挑战:随着业务的快速增长,数据库中的数据量或负载也会达到单一实例的上线,此时,我们:
文章插图
图片
水平拆分:数据量超过单表最大容量时,将数据分拆到不同的数据库,比如 Order-1 实例、Order-2 实例;
文章插图
图片
垂直+水平拆分:先进行垂直拆分,在进行水平拆分;
文章插图
图片
- 微服务的挑战:微服务已经成为系统的事实架构,特别是 Spring Boot 和 Spring Cloud 的流行:
微服务间通过服务发现、负载均衡等方式,将服务之间的关系解耦,从而使得每个服务都具备独立的自治性;
文章插图
图片
不管触发哪一种条件,都会产生跨数据库事务,从而增加系统设计的难度 。
2. 常见一致性保障机制针对该问题前人已经提出来多种应对方案 , 特别是关系型数据库 。
2.1. MySQL事务一致性熟悉 MySQL 实现的伙伴知道 , MySQL 是通过 Redo log 和 Undo log 来实现事务一致性的:
- Redo Log:Redo Log 记录了事务对数据库所作的修改,包括插入、更新、删除等操作,它在事务提交前就被写入磁盘 。如果出现故障导致系统崩溃,MySQL 会从 Redo Log 中恢复数据;
- Undo Log:Undo Log 记录了事务对数据库所作的修改的「前置操作」,并且在事务回滚时用来撤销事务所做的修改 。当事务执行更新时,MySQL 会先将修改前的数据存储到 Undo Log 中,当事务需要回滚时,MySQL 会根据 Undo Log 中的记录将数据还原为修改前的状态 。
文章插图
图片
从图中可知:
- 每一个 DML 语句都会为其生成对应的 Redo log 和 Undo log 。
Undo log 记录逆向恢复;
- 事务提交应用全部 Redolog 以持久化正向修改;
- 事务回滚应用全部 Undolog 以逆向恢复;
- 向前补偿:redo log 记录了事务执行的过程,以及事务提交前的数据修改 , 可以通过重做日志来恢复数据,实现向前补偿;
- 向后补偿:undo log 记录了事务执行过程中对数据的修改,可以用于回滚事务 , 实现向后补偿;
除了两种补偿机制外,还涉及一个重要的组件“补偿管理器”,用于对补偿机制进行统一协调 。2.2. 2PC 和 XA2PC(Two-Phase Commit)和XA是分布式事务中常用的协议和接口:
- 2PC是分布式事务协议 , 用于在分布式系统中协调多个参与者的事务提交或回滚 。它包括两个阶段:准备阶段和提交阶段,参与者在准备阶段告知协调者它们是否可以正常提交,如果都能正常提交 , 则在提交阶段所有参与者都提交事务 。如果有一个参与者无法正常提交,则所有参与者都需要回滚;
- XA是一组应用程序接口(API),它使应用程序能够参与分布式事务 , 并与事务管理器协同工作,以保证事务的一致性 。XA接口包括三个接口:XA Transactions、XA Resource、XA Resource Manager,用于实现分布式事务的协调和管理 。
推荐阅读
- 当44岁的胡杏儿和张雨绮娜然同框,才彻底明白,港女的保养真绝
- 疯马秀“审判”后续:张嘉倪,杨颖或遭软封杀,Lisa彻底凉凉!
- 首位90后女主播登《新闻联播》,看完她的履历后,我彻底服了!
- 谢贤公开与张柏芝关系,遮羞布彻底被揭,谢霆锋得知后连忙澄清
- 安卓怎么彻底删除微信聊天记录 怎么彻底删除微信聊天记录
- 终于处罚了!Lisa被封号,杨颖张嘉倪被禁言,星光之路彻底是凉凉了
- 一个“假向太”,彻底揭开了向家的豪门真相,难怪郭碧婷会退圈!
- Lisa风波迎来大结局,3女星彻底沦为弃子,LV3公子成唯一聪明人
- 家里有老鼠怎么能彻底消灭 老鼠对粘鼠板有记忆吗
- baby彻底凉凉?被曝向黄晓明求救,准备跑路出国抛售5亿豪宅?