事务的基本知识 - Duttor

专注人工智能在金融领域的应用

事务的基本知识

事务 

事务:由一组操作构成的可靠、独立的工作单元
事务特性:ACID

  • Atomicity(原子性)
  • Consistency(一致性)
  • Isolation(隔离性)
  • Durability(持久性)

难度:

  • 高度并发
  • 资源分布
  • 大时间跨度

《事务的基本知识》

本地事务

本地事务:事务由资源管理器(如DBMS)本地管理
优点:

  • 支持严格的ACID属性
  • 可靠
  • 高效
  • 状态可以只在资源管理器中维护
  • 应用编程模型简单(在框架或平台的支持)

局限:

  • 不具备分布事务处理能力
  • 隔离的最小单位由资源管理器决定,如数据库中的一条记录

《事务的基本知识》

全局事务(DTP模型)

全局事务:事务由全局事务管理器全局管理
事务管理器:管理全局事务状态与参与的资源,协同资源的一致提交/回滚
TX协议:应用或应用服务器与事务管理器的接口
XA协议:全局事务管理器与资源管理器的接口
《事务的基本知识》

 

 两阶段提交(Two Phase Commit) 

准备操作与ACID:

  • A: 准备后,仍可提交与回滚
  • C: 准备时,一致性检查必须OK
  • I: 准备后,事务结果仍然只在事务内可见
  • D: 准备后,事务结果已经持久

局限:

  • 协议成本(准备操作是一定必须的么)
  • 准备阶段的持久成本
  • 潜在故障点多带来的脆弱性
  • 准备后,提交前的故障引发一系列隔离与恢复难题

《事务的基本知识》

遵循的原则

原则:

  • 真正重要的是满足业务需求,而不是追求抽象、绝对的系统特性
  • 帽子戏法:两只手最多能拿几顶帽子?
  • 酸碱平衡(ACID-BASE Balance)

模式:

  • 定期校对
  • 可靠消息
  • TCC操作
  • 补偿操作

帽子戏法

CAP定理:对于共享数据系统,只能同时拥有以下三项中的两个

  • Consistency(一致性):所有用户看到一致的数据
  • Availability(可用性):总能找到一个可用的数据副本
  • Tolerance to Network Partition(分区容错性):即使在系统被分区的情况下,仍然满足上述两点

《事务的基本知识》

酸碱平衡

BASE:

  • BA(Basic Availability)基本可用性
  • S(Soft state)柔性状态
  • E(Eventuall consistency)最终一致性

《事务的基本知识》

可靠消息实现可靠消息实现

实现:

  • 业务处理服务在业务事务提交前,向实时消息服务请求发送消息,实时消息服务只记录消息数据,而不是真正发送
  • 业务处理服务在业务事务提交后,向实时消息服务确认发送。只有在得到确认发送指令后,实时消息服务才真正发送消息
  • 业务处理服务在业务事务回滚后,向实时消息服务取消发送
  • 消息状态确认系统定期找到未确认发送或回滚发送的消息,向业务处理服务询问消息状态,业务处理服务根据消息ID或消息内容确定该消息是否有效

成本:

  • 一次消息发送需要两次请求
  • 业务处理服务需事先消息状态回查接口

优点:

  • 消息数据独立存储、独立伸缩
  • 降低业务系统与消息系统间的耦合

《事务的基本知识》

TCC/TC

TCC(Try-Confirm-Cancel):

  • Try:尝试执行业务

完成所有业务检查(一致性)
预留必须业务资源(准隔离性)

  • Confirm:确定执行任务

真正执行任务
不做任何业务检查
只是用Try阶段预留的业务资源

  • Cancel:取消执行业务

释放Try阶段预留的业务资源

TC(Try-Cancel):只比TCC少一个Confirm过程
《事务的基本知识》

 

下篇文章《基于tcc的Java分布式事务框架》将详细介绍tcc分布式事务原理及Java实现:http://wangbaocai.cn/?p=1364

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>