zoukankan      html  css  js  c++  java
  • 基于二阶段提交协议的分布式事务解决方案

      事务是有很多原子性的操作组成的,他要么全部执行成功,要么全部执行失败,在分布式系统中为了实现这个目标,各大厂商出现了很多种不同的解决方案。一些软件公司和外包公司还在使用基于二阶段提交协议的解决方案,但是一些主流的互联网公司主要是用mq等解决方案,像蚂蚁金服使用的是基于TCC的解决方案。

      二阶段提交协议

      二阶段提交协议其实很好理解,分为两步走,第一步执行sql但不提交,等该事务的sql全部执行成功之后,执行第二步,提交sql,否则执行数据库的回滚操作。但是这个为什么说现在主要在一些软件公司或者外包公司还在使用,一些互联网公司或者大厂不会去使用它呢,最重要的一点是他的效率太低,当数据访问量太大时,会造成线程等待情况太严重。

      也正是由于基于二阶段提交协议的解决方案效率太低,他被使用在只注重产能的软件公司和外包公司。下面来讲讲他为什么效率低。基于该协议实现的框架有很多,这些框架在实现的时候为了能保证事务的一致性,必须要对数据库资源上锁,如果不上锁,该协议没有任何意义,所以就造成了一个线程中的事物为了保证事物的一致性,必须对数据库资源上锁,那么其他线程就必须等待,一直到该线程释放锁才可以让其他线程中的一个使用。

      所以基于二阶段提交协议的分布式事务-水平分库的解决方案正在被抛弃,他不适合于现在数据访问量达到一定量级的互联网公司。在下一篇文章中我将介绍蚂蚁金服在分布式事务-水平分库中使用TCC的解决方案

      对于分布式事务没有任何一家公司能100%解决,只能在一定程度上降低概率,像蚂蚁金服的解决方案能达到99.99%,所以说当出现分布式事务的情况,我们可以记log,让定时任务去跑,必要时还需要人工修数据。

      

  • 相关阅读:
    C++每次读取一行字符串输入(学习笔记) (转)
    Ubuntu使用Windows下的conio.h
    容斥原理、欧拉函数、phi
    UVa1635
    转:用STL中的vector动态开辟二维数组
    [转载]Vector用法(C++ Primer中文版)
    c++中vector的pair与make_pair的使用,双关键字排序
    uva12716 GCD XOR
    在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium
    Careercup
  • 原文地址:https://www.cnblogs.com/jishuzhaiachong/p/erjieduantijiaoxieyi.html
Copyright © 2011-2022 走看看