Su的技术博客

  • 首页
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. Java
  3. 正文
                           

【京东零售】分布式事务的几种实现方式

2023-07-02 223点热度 0人点赞 0条评论

一、基础理论

PART1.1 CAP理论

 

一致性(Consistency) :在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误。‍‍

可用性(Availability):在集群中一部分节点故障,也能保证客户端访问系统并得到正确响应,允许一定时间内数据状态不一致。‍

分区容错性(Partition tolerance):分布式系统在遇到任何网络分区故障时,仍然能保证对外提供满足一致性和可用性的服务,除非整个网络环境都发生故障。‍

PART1.2‍ 本地事务四大特性(ACID)

 

事务应该是具备原子性、一致性、隔离性和持久性,简称 ACID。
原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。
一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,事务前后数据的完整性必须保持一致。‍
隔离性(Isolation),指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。
持久性(Durability),指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。

PART1.3 BASE理论‍‍‍‍‍

 

基本可用(Basically Available):分布式系统在出现故障时,保证核心可用,允许损失部分可用性。(响应时间上的损失、功能上的损失)。‍
软状态(Soft State):系统中的数据允许存在中间状态,中间状态不影响系统的整体可用性。(支付中、处理中等)。‍‍‍
最终一致性(Eventually Consistent):系统中的数据不可一直处于软状态,必须在有时间期限,在期限过后应当保证数据的一致性。(支付中变为支付成功)。
相比于本地事务的ADIC强一致性模型,BASE理论提出通过牺牲一定的强一致性来获得可用性。‍
不同业务单元和业务组件对数据一致性的要求不一样,因此分布式系统中BASE理论和ACID特性会结合使用。‍

PART1.4‍ 幂等性设计

 

幂等(Idempotent)是一个数学与计算机学中的概念。f(n) = 1^n , 无论n等于多少,f(n)永远值等于1。‍
在程序中,使用相同参数执行同一个方法,每一次执行结果都是相同的,即具有幂等性。‍

以订单状态处理为例的幂等性设计,不论执行多少次orderProcess()方法,都只会扣减一次库存,并且返回true。

 

二、分布式事务分类‍

PART2.1‍ 二段提交2PC|三段提交3PC

 

Two-Phase-Commit |Three-Phase-Commit
分布式事务的几种实现方式

 

三阶段提交引入两个机制

1、 引入超时机制。同时在协调者和参与者中都引入超时机制。

2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

主要解决的问题:

避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。

缺点:性能较差,会存在长时间的锁表。

 

PART2.2‍ 补偿事务-TCC|Saga

分布式事务的几种实现方式

 

TCC 与Saga其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。确认和补偿都有采用幂等性设计。

缺点:代码量大,可维护性差。

 

PART2.3‍ 消息事务

 

分布式事务的几种实现方式

消息一致性方案是通过消息中间件保证上、下游应用数据操作的一致性。基本思路是将本地操作和发送消息放在一个事务中,保证本地操作和消息发送要么两者都成功或者都失败。下游应用向消息系统订阅该消息,收到消息后执行相应操作。

消息方案从本质上讲是将分布式事务转换为两个本地事务,然后依靠下游业务的重试机制达到最终一致性。

代表产品:RocketMQ

 

三、分布式事务产品框架‍‍

PART3.1‍ 京东jdts

 

服务通过lb连到集群中任何一个节点均能保证业务正确执行,某一个节点异常时集群可正常提供服务,同时支持集群横向、纵向扩展。

 

PART3.2‍ Seata

 

一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

 

PART3.3‍‍ 全局事务服务GTS

 

用于实现分布式环境下,特别是微服务架构下的高性能事务一致性。可以与RDS、MySQL、PostgreSQL等数据源,Spring Cloud、Dubbo、HSF及其他RPC框架,MQ消息队列等中间件产品配合使用,轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及各种组合。
分布式事务的几种实现方式

 

 

本文仅供学习!所有权归属原作者。侵删!文章来源: 京东零售技术

更多文章:

  1. DDD系列第五讲:聊聊如何避免写流水账代码
  2. Spring事务无法生效的11个场景
  3. 京东平台研发朱志国:领域驱动设计(DDD)理论启示
  4. 记一次升级MySQL驱动包引发的事故
  5. 殷浩详解DDD系列 第二讲 - 应用架构
  6. 你所说的“事件驱动”是什么? What do you mean by “Event-Driven”?
  7. Go整洁架构实践
  8. 系统设计入门:成为高级软件工程师的指南
标签: 京东零售 分布式 Java 事务 ACID BASE CAP 分布式事务
最后更新:2023-07-02

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

文章目录
  • 一、基础理论
    • PART1.1 CAP理论
    • PART1.2‍ 本地事务四大特性(ACID)
    • PART1.3 BASE理论‍‍‍‍‍
    • PART1.4‍ 幂等性设计
  • 二、分布式事务分类‍
    • PART2.1‍ 二段提交2PC|三段提交3PC
    • PART2.2‍ 补偿事务-TCC|Saga
    • PART2.3‍ 消息事务
  • 三、分布式事务产品框架‍‍
    • PART3.1‍ 京东jdts
    • PART3.2‍ Seata
    • PART3.3‍‍ 全局事务服务GTS
最新 热点 推荐
最新 热点 推荐
单体分层应用架构剖析 MySQL事务死锁问题排查 浅谈DDD中的聚合 高并发场景下JVM调优实践之路 ChatGPT的探索与实践 生产环境的CMS垃圾回收,一定要这样配置参数
Log4j框架疯狂写日志,导致磁盘打满问题排查高并发场景下JVM调优实践之路3.编程语言的演化(译)4.架构风格 vs. 架构模式 vs. 设计模式(译)5.单体架构(译)6.分层架构(译)
浅析设计模式2 —— 策略模式 Redis的BigKey(大key)、HotKey(热key)又引发了线上事故 7. MVC及其变种(译) 6.分层架构(译) 系统设计入门:成为高级软件工程师的指南 【视频】NettyInAction作者:统治一切的框架Netty- One Framework to rule them all

AIGC (1) BASE (1) bigkey (1) CAP (1) codeium (2) Copilot (2) hotkey (1) inject (1) jar包 (1) mvc (1) OOP (1) UML (1) vivo (2) 事务隔离级别 (1) 人工智能 (2) 代码质量 (1) 低耦合 (1) 依赖倒置原则 (1) 六边形架构 (1) 分层架构 (3) 分布式事务 (1) 分页 (1) 单体架构 (2) 可复用性 (1) 可读性 (1) 合同 (1) 后端开发 (1) 命名 (1) 四色建模法 (1) 垃圾回收器 (1) 开源 (1) 性能调优 (4) 智能助手 (1) 架构模式 (1) 架构设计 (4) 架构风格 (1) 模块 (1) 死锁 (1) 物流 (1) 系统架构 (4) 缓存穿透 (1) 缓存雪崩 (1) 编程助手 (3) 编程技能 (1) 编程语言 (2) 聚合 (1) 软件工程师 (1) 软件架构 (2) 驱动升级 (1) 高内聚 (1)

COPYRIGHT © 2014-2023 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2