做一个官方网站多少钱,wordpress创建自定义页面模板,电子商务就业方向及就业前景,全国十大装修公司排名全国装修公司哪家好一、整体背景
最近在分布式事务领域这块的了解比较少#xff0c;对自己来说是一个业务盲点#xff0c;所以想抽空学习以及整理下关于分布式事务的相关知识。
1、分布式事务的发展
总所周知#xff0c;我们为什么要考虑分布式事务#xff0c;从一开始发展来说#xff0c…一、整体背景
最近在分布式事务领域这块的了解比较少对自己来说是一个业务盲点所以想抽空学习以及整理下关于分布式事务的相关知识。
1、分布式事务的发展
总所周知我们为什么要考虑分布式事务从一开始发展来说项目都是单体项目举最简单基本的商城系统来说单体架构图如下所示 一个单体系统包含订单、商品、用户模块然后通过访问数据库通过事务控制我们就很容易理解如果用上Spring框架我们只需要Transactional注解进行处理就能实现本地事务。
但随着业务量的增大以及项目的拆分单体项目已经不再能满足日常的业务量了可能项目架构就会变成如下图所示 这种情况下我们常规的本地事务就没法解决跨服务的事务一致性问题所以于此才引入分布式事务解决方案说白了分布式事务就是为了解决我们跨应用数据库事务的问题而提出来的
二、常用的分布式事务解决方案对比
1、分布式协议
分布式协议按照我的理解可以理解为一种约定或者规范市面上的数据库厂商会遵循这种约定进行实现为实现分布式事务奠定基础其中协议包括如下
2PCTwo-Phase Commit, 2PC3PCThree-Phase Commit, 3PCTCC是一种补偿式分布式事务解决方案通过Try-Confirm-Cancel三个阶段确保事务一致性(应用级别需手动实现)
2、分布式具体解决方案 阿里中间件Seata提供的解决方案 XA模式强一致性分阶段事务模式牺牲了一定的可用性无业务侵入。TCC模式最终一致的分阶段事务模式有业务侵入。AT模式最终一致的分阶段事务模式无业务侵入是Seata的默认模式。SAGA模式长事务模式有业务侵入。
三、分布式事务相关理论定理
1、CAP定理
CAP定理是分布式系统设计中的一个基本理论它指出在一个分布式系统中一致性Consistency、可用性Availability和分区容错性Partition tolerance这三个关键属性最多只能同时满足两个而无法三者兼得。这个定理对于理解和设计分布式系统具有重要指导意义。
CAP定理的基本概念
一致性Consistency确保所有副本在更新操作后保持数据的一致状态。可用性Availability系统能够响应任何请求无论成功还是失败都会返回响应。分区容错性Partition tolerance系统能够在网络分区的情况下继续运行即部分节点之间的通信中断时系统仍能提供服务。
为什么不能同时满足
在分布式系统中由于网络延迟、故障等原因很难保证所有节点在所有时间都保持数据一致。因此CAP定理指出一个分布式系统最多只能同时满足两个属性而必须牺牲第三个属性。这种权衡取决于系统的具体需求和应用场景。
CAP定理对分布式系统设计的影响
CA一致性和可用性适用于需要强一致性的场景如金融交易系统。CP一致性和分区容错性适用于可以容忍一定延迟的系统如区块链。AP可用性和分区容错性适用于对数据一致性要求不高的场景如社交媒体应用。
实例分析
NoSQL数据库许多NoSQL数据库如Cassandra和MongoDB采用AP策略以提供高可用性和分区容错性同时牺牲了一定程度的一致性。这种设计选择适合于需要快速响应和数据可扩展性的应用场景。
CAP定理是分布式系统设计和开发中的基础理论它帮助开发人员根据系统的具体需求和约束做出合理的权衡和选择。在实际应用中理解CAP定理及其对系统设计的影响是至关重要的
2、BASE理论
BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果理论的核心思想就是我们无法做到强一致但每个应用都可以根据自身的业务特点采用适当的方式来使系统达到最终一致性。基本可用(Basically Available) 基本可用是指分布式系统在出现故障的时候允许损失部分可用性即保证核心可用。电商大促时为了应对访问量激增部分用户可能会被引导到降级页面服务层也可能只提供降级服务。这就是损失部分可用性的体现。软状态(Soft State) 软状态是指允许系统存在中间状态而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本允许不同节点间副本同步的延时就是软状态的体现。MySQL Replication 的异步复制也是一种体现。最终一致性(Eventual Consistency) 最终一致性是指系统中的所有数据副本经过一定时间后最终能够达到一致的状态。弱一致性和强一致性相反最终一致性是弱一致性的一种特殊情况。
五、总结
整体来说分布式事务这块对于自己来说还是没那么熟悉的领域在工作中也算接触了大型企业系统的研发但是也没有使用业界主流的分布式事务进行处理更多的是靠消息的回调定时任务的补偿达到最终一致性来解决问题并没有做到强一致性。后续从Seata这个现有中间件下手学习希望借此慢慢学习以及慢慢深入这块填充自己的知识领域。