今天小编带来的是分享课题是分布式事务。小编是在一家O2O公司做程序员,今天就以公司的一则订单业务来作为分享课题的场景。
事情还得从事务说起。我说事情总是喜欢从字面意义说起。那事务究竟是什么意思呢?得从它的英文说起:Transaction。
Hmily-TCC分布式事务解决方案是支持跨语言的场景的。其实现方式是使用了RPC(Remote Procedure Call,远程过程调用)来实现跨语言的通信。
分布式事务管理是指在分布式系统中对跨多个数据库或服务的操作进行协调和保证一致性的机制。在分布式环境下,由于涉及到多个独立的资源和服务,需要确保这些操作要么全部成功执行,要么全部回滚,以保持数据的一致性。
文章:大篇幅来自于:《周志明-凤凰架构》建议移步原文阅读 ,本篇为本人的学习笔记。
随着互联网的快速发展,分布式系统已经成为了大型应用的标配。在分布式系统中,分布式事务和分布式锁是两个核心概念。本文将重点探讨分布式事务与分布式锁的区别,并提供相关的代码示例。
原文链接:https://cloud.tencent.com/developer/article/2431681
事务就是提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。
总体来说,Seata的使用经验还是比较顺利的。通过配置和注解的方式,可以比较方便地在代码中进行分布式事务的管理。同时,Seata提供了一些可靠性保证机制,可以应对一些异常情况。不过,在配置和使用过程中,理解和掌握Seata的一些概念和机制还是需要一些时间和学习成本的。
咱们前面分别对分布式事务的几个分支:XA、2PC、3PC、TCC、Saga、事务消息、最大努力事务进行的详细介绍。本篇作为分布式事务设计的收尾篇,讲对前面的内容查缺补漏和总结,最后对市面的一些开源框架做一些介绍。
先说下这个词的概念,维基百科给的解释:年轻人出于对国内压抑的工作文化的失望,与其跟随社会期望坚持奋斗,不如选择“躺平”的处事态度。
只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。
咱们前面分别对分布式事务的几个分支:XA、2PC、3PC、TCC、Saga、事务消息、最大努力事务进行的详细介绍。本篇作为分布式事务设计的收尾篇,讲对前面的内容查缺补漏和总结,最后对市面的一些开源框架做一些介绍。
分布式事务的对立方,肯定是非分布式事务,也就是本地事务,我们平常经常碰到的那种,也是工作中经常遇到的。
在开始之前,首先需要理解什么是分布式事务以及其特性。将从最基础的定义和特性开始,逐步深入到其在实际应用中的表现和影响。
XA分布式事务方案是一种在分布式系统中实现跨多个数据库或队列等资源的一致事务的方法。
Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。在 GitHub 上拥有超过 1.4 万 Star,毫无疑问是开源社区分布式事务领域最火爆的项目。
所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,那么就回滚事务。
本地事务适用于单个数据库的简单操作,实现简单、高效。而分布式事务适用于多个数据库之间的复杂操作,提供了数据共享和故障容忍的优势,但实现和维护都更加复杂。根据实际的应用需求和系统情况来选择合适的事务处理方式。
在MySQL中,可以使用XA规范来实现分布式事务的强一致性。XA(eXtended Architecture)是一个分布式事务的标准规范,定义了事务管理器(Transaction Manager)和资源管理器(Resource Manager)之间的协议,用于实现分布式环境下的事务一致性。
分布式应用有一个比较明显的问题就是,一个业务流程通常需要几个服务来完成,业务的一致性很难保证。为了保障业务一致性,每一步都要在 catch 里去处理前面所有的“回滚”操作,可读性及维护性差,开发效率低下。
事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性:
最强大的事务类型之一称为两阶段提交,当第一个事务的提交取决于第二个事务的完成时,它是摘要。特别是当您必须同时更新多个实体时,例如确认订单和立即更新库存时,它非常有用。
作为 Red Hat 咨询架构师,我有幸参与了大量客户项目。虽然每个客户都面临自己特有的挑战,但是我发现其中有一些共同点。大多数项目都想知道如何协调对多个记录系统的写入。要回答这个问题,一般会涉及长篇累牍的解释,包括双重写入(dual write)、分布式事务、现代化的替代方案以及每种方式可能出现的故障情况和缺点。这样做通常会让客户意识到,将单体应用拆分为微服务架构是一个漫长和复杂的过程,而且通常都需要权衡。
开发分布式系统具有挑战性。复杂性从应用程序层转移到网络层,并要求各个服务之间更密切的交互。将代码设计为“云原生”意味着要处理12要素(12-factor)的问题,例如外部配置、无状态性、日志记录以及与后端服务的连接。Spring Cloud项目套件中包含了许多服务,可以使应用程序在云环境中运行。
TCC之外另一个常见的终一致性分布式事务解决方案是基于两阶段提交(Two-Phase Commit,2PC)协议。
分布式事务之前先简单介绍下介于本地事务和分布式事务之间的两个事务:全局事务(Global Transactions)和共享事务(Share Transactions)的原理与实现。
针对分布式架构下的数据一致性,大家也许会问这样的问题:跨系统间分布式事务如何解决?系统内多个服务的分布式事务如何解决?一个服务内多个数据源/数据库的分布式事务如何解决?……这些问题大家是很容易理解的,但是由于术语不准确,所以解释起来会有二义性,所以先要统一语言或者术语,也就是统一概念:
三年前,我写了第一篇和分布式事务相关的文章再有人问你分布式事务,把这篇扔给他,后面陆续也写了一些和分布式事务相关的文章:
张亮,京东数科数据研发负责人,Apache ShardingSphere发起人 & PPMC
最近席卷全网的神剧《庆余年》,听说一开始不屑一顾的人,看了之后都会说“真香”。 数据君1.5倍速补课之后,秒被爱财怕老婆又善吹彩虹屁的老王圈粉。 众所周知,“宝藏男孩”王启年贪财和怕老婆两个特性不分先后,赚钱藏钱一把好手。 要薪资的时候,他这样说: 为什么要藏呢?他的钱全部上交给了老婆,享受“体贴入微”的搜身,平日里也只能想尽办法藏点钱充到小金库。 办公室文件里有银票: 脚趾缝里有铜板: 请范闲吃饭,从鞋袜中掏出两枚铜钱,豪气的说:“我请你吃饭!”这对他来说,简直是最破费的一次了。 但
相比于数据分片方案的逐渐成熟,集性能、透明化、自动化、强一致、并能适用于各种应用场景于一体的分布式事务解决方案则显得凤毛麟角。基于两或三阶段提交的分布式事务的性能瓶颈以及柔性事务的业务改造问题,使得分布式事务至今依然是令架构师们头疼的问题。
相比于数据分片方案的逐渐成熟,集性能、透明化、自动化、强一致、并能适用于各种应用场景于一体的分布式事务解决方案则显得凤毛麟角。基于两(三)阶段提交的分布式事务的性能瓶颈以及柔性事务的业务改造问题,使得分布式事务至今依然是令架构师们头疼的问题。
JTA规范下载地址:http://download.oracle.com/otn-pub/jcp/jta-1.1-spec-oth-JSpec/jta-1_1-spec.pdf
我们已经了解了四种分布式事务解决方案,2PC【链接】、TCC【链接】、可靠消息最终一致性【链接】、最大努力通知【链接】,每种解决方案我们通过案例开发进行学习,本章节我们结合互联网金融项目中的业务场景,来进行分布式事务解决方案可行性分析。
一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。从本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
前面我们讲了分布式事务的2PC、3PC , TCC 的原理。这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务。特别是 2PC,3PC 他们完全利用数据库的事务能力,在一阶段开始事务后不进提交会严重影响应用程序的并发性能。TCC 一阶段虽然不会阻塞数据库,但是它同样是在尽力追求同时成功同时失败的一致性要求。但是在很多时候,我们的应用程序的核心业务为了追求更高的性能、更高的可用性,可以允许在一段时间内的数据不一致性,只需要在最终时刻数据是一致就可以了。基于以上场景我们可以采用基于可靠消息服务的最终一致性分布式事务处理方案。
编者: 本文中报告,关注 “数据和云” 回复:下载。可以找到下载链接。 2021年12月,墨天轮社区发布了由CCF数据库专委会、清华大学和墨天轮社区共同撰写的《数据库系统的分类和评测研究》,这个报告的初衷是希望通过对数据库产品的分类、评测、发展等方向的研究,为行业提供参考和促进。 感谢执笔人李国良,李战怀,彭智勇,盖国强,感谢清华大学、西北工业大学、武汉大学、云和恩墨、华为、阿里云、腾讯云、京东云、 虚谷伟业、PingCAP、巨杉、建设银行、民生银行、哈尔滨银行、浙江移动等企业和单位的专家的共同参与和支持。
2000 年的时候,Eric Brewer 教授提出了 CAP 猜想,2年后,被 Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性,从此,CAP 理论正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。提出分布式系统有三个指标:
什么意思呢?也就是说,[1] 订单服务-修改订单状态,[2] 库存服务-扣减库存,[3] 积分服务-增加积分,[4] 仓储服务-创建销售出库单。
分布式系统是由多个计算机节点通过网络连接,协同完成任务的系统。这些节点共享同一份数据,需要解决数据一致性、系统可用性、容错性等问题。分布式系统的主要挑战包括:数据一致性问题、节点通信问题、故障恢复问题等。
译自:Distributed transaction patterns for microservices compared
上一篇架构篇:分布式理论CAP、BASE[1],我们了解到分布式存在的问题以及大致的解决理论,但是具体的实现协议或者方案有哪些?
MongoDB 4.2已经发布,我们来看看它增加了哪些新特性?分布式事务?数据库加密?通配符索引?
强一致性事务是在分布式系统中保证多个操作在一个事务中按照顺序执行并达到一致的一种机制。
分布式系统中,分布式锁是确保数据一致性和避免并发冲突的关键工具之一。然而,分布式锁的性能往往是系统性能的瓶颈之一。在本文中,我们将探讨如何将分布式锁的性能提升100倍,从而使分布式系统更加高效和可靠。
随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章总结了分布式事务最经典的解决方案,分享给大家。
领取专属 10元无门槛券
手把手带您无忧上云