当前位置: 首页 > news >正文

【Java高阶面经:数据库篇】18、分布式事务:如何在分库分表中实现高性能与一致性?

在这里插入图片描述

一、分布式事务核心挑战:分库分表下的一致性困境

在分布式系统架构中,分库分表通过将数据分散存储提升了扩展性和性能,但却打破了传统单库事务的边界,使得分布式事务成为保障数据一致性的核心难题。其挑战主要体现在以下三方面:

1.1 ACID特性的分布式撕裂

  • 原子性(Atomicity):跨多个分片的操作需保证全部成功或回滚,如电商下单需同时操作订单库、库存库和支付库,任一环节失败需回滚所有已执行操作。
  • 一致性(Consistency):分库分表后,全局数据一致性需通过事务协调实现,例如用户余额扣减与订单状态更新需保持一致。
  • 隔离性(Isolation):高并发场景下,跨分片事务需避免脏读、幻读,如库存扣减时需防止其他事务看到中间状态。
  • 持久性(Durability):事务提交后数据需持久化,分布式环境下需确保多节点日志落盘成功。

1.2 分库分表的架构特殊性

  • 数据分散性:事务操作可能涉及多个分片(如按用户ID分库的订单表与按SKU分库的库存表),需协调跨节点事务。
  • 分片键影响:若事务涉及不同分片键(如用户ID和SKU ID),无法通过分片键路由到单一节点,强制跨库操作。
  • 热点问题:高频事务可能集中在少数分片(如热销商品的库存分片),导致锁竞争加剧。

1.3 CAP定理的现实抉择

  • 强一致性(CP):牺牲可用性换取一致性,适用于金融交易等场景(如银行转账)。
  • 最终一致性(AP):牺牲强一致性换取高可用性,适用于电商下单、社交动态等场景。
  • 分库分表场景下的权衡:多数业务选择最终一致性,通过异步补偿机制实现最终一致,同时保障性能。

二、分布式事务解决方案:从强一致到最终一致

2.1 两阶段提交(2PC):强一致性的经典方案

2.1.1 核心流程
  1. 准备阶段(PreCommit)
    • 协调者(Coordinator)向所有参与者(如订单库、库存库)发送事务请求,参与者执行事务操作(如扣减库存)但不提交,记录undo/redo日志,并返回“准备成功”或“失败”。
    请求准备
    请求准备
    回复成功
    回复失败
    协调者
http://www.xdnf.cn/news/584155.html

相关文章:

  • 零基础设计模式——第二部分:创建型模式 - 原型模式
  • HCIP(广域网)
  • Normalized Blind Deconvolution论文阅读
  • UART串口两种连接方式
  • 笔记本6GB本地可跑的图生视频项目(FramePack)
  • EtpBot:安卓自动化脚本开发神器
  • 了解Android studio 初学者零基础推荐(2)
  • 正则表达式篇
  • element ui 表格实现单选
  • v2.0 技术篇目录-研究生如何选择编程技术
  • iOS工厂模式
  • uniapp-商城-65-shop(1-品牌信息显示,将数据库信息同步到vuex的state)
  • 如何构建一个简单的AI Agent(极简指南)
  • 深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​
  • 使用 A2A Python SDK 实现 CurrencyAgent
  • 开闭原则 (Open/Closed Principle, OCP)
  • leetcode hot100刷题日记——10.螺旋矩阵
  • day33 python深度学习入门
  • jmeter登录接口生成一批token并写入csv文件
  • 浪潮Inspur服务器产品线概述
  • 【paddle】常见的数学运算
  • Ubuntu 22.04上升级npm版本
  • 升级node@22后运行npm install报错 distutils not found
  • canvas(三)-动画3d
  • iisARR负均衡
  • 【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号
  • 在react项目中使用andt日期组件,选择周和季度,直接获取所对应的日期区间
  • C++ HTTP框架推荐
  • 人脸识别备案开启安全防护模式!紧跟《办法》!
  • uni-app学习笔记九-vue3 v-for指令