`
liufei.fir
  • 浏览: 693612 次
  • 性别: 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系统就可以找到其它不影响扩展性的方法。
分享到:
评论

相关推荐

    分布式系统工程实践_taobao

    ### 分布式系统工程实践知识点概述 ...以上内容仅为《分布式系统工程实践》文档的主要知识点概述,每一部分都包含了大量的技术细节和实践经验,对于深入学习分布式系统的设计与实现具有重要的参考价值。

    分布式系统工程实践.pdf

    分布式系统工程实践 分布式系统是一种由多个独立的计算单元组成,通过网络互相连接并协作完成任务的系统。这类系统通常具有高度的内聚性和透明性,其核心目标是提供高性能、高可用性以及可扩展性。分布式系统中,...

    分布式系统工程实战

    分布式系统工程实战是一本由阿里人员撰写的书籍,旨在为读者提供分布式系统设计与实现方面的实战经验。书中内容丰富,涵盖了分布式系统的基础知识、关键技术、存储与计算系统的分类以及工程实现的注意事项等关键知识...

    分布式事务实现.zip

    为了达成这一目标,分布式事务实现需要解决多个关键问题,包括但不限于: 1. **一致性协议**:为了维护数据一致性,分布式系统中的各个节点需要遵守共同的一致性协议。例如,Paxos和Raft是常见的分布式一致性算法,...

    分布式系统原理介绍

    本文的内容虽然涉及了分布式系统的诸多方面,但侧重于介绍那些在工程实践中应用广泛、简单有效的理论、算法和协议,并通过实例和“工程投影”来帮助读者更好地理解这些概念和技术在真实系统中的应用。由于篇幅和深度...

    分布式事务解决方案.zip

    7. **代码实践与原型工程**:资料包中的代码和原型工程为学习者提供了动手实践的机会,通过实际操作理解分布式事务的实现原理和具体步骤。 8. **视频教程**:视频教学通常比文字更具象化,能更直观地展示分布式事务...

    LCN分布式事务框架详解

    在大规模分布式系统中,由于网络延迟、服务故障等因素,实现这样的事务处理非常复杂。 LCN分布式事务框架的核心是基于消息中间件实现的,通过拦截器和通知机制,将本地事务与全局事务进行解耦。它的工作原理是:当...

    分布式系统原理介绍.pdf

    同时,一个分布式系统工程实践的成功,不仅取决于理论和技术的选择,还依赖于合理的架构设计和高效的工程实现。在本文的模型中,节点是一个整体的概念,它可能是一个硬件节点,也可能是一个软件进程。宕机节点是系统...

    【Java分布式事务】封装对MySQL NoSQL数据访问、实现分布式事务.zip

    Java分布式事务的封装与实现是一个综合性的工程问题,它需要开发者具备对分布式系统架构、事务管理机制、数据一致性原理以及具体技术框架深入了解和熟练应用的能力。通过合理的封装和设计,可以有效地利用现有的工具...

    一种高性能的分布式事务及一致性复制实现.pdf

    在实现高性能分布式事务方面,GoldenDB采用了无共享架构(ShareNothing),通过无状态化的设计理念,避免了单点故障和状态依赖问题。计算节点负责接收数据库操作请求,执行SQL解析、优化,并生成分布式查询计划。...

    分布式系统测试实践

    ### 分布式系统测试实践概览 ...综上所述,分布式系统测试是一项复杂的工程,需要全面考虑系统的特性和需求,采用多层次的测试策略,借助自动化工具,以及不断积累和总结实践经验,以确保系统的高质量和稳定性。

    安全工程--可靠的分布式系统构建指南

    本书《安全工程——可靠的分布式系统构建指南》旨在为读者提供一个全面深入地了解如何在分布式系统中实现高效且可靠的安全策略的平台。 #### 第一部分:安全与分布式系统基础 **1.1 分布式系统的概念** 分布式...

    基于mq+事件表的分布式事务实现方案.zip

    基于消息队列和事件表的分布式事务实现方案,是一种在分布式系统中实现事务管理的有效方式。它在保持事务一致性和可靠性的前提下,提供了系统的可扩展性和高可用性,是解决大规模分布式事务问题的重要技术手段。随着...

    分布式操作系统课件

    通过东北大学的“分布式操作系统课件”,学生可以系统学习以上内容,并通过案例分析和实践项目,提升对分布式系统设计和实现的理解。在当今互联网和大数据时代,分布式操作系统不仅是学术研究的热点,也是实际工程...

    分布式事务相关.zip

    分布式事务的实现和管理是构建可靠分布式系统的重要组成部分。随着技术的发展,新的理论和技术不断涌现,例如基于区块链的分布式事务解决方案也开始受到关注。这些方案利用区块链的不可篡改性和透明性,为分布式事务...

    【Java+TSQL】支付下单场景下的分布式事务实现例子(rabbitmq和xa).zip

    本示例项目“Java+TSQL支付下单场景下的分布式事务实现例子(rabbitmq和xa)”针对支付系统中的下单场景,探讨了如何使用消息队列RabbitMQ结合两阶段提交(2PC,即X/OPEN XA协议)来实现分布式事务。这个例子特别...

    分布式事务问题_pgc.zip

    分布式事务的研究和实践是计算机科学的一个重要领域,涉及到理论研究、系统设计和工程实践等多个方面。随着分布式系统的广泛应用,如何有效地处理分布式事务问题,仍然是一个活跃的研究课题。 在这个过程中,test_...

    分布式事务tx-lcn_hy4.zip

    分布式事务的目标是在分布式系统中实现ACID(原子性、一致性、隔离性、持久性)属性,确保系统中所有节点上的数据能够保持同步。在分布式系统中,由于各节点可能独立运行在不同的数据库或服务上,使得事务管理变得...

    基于异步通信的微服务分布式事务管理机制研究分析.pdf

    在深入分析微服务分布式事务管理机制的基础上,我们将探讨如何在异步通信模式下实现微服务架构中的事务一致性,并深入理解与之相关的概念与技术。 首先,微服务架构是目前软件工程中一种流行的服务组织方式,其主要...

Global site tag (gtag.js) - Google Analytics