描述:
我有六个数据库(MySQL)部署在世界各地的特定地区,复制将被设置。每个数据库由一个web服务器连接,因此总共有6个web服务器连接到一个数据库。

要求:
出于保密的原因,我不能直接告诉我的系统需要什么,但想象一下我正在做某种苹果捐赠模块,所以有两个实体,捐助者(谁捐赠)和受赠者(谁拿)
每个捐献者都有很多苹果,不管他们有多少苹果,想象一下他们有几百万个苹果。当受赠者把苹果从它们身上拿走时,数量就会减少。
二、每个受赠者一次只能从捐献者那里拿走一个苹果,如果还剩一个苹果的话。
问题:
假设有捐赠者帕特里克,他只剩下一个苹果了。这些信息存储在数据库中,并在所有六个数据库中复制,显示他还剩一个苹果。
来自A区的Donee Sam和D区的donee Alex试图同时拿走Patrick的苹果。
数据库A和D显示帕特里克还剩一个苹果,所以萨姆和亚历克斯成功地从帕特里克那里得到了一个苹果,把帕特里克的苹果减少了2个。
复制完成后,取决于数据库逻辑,我们最终会让Patrick拥有0或-1 apple,这两者都是错误的,我需要能够对“获取”过程进行排队。
我的问题是,如何在不同地区做到这一点?
我已经考虑过将复制拓扑从ring更改为star,其中所有update语句都会转到一个并且只有一个中央数据库,因此锁定可以在那里完成。
但是这种实现要求中央数据库具有很高的处理能力,因为它必须处理来自全世界的更新,同时实现锁定机制。

有没有人知道更好的方法来完成这种类型的系统设计?
发布于 2014-03-09 14:25:50
你会遇到CAP定理的含义。从您的需求来看,您主要需要一致性和可用性,但可能会牺牲分区。这意味着您的数据在所有区域都是一致的,当一个节点出现故障时,系统不会崩溃,但是如果您的六个节点中有一个出现故障,则该节点的客户端将无法使用它。
一种方法是对数据进行分区。你能让捐献者和捐献者“属于”特定的地区吗?如果是这样的话,您可以在该区域内保持一致性和可用性,并向主服务器提供最终的一致性,以便进行脱机审核。
如果不能对数据进行分区,可以考虑使用Percona XtraDB簇。我对此没有个人经验,但他们声称MySQL复制是一种附带的替代,它以牺牲分区安全为代价提供了一致性和可用性。
https://stackoverflow.com/questions/22282730
复制相似问题