繁体   English   中英

成语或分布式交易算法?

[英]Idioms or algorithms for distributed transactions?

假设您在不同的系统上有2个实体,并且需要执行某种事务以根据与一个或两个实体相关联的信息来更改一个或两个实体,并且要求对两个实体的更改都将完成,或者两个实体都不会更改。

一个简单的例子,基本上必须在2个单独的硬件上运行2行:

my_bank.my_account -= payment
their_bank.their_account += payment

大概有专门针对这种情况存在的算法或惯用语,在存在其他尝试访问相同值的情况下,它们可以正确工作(对于正确的一些可预测的定义)。 两阶段提交协议似乎是一种这样的方法。 有没有更简单的选择,也许有更多的限制? (例如,也许他们要求任何系统都不能完全关闭或无法响应。)或者是否有更复杂的系统在某种程度上更好? 在此问题上是否有标准或广受好评的文本?

还有3PC“ 3阶段提交协议 ”。 3PC通过称为预提交的额外阶段解决了2PC的一些问题。 事务的参与者收到预提交消息,以了解所有其他参与者都已同意提交但尚未完成。 当所有参与者都在等待协调器的提交或中止消息时,此阶段消除了2PC的不确定性。

AFAIK-大多数数据库都可以在2PC协议下正常工作,因为在不太可能发生故障的情况下,它们始终具有事务日志以撤消/重做操作并使数据保持一致状态。

其中大部分内容在

“数据库解决方案,第二版”

“数据库系统:完整书”

在分布式世界中,您可能想检查分布式事务和工作流上Web Service技术的当前状态。 老实说,不是我的茶。 有一些用于Python,Java和.Net的框架可以运行这种服务( 示例 )。

几年前,作为我去年的项目,我在Web Services上实现了一个分布式2PC协议,并且能够像您给出的示例一样在两个单独的数据库上运行事务。 但是,我相信今天人们可以以一种最宁静的方式来实现这一点,例如, 请参见此处 即使在这些链接中提到了一些其他协议,最后它们都最终实现了2PC。

总之,具有适当操作日志以在发生崩溃时撤消/重做的2PC协议实现是最明智的选择之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM