什么是“分布式交易”?

Posted

技术标签:

【中文标题】什么是“分布式交易”?【英文标题】:What is a "distributed transaction"? 【发布时间】:2011-05-12 03:54:45 【问题描述】:

Distributed transaction 的***文章不是很有帮助。

您能否给出关于分布式事务是什么的更多详细信息的高级描述?

另外,您能否举例说明为什么应用程序或数据库应该执行更新两台或多台联网计算机上的数据的事务?

我了解经典的银行示例;我更关心 Dynamo、Bigtable、HBase 或 Cassandra 等 Web 级数据库中的分布式事务。

【问题讨论】:

你了解什么是(“正常”)交易吗? @Matt Ball: 是的,先生!这个问题是关于分布式事务的。 【参考方案1】:

一般来说,一个分布式事务涉及多个物理服务器。有两类分布式事务:

    在分布式数据库中更新数据,这是一个逻辑数据库,但将数据存储在多个物理服务器中。例如 Google 的 Spanner,或 PingCAP 的 TiDB。在这些情况下,DB系统负责分布式事务,开发人员不需要关心。

    更新多个数据库或多个服务中的数据。在微服务的背景下,优惠券、账户、支付等可能是您订单系统的独立服务。在这种情况下,开发者应该确保更新的原子性。如果事务成功,则必须在两台服务器上更新这些值。如果事务失败,则必须在两台服务器上回滚事务。决不能发生值在一台服务器上更新但在另一台服务器上未更新的情况。本文The seven most classic solutions for distributed transaction management对分布式事务进行了深入探讨

【讨论】:

【参考方案2】:

我试图在这篇帖子Performance tuning of Distributed ( XA ) transaction - How?中显示分布式事务的详细信息

分布式事务的好数据是对一致性要求非常高的数据。通常这是金钱或其他东西,我们永远不会拥有过时的数据。我通常定义两类实时数据和不需要立即确保正确性/一致性的数据。

现在是问题的第二部分,关于 Dynamo、Bigtable、HBase 或 Cassandra。

你不能在 NOSQL 数据库和分布式事务之间画一个平行线。这类数据库的存在被证明是避免分布式事务的一种手段。分布式事务以一致性为中心。这与以可用性和分区为中心的 NOSQL 存储完全相反。

此类数据库中使用的通常事务模型是最终一致性。

【讨论】:

我有没有办法在 No-SQL 数据库上执行事务?那么选择 CA 或 CP 而不是 AP 的数据库类别呢?像亚马逊这样的组织会在必须进行交易的情况下使用其订单管理的 SQL 数据库吗?【参考方案3】:

分布式事务是分布式数据库上的事务(即数据存储在多个物理上独立的系统上的事务)。值得注意的是,其中涉及相当多的复杂性(尤其是在通信中),以确保所有机器保持一致,因此要么整个交易成功,要么看起来什么都没有发生。

【讨论】:

【参考方案4】:

通常,事务发生在一台数据库服务器上:

BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT

一个分布式事务涉及多个服务器:

BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT

困难在于服务器必须通信以确保两台服务器都满足原子性等事务属性:如果事务成功,则值必须在两台服务器上更新。如果事务失败,则必须在两台服务器上回滚事务。决不能发生值在一台服务器上更新但在另一台服务器上未更新的情况。

【讨论】:

【参考方案5】:

分布式事务是跨多台计算机工作的事务。假设您在计算机 A 上的程序中以某种方法启动事务。然后您在计算机 A 上对方法中的数据进行一些更改,然后该方法调用计算机 B 上的 Web 服务。计算机 B 上的 Web 服务方法失败并且回滚事务。由于事务是分布式的,这意味着在计算机 A 上所做的任何更改也需要回滚。 Windows 上的分布式事务协调器和 .net 框架的组合有助于实现此功能。

【讨论】:

【参考方案6】:

分布式事务跨越多个物理系统,而标准事务则不然。系统之间的同步成为了传统上在标准事务中不存在的需求。

来自您的***参考...

...分布式事务可以是 被视为一个数据库事务 必须同步(或提供 ACID 属性)在多个 参与的数据库是 分布在不同的物理 地点...

【讨论】:

+1 表示报价。对我来说,ACID 本身就是一个定义。

以上是关于什么是“分布式交易”?的主要内容,如果未能解决你的问题,请参考以下文章

关于比特币和区块链的3件重要事项

SQL Server 开启DTC分布式事务

又快又稳,金融级分布式架构如何实现?

巨杉Tech | 四步走,快速诊断数据库集群状态

微服务架构下,大型银行数据库应用实践

巨杉数据库助力民生银行恒丰银行云化架构升级