【问题标题】:Challenge: Active Replication for Bank?挑战:银行的主动复制?
【发布时间】:2016-08-13 08:22:56
【问题描述】:

我有一个关于主动复制和排序的问题。我知道分布式系统中传统的主动复制需要完全排序才能将请求传播到副本,但是,我想到了一个可能不需要这样做的示例。

想象一个使用主动复制的银行账户系统。但是,您只能贷记您的帐户,而不是能够借记您的帐户(因此只能将正数添加到您的余额中)。那么银行系统是否需要订单担保?考虑到如果我将 5 英镑然后 10 英镑添加到我的帐户中,如果副本没有按顺序收到这个,无论他们收到请求的顺序如何,它仍然会达到 15 英镑。不会出现真正的冲突对于订购,部分原因是用户可能会有点恼火,因为当他们先记入 10 英镑时,他们的帐户中只有 5 英镑。但从技术上讲,问题出在哪里?

我想我错了,但真的不明白为什么。谁能给我详细解释一下?

【问题讨论】:

    标签: transactions replication distributed distributed-transactions


    【解决方案1】:

    是的,加法是关联的。这意味着任何加法排序都将产生相同的值。设置值通常需要总排序,但增量不需要。但是,增量只需要一次交付。如果该增量到达两次,因为发送者没有意识到接收者得到了它,你只是给了某人 10 英镑你自己的钱。将帐户余额设置为精确值对排序敏感,但对重试不敏感。

    银行的问题在于,您通常需要持有其他一些正确性保证,例如任何账户的账户余额都不会为负数。如果您在两个相邻的字段中将钱存入和从帐户中取出,只需按照您描述的方式工作,另一个只存储减法,您将能够处理将钱插入和支付帐户。不过,现在排序很重要,因为你可以先得到所有的减法,然后是加法。或者所有的加法,然后你在减法同步之前用这笔钱支付,现在你已经透支了你的账户。

    我有三个建议:首先,如果可以避免,就不要开发处理金钱的软件。虫子非常昂贵。其次,除非你真的需要,否则不要设计分布式系统。第三,如果必须,存储交易而不是帐户,并使用 UUID。 Alice sent £8 to Bob (roughly on January 22). 这是一种称为 CRDT 的东西,它处理重复项,并且经常处理任意顺序。

    【讨论】:

      猜你喜欢
      • 2022-06-19
      • 1970-01-01
      • 2015-09-10
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多