分布式事务概念、理论、及(2PC、3PC)

本文介绍了分布式事务的概念,包括本地事务与分布式事务的区别,并详细解析了CAP理论,探讨了分布式系统中的一致性、可用性和分区容忍性。接着,文章深入分析了强一致性下的2PC和3PC协议,包括它们的工作原理、异常情况及解决方案。内容涵盖事务的原子性、一致性、隔离性和持久性,并讨论了分布式事务在实际应用中的选择和挑战。
摘要由CSDN通过智能技术生成

一. 简介

1. 什么是本地事务?

 基于关系型数据库的事务,叫做本地事务,也叫做数据库事务。 本地事务通常是应用和数据库在一个服务器上,利用数据库本身的事务特性,从而实现本地事务。

数据库事务的特性:ACID。

 (1). 原子性(Atomicity):指一个事务内的所有操作要么都执行,要么都不执行。

 (2). 一致性(Consistency):指数据是满足完整性约束的,也就是不会存在中间状态的数据。

 (3). 隔离性(Isolation),指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。

 (4). 持久性(Durability),指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。

PS: Redis中的事务不支持回滚,这是一个特殊情况。 下面是官网解释,详见 https://www.cnblogs.com/yaopengfei/p/13922295.html

2. 什么是分布式事务?

(1). 含义:在分布式系统中,不同服务之间需要通过网络协作来完成的事务,叫做分布式事务。比如下单业务:先创建订单→扣减库存。

 A. 如果是本地事务:借助数据库就能完成,比如请求接口POrder,里面的业务如下:

begin transaction;
    1. 访问订单表,创建订单
    2. 访问库存表:扣减库存 (以上两个表是同一个DB)
commit transation;

 B. 如果是分布式事务:存在订单微服务和库存微服务,我们请求订单微服务中POrder接口,该接口除了需要调用自身DB创建订单外,还需要调用库存微服务的接口,这就存在网络通信,传统的数据库事务无法满足。

begin transaction;
    1. 订单微服务,创建订单 (本地DB)
    2. 通过网络调用库存微服务中接口,进行扣减库存
commit transation;

(2). 产生分布式事务的几种情况

 A. 跨进程通信(典型微服务架构,多服务对应多DB)

 比如,典型的下单流程: 客户端请求订单微服务中的接口,该接口中除了要向订单DB中插入数据,还要调用库存微服务中的接口,这就形成分布式事务。

 B. 单服务对应多DB

 比如,单应用由于数据较多,需要数据库分库现象,比如用户管理系统中存在多个DB,用户DB、订单DB、材料DB等等,每个DB都对应一个不同的数据库连接,也是分布式事务

 C. 多服务对应单DB

比如,有些情况下,虽然服务分多个了,但还是1个DB,订单微服务和库存微服务都访问同一个数据库,下单的时候,同样道理,存在网络通信,跨进程,不同的微服务对应不同的DB连接,也是分布式事务。

C/C++Linux服务器开发高级架构师/C++后台开发架构师​免费学习地址

【文章福利】另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以自行添加:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值