0

我有一个关于主动复制和排序的问题。我知道在分布式系统中传统的主动复制需要全部命令来将请求传播到副本,但是,我想到了一个可能不需要的例子。挑战:银行的主动复制?

使用主动复制来查看银行账户系统。但不能从您的帐户中扣款,您只能贷记您的帐户(所以只能为您的余额添加正数)。银行系统是否需要订购保证?考虑到如果我将5英镑和10英镑添加到我的帐户中,如果副本没有按顺序收到此副本,则无论收到请求的顺序如何,它仍然等于15英镑。没有可能产生的实际冲突对于订购,部分原因是用户可能会有点烦恼,看到他们的账户只有5英镑的价格时,他们首先得到10英镑。但从技术上讲,问题在哪里?

我想我是错的,但不能真正明白为什么。有人能够更详细地向我解释一下吗?

回答

0

是的,加法是关联的。这意味着任何添加顺序都会导致相同的值。总体订购通常需要设置值,但不适用于增量。但是,递增需要一次递送。如果该增量到达两次,因为发件人没有意识到收件人已收到它,那么您只需要给自己10英镑的钱。将帐户余额设置为精确值对订购非常敏感,但不要重试。

银行的问题在于,您通常需要保留一些其他正确性保证,例如任何帐户的帐户余额都不会为负数。如果您在两个区域中相邻的两个区域存储资金和金额,只需按照您所描述的工作,另一个只存储减法,您就可以同时处理将资金投入并从中支付帐户。然而,现在的排序很重要,因为你可以首先获得所有的减法,然后再添加。或者所有的增加,然后你在减法得到同步之前用这笔钱支付,现在你已经透支了你的账户。

我有三点建议:首先,如果你可以避免它,建立软件处理钱。错误是非常昂贵的。其次,除非你真的需要,否则不要设计分布式系统。第三,如果您必须存储交易而不是帐户,并使用UUID。 Alice sent £8 to Bob (roughly on January 22).这是所谓的CRDT,它处理重复,并且经常处理任意排序。

+0

非常感谢 – user3421420