`
liufei.fir
  • 浏览: 676558 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【分布式系统工程实现】分布式事务

阅读更多


CAP理论虽然告诉我们,一致性和可用性二者不可兼得,但这并不代表互联网系统都应该牺牲一致性,哪个特性更重要只有业务需求才能决定。

ACID是单机事务的特性,不过在分布式系统中,由于两台机器理论上无法达到一致的状态(参考Fischer等的论文),需要引入一个单点进行协调,这就出现了著名的两阶段锁协议。两阶段锁(Two-phase commit)协议是每个分布式工程师必须掌握的协议,大致如下:

1, Prepare:协调者(Coordinator)给每个参与者(Participants)发送Prepare消息,每个参与者要么直接返回失败,比如权限验证失败,要么在本地执行但不提交,到达一种“万事俱备,只欠东风”的状态;

2, Commit/Rollback:如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据协调者的指令执行提交或者回滚操作;

两阶段锁是一种悲观锁,第一个问题是协议本身的成本:整个协议过程是需要加锁的,比如锁住数据库的某条记录,且需要持久化大量事务状态相关的操作日志。更为重要的是,两阶段锁在出现故障时表现出来的脆弱性,比如两阶段锁的致命缺陷:当协调者出现故障,整个事务需要等到协调者恢复后才能继续执行,如果协调者出现类似磁盘故障等永久性错误,该事务将成为永久遗弃的孤儿。两阶段锁的更为详细的描述可以参考Andrew S. Tanenbaum的大作<>。

针对两阶段锁协调者故障的问题,有不同的解决方法:第一种是三阶段锁(Three-phase commit),这种方法纯粹是理论上的方法,工程上不具备可操作性;第二种方法是对协调者进行Replication,当主协调者出现故障时,可以由备机接替其继续服务。如果需要将这个过程自动化,可以引入Paxos协议执行主协调者选举(参考Jim Gray和Lamport的论文)。

当然,这里需要简单说明,并不是所有和多机有关的事务都需要两阶段锁,比如Microsoft Azure系统中存三个副本,主副本的事务操作以操作日志的形式同步到辅副本,虽然三台机器都进行了事务操作,不过本质上还是单机的事务操作。

和两阶段锁这种悲观锁相对应的就是乐观锁:大多数操作成功失败的可能性很小,所以不需要类似两阶段锁的Prepare阶段,直接在多个参与者上执行,当某个参与者执行出现问题,再执行补偿操作。又如存储系统中经常出现的Read-Test-Write操作,我们不会将整个过程锁住,而是允许Read-Test-Write过程中其它客户端对互斥资源的访问,比如Read阶段记录数据版本,Write的时候检查版本,如果发现不一致则重试整个Read-Test-Write过程。

BASE主要是针对多套业务系统而言,在存储系统内部一般不提这个概念。如果是数据库这样的SQL系统,就是ACID的一致性模型;如果是类似GFS + Bigtable这样的NOSQL系统,就是单行事务的一致性模型;如果是类似Google Megastore这样的NOSQL系统,就是支持跨机多行事务的一致性模型;如果是Dynamo这样的去中心化系统,就是基于冲突合并的一致性模型。多套业务系统之间可以采用BASE的原则进行架构设计,比如采用消息中间件进行可靠的消息传输,保证多台业务系统最终达到一致的状态。

几乎所有的NOSQL存储系统都不支持分布式事务,因为需求不够强烈,且实现极其复杂。然而,如果业务确实需要分布式事务,那就支持吧,虽然影响扩展性,不过不可能因为我们是NOSQL系统就可以找到其它不影响扩展性的方法。
分享到:
评论

相关推荐

    (高清版)大规模分布式存储系统:原理解析与架构实战

    杨传辉,阿里巴巴高级技术专家,花名日照,OceanBase核心开发人员,对分布式系统的理论和工程实践有深刻理解。曾在百度作为核心成员参与类MapReduce系统、类Bigtable系统和百度分布式消息队列等底层基础设施架构工作...

    电商系统的分布式事务调优

    究其原因是由于购买的道具更新的是游戏数据库,而通宝是在用户账户中心数据库,在一次购买道具时,存在同时操作两个数据库的情况,属于一种分布式事务。而我们的工程师在完成玩家获得道具和扣除余额的操作时,没有...

    分布式数据库架构及企业实践-基于Mycat中间件

    全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...

    分布式工程数据库系统中事务管理机制相关技术的研究

    分布式工程数据库系统中事务管理机制相关技术的研究

    分布式数据库架构及企业实践-基于Mycat中间件.pdf

    全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...

    阿里巴巴分布式事物seata实践sample工程源码

    分布式一致性是分布式系统亟需解决的关键问题之一,根据过去一年的调查问卷,在微服务的实践中分布式事务是用户遇到的最大痛点。目前市面缺少经过洪荒流量验证的分布式事务组件,Seata 在阿里经济体内部经过了漫长的...

    微服务架构下处理分布式事务,你必须知道的事儿

    在工程领域,分布式事务的讨论主要聚焦于强一致性和最终一致性的解决方案。典型方案包括:两阶段提交(2PC,Two-phaseCommit)方案。eBay事件队列方案。TCC补偿模式。缓存数据最终一致性。分布式事务的目的是保障分库...

    [详细完整版]分布式数据库.doc

    分布式数据库技术广泛应用于信息科学、系统工程、数据 库技术、云计算等领域。 2、通过本课程的学习,要求学生对分布式数据库学科的重要技术不仅知其然,更要 知其所以然。掌握分布式数据库系统的理论、结构、技术和...

    分布式数据库系统透明性的设计与实现 (2013年)

    本文基于C/S 和B/S 的结构的分布式教务管理系统的具体实现和设计思想,针对地域分散的不同区域的特点,主要对分布式数据库系统透明性的实现与设计进行了重点的阐述,并涉及了B/S、分布事务管理、分布式数据库系统的理论...

    分布式数据库架构及企业实践:基于Mycat中间件

    全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...

    【分布式事务----LCN】LCN原理及使用方式.docx

    TCC事务机制相对于传统事务机制(X/Open XA Two-Phase-Commit),其特征在于它不依赖资源管理器(RM)对XA的支持,而是通过对(由业务系统提供的)业务逻辑的调度来实现分布式事务。主要由三步操作,Try: 尝试执行业务...

    分布式数据库架构及企业实践_基于mycat中间件

    全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...

    基于JTA的跨数据库分布式事务的实现 (2012年)

    应用系统开发中,事务是一个不可或缺的组件模型,保证了用户操作的ACID属性。对于跨数据库的大型应用,必须使用分布式事务。JTA为J2EE平台提供了分布式事务服务,讨论JTA的体系架构,通过示例介绍其实现机制。

    分布式数据库架构及企业实践-基于Mycat中间件 学习书籍

    全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...

    分布式数据库架构及企业实践-基于Mycat.pdf

    全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。...

    braft:基于brpc的RAFT共识算法的工业级C ++实现,在百度内部广泛用于构建高可用性的分布式系统

    braft是为要求高工作量和低延迟开销的方案设计和实现的,并考虑了易于理解的概念,以便百度内部的工程师可以正确,正确地构建自己的分布式系统。 它在百度内部广泛用于构建高可用性系统,例如: 存储系统:键值,...

    nacos seata fegin 分布式数据库例子

    资源包含nacos seata 相应的软件和配置 ,包含了demo 工程,以及demo 使用的方式,操作手册 遇到的问题 是学习 研究seata 作为分布式组件好的工具

    java8源码-tcc:TCC分布式事务框架

    java8 源码 TCC分布式事务框架 基于服务层补偿的Tcc分布式事务解决...内置经典的分布式事务场景demo工程,并有swagger-ui可视化界面。 内置本地事务状态机,实现confirm和cancel操作不会被多次执行,放宽了幂等性要求。

    基于SpringBoot+Reds+RabbitMQ实现的分布式秒杀系统+源代码+文档说明

    基于SpringBoot+Reds+RabbitMQ实现的分布式秒杀系统 #### 整体流程 前端页面采用隐藏秒杀地址和使用随机秒杀地址来防止用户恶意刷接口,点击秒杀时会让用户输入数字计算验证码,输入正确后进入后端业务逻辑。 ...

    软件工程之专题十一: 系统工程知识

    专题十一: 系统工程知识 1. 系统与系统工程: 1.1 系统的概念: 系统就是由多个元素有机的结合在一起,执行特定的功能以达到特定目标的集合体,说的更详细一点就是: [1] 系统是由各个元素或子系统组成的; [2] 系统...

Global site tag (gtag.js) - Google Analytics