• 分布式事务


    1、事务

    事务是作为单个逻辑单元执行的一组操作,要么全部成功,要么全部失败。

    事务包含四个特性:原子性,一致性,隔离性,持久性。

    2、分布式事务

    单数据源的一致性依靠单机事务来保证,多数据源的一致性就要依靠分布式事务。

    分布式事务用于分布式系统中保证不同节点之间的数据一致性。

    3、分布式事务的实现

    3.1 XA分布式事务协议。

    XA协议包含两阶段提交(2PC)和三阶段提交(3PC)两种实现。

    在XA协议中包含着两个角色:事务协调者和事务参与者。

    1)XA两阶段提交(2PC)---强一致性

    一个是准备阶段,一个是提交阶段,两个阶段都由事务管理器发起。基于两阶段提交协议,事务管理器能够最大限度地保证跨数据库操作的事务的原子性,是分布式系统环境下最严格的事务实现方法。

    注意:1)只要有一个返回NO,全部回滚。

               2)两阶段提交协议也依赖与日志,只要存储介质不出问题,两阶段协议就能最终达到一致的状态(成功或者回滚)

    不足:

    1.性能问题(在事务执行过程中,各个节点都在占用着数据库资源)

    2.协调者单点故障问题(事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,参与者收不到提交或是回滚通知,参与者会一直处于中间状态无法完成事务。)

    3.丢失消息导致的不一致问题。(在XA协议的第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。)

    2) XA三阶段提交

    XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段,并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求,会自动进行本地commit。

    3PC只是解决了在异常情况下2PC的阻塞问题,但导致一次提交要传递6条消息,延时很大。

    3.3 MQ事务

    这类事务机制将分布式事务分成多个本地事务,这里称之为主事务与从事务。异步事务机制、只能保证最终一致性;但可用性非常高,不会因为故障而发生阻塞

    利用消息中间件来异步完成事务的后一半更新,实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。

    3.3 TCC事务--补偿事务---最终一致性

    TCC事务是Try、Confirm、Cancel三种指令的缩写,TCC在保证强一致性的同时,最大限度提高系统的可伸缩性与可用性

    一次完整的交易由一系列微交易的Try 操作组成,如果所有的Try 操作都成功,最终由微交易框架来统一Confirm,否则统一Cancel

  • 相关阅读:
    clearstatcache清除文件状态缓存
    使用mysql创建自己的物化视图
    python——复制目录结构小脚本
    开发一个jQuery插件——多级联动菜单
    pack、unpack自制二进制“数据库”
    博客爬取系统
    session放入缓存(redis)、DB
    centos+nginx从零开始配置负载均衡
    几个容易被忽略的mysql知识
    数组方式进行表单提交
  • 原文地址:https://www.cnblogs.com/mcahkf/p/9014138.html
Copyright © 2020-2023  润新知