分布式事物


什么是分布式事物?

    针对2个以上的库操作数据事物管理的, 比如操作A库B库,当B库失败,也要把A库那一步操作回滚。

    在分布式系统中,著有CAP理论,该理论由加州大学伯克利分校的Eric Brewer教授提出,该理论阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability),以及分区 容错性(Partition tolerance)。

  • 一致性
    在分布式系统中数据往往存在多个副本,一致性描述的是这些副本中的数据在内容和组织上的一致。
  • 可用性
    可用性描述了系统对用户的服务能力,所谓可用是指在用户容忍的时间范围内返回用户期望的结果。
  • 分区容错性
    分布式系统通常由多个节点构成,这些节点通常分布在不同的网络中,然而网络始终是不可靠的,所以存在分布式集群中的节点因为网络通信故障导致被孤立成一个个小集群的可能性,分区容错性要求在出现这种情况下系统仍然能够对外提供一致性的可用服务。

??对于一个分布式系统,我们始终要假设网络是不可靠的,所以分区容错性是对一个分布式系统最基本的要求,所以我们更多的是尝试在可用性和一致性之 间寻找一个平衡点。让分布式集群始终对外提供可用的一致性服务一直是富有挑战和趣味的一项任务。暂且抛开可用性,拿一致性来说,对于关系型数据库我们通常 利用事务来保证数据的一致性,当我们的数据量越来越大,大到单库已经无法承担时,我们不得不采取分库分表的策略对数据库实现拆分,构建分布式数据库集群, 这样可以将一个数据库的压力分摊到多个数据库,极大的提升了数据库的存储和响应能力,但是也为我们使用数据库带来了许多的限制,比如主键的全局唯一、联表 查询、数据聚合等等,另外一个相当棘手的问题就是数据库的事务由原先的单库事务变成了现在的分布式事务。
??分布式事务的实现并不是很难,比如下 文要展开的两阶段提交(2PC:Two-Phrase Commit)和三阶段提交(3PC:Three-Phrase Commit)都给我们提供了思路,但是如果要保证数据的强一致性,并要求对外提供可用的服务,那么就变成了一个几乎不可能的任务(至少目前是),因此很 多分布式系统对于数据强一致性都敬而远之,本人在之前项目的架构设计中也花费不少时间在系统的一致性和可用性之间寻找平衡。

实现分布式事物的几种方法:

1.二阶段提交实现 -- 2PC

2.三阶段提交实现 --3PC

3.分布式事物框架 -- TCC

  tcc是一个模板框架, 是英文单词try, comfirm, cancel 三个单词的缩写。我们要操作的业务处理部分在try里面执行, 执行的所有结果

    是否有失败的情况在comfirm里面确认,如果有失败,则在cancel里面做回滚操作。

4.本地消息异步确认

5.可靠消息最终一致性

6. 最大努力通知