文档章节

分布式系列七: 分布式事务理论

o
 osc_w9s1w4o0
发布于 2019/04/03 11:59
字数 1005
阅读 7
收藏 0

精选30+云产品,助力企业轻松上云!>>>

分布式系列七: 分布式事务理论

事务是将一组操作作为一个整体执行, 这组操作要么成功,要么失败, 不存在部分成功的情况, 分布式事务是为了解决在分布式环境下各节点之间的数据一致性问题.

数据库本地事务

事务四大特性:

  • 原子性(Atomicity): 事务的一组操作要么全部执行成功, 要么其中有失败后回退到初始状态. 不存在部分执行部分失败的状态. 回退是通过事务的回滚机制(Rollback)完成.

  • 一致性(Consistency): 事务执行前后的数据必须一致. 举例来说就是, 下单过程中库存和扣款二者必须对应.

  • 隔离性(Isolation): 事务之间的执行是隔离的, 不能相互影响. 操作相同的数据时, 每个事务都有各自的完整数据空间. 不能读取到事务执行中间状态的数据.

  • 持久性(Durability): 事务执行结束后, 它对数据库的更新将是永久的. 不管系统崩溃断电,数据的状态不会发生变化.

MySql的InnDB引擎支持事务, MySql的事务是通过Redo,Undo日志以及锁机制来完成. 分开来说, 事务的隔离性通过锁来实现, 持久性通过Redo来实现, 原子性和一致性通过Undo来实现.

分布式事务产生原因

在分布式环境下, 数据库(Resource)和应用(Service)均可能被拆分为多个节点, 而操作可能需要在多个节点间一致地完成.

分布式事务相关的理论

  • CAP理论: Consistency, Availability, Partition tolerance; 当错误发生时, 三者不能同时满足, 而分区容错是必须满足的条件, 于是只能在CP和AP之间选择. 这也是现在分布式框架的特性, 比如Eureka满足AP, zookeeper满足CP.

  • BASE理论: Basically Available: 出现故障时, 允许损失部分功能, 保证核心功能可用; Soft States: 允许出现中间状态, 这个状态不影响系统可用性; Eventually consistent: 最终经过一小段时间后, 所有节点的数据达到一致. BASE放弃了事务执行中间的强一致性, 允许中间一小段时间出现中间状态, 但最终需要达成一致.

柔性事务(遵循BASE): 最终一致性, TCC事务, 补偿机制.

X/Open DTP 模型

三个角色:

  • AP: application
  • RM: Resource Manager 一般是数据库, 需要始兴县XA定义的接口.
  • TM: Transaction Manager

2pc & 3pc

  • 2pc: two phase commit precommit -> docommit

缺点: (1)单点故障, 事务管理器宕机可能导致阻塞, 二阶段事务无法提交; 资源管理器宕机,导致没有接收到commit,导致阻塞(2)同步阻塞;(3)数据不一致

  • 3pc: three phase commit cancommit -> precommit -> docommit

解决了2pc中的阻塞问题, 因为引入了超时机制.

XA 和 JTA

XA是X/Open定义的规范, JTA是java事务规范的实现.

互联网分布式事务解决方案

互联网对数据的绝对一致性要求没有传统行业高

  1. 避免分布式事务;
  2. 最终一致性解决方案;(基于BASE), 使用MQ解决: 消息丢失使用持久化解决; 重复消费问题(幂等性)问题使用状态锁或者幂等校验解决). 模式: 1. 查询模式, 提供一个接口返回是否成功的状态; 衰减查询 2. 补偿模式: (1)自动恢复,就是自动重试或回滚; (2)通知运营, 人工干预;(3)通知技术,监控预警(数据恢复) 3. TCC事务(DTS事务架构--淘宝) 框架: tcc-transaction;butetcc trying: 冻结账户余额, 商户不动 commit: 扣减账户余额, 商户账户增加 cancel: 解除冻结
  3. 最大努力通知: 重复通知, 直到处理
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
目录

记录Java的学习轨迹. 工程化专题 (一)Java工程化--Maven基础 (二)Java工程化--Maven实践 (三)Java工程化--Git起步 (四)Java工程化--Git基础 (五)Java工程化--Jenkins 设计模式 设计模式一: 单...

osc_bex5p3qd
2018/08/29
2
0
分布式事务-基于可靠消息的最终一致性(四)

更多干货 分布式事务处理一 分布式事务二 分布式事务处理三 分布式事务四_基于可靠消息的最终一致性 分布式事务五基于可靠消息的最终一致性异常流程 分布式事务六_常规MQ队列 分布式事务七_...

xtof
2018/07/12
0
0
分布式架构_Index

分布式设计与开发 CAP原理和最终一致性(Eventually Consistency) 分布式算法 [分布式Paxos算法] 分布式一致性Hash算法 轮循算法(Round Robin) Hash求余算法(Hash) 最少连接算法(Least C...

陶邦仁
2015/12/07
1.5K
0
java程序猿技术栈

一、java 基础知识 1.1 java基础集合类 1.2 jdk1.5、1.6、1.7、1.8 特效比较 1.3 java异常处理 1.4 jvm原理及常见问题 1.5 log4j等日志收集 1.6 jdbc驱动 1.7 jdk反射机制使用和原理 1.8 ja...

南寒之星
2016/11/30
17
0
分布式缓存技术redis学习系列

分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)——详细讲解redis数据结构(内存模型)以及常用命令 分布式缓存...

osc_v8kogne9
2018/04/19
7
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP控制反转和依赖注入

[TOC] PHP和依赖注入 理论知识 作者:Mingqi 链接:https://www.zhihu.com/question/23277575/answer/169698662 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明...

我爱吃炒鸡
29分钟前
14
0
Xcode 6:键盘未显示在模拟器中 - Xcode 6: Keyboard does not show up in simulator

问题: The keyboard does not show up when I run the simulator and click in the UITextView. 当我运行模拟器并单击UITextView时,键盘没有显示。 How do I re-enable the keyboard? 如何......

法国红酒甜
59分钟前
23
0
紫外线消毒灯EPA注册有请小蔡

臭氧消毒器EPA注册,紫外线消毒灯EPA注册,UV水质过滤器EPA注册,UV空气过滤器EPA注册,UV灭蚊灯EPA注册,超声驱虫设备EPA注册,UV消毒器EPA注册,高频驱鸟器EPA注册,电子驱鼠器EPA注册 二、...

IECEE证书注册
今天
11
0
小程序上传帖子(含有文字图片的微信验证)

public.js var graceJS = require('../../utils/grace.js');import { config } from '../../config.js'Page({ /** * 页面的初始数据 */ data: { imglist: [], title:'......

子枫Eric
今天
28
0
如今大火的算法框架TensorFlow,都有哪些值得一看的好书呢?

TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief 。 Te...

程序员知识码头
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部