说明
我在世界各地的特定地区部署了六个数据库(MySQL),将建立复制。每个数据库都通过Web服务器连接,因此总共有6个Web服务器,每个服务器连接到一个数据库。
要求:
出于保密原因,我不能直接告诉我的系统需要什么,但想象一下我正在做某种苹果捐赠模块,所以有两个实体,捐赠者(谁给予)和受赠者(谁接受)
我。每个捐赠者都有很多苹果,无论他们拥有多少苹果,只要想象他们有数百万个苹果。当受益人将苹果从他们身边带走时,金额会减少。
II。如果剩下的话,每个受赠者一次只能从捐赠者那里拿一个苹果。
问题:
说有捐赠者 Patrick ,他只剩下一个苹果。这些信息存储在数据库中,并在所有六个数据库中复制,显示他还剩下一个苹果。
从区域A完成 Sam 并且来自区域D的受精者 Alex 同时尝试使用 Patrick 的苹果。
数据库A和D显示 Patrick 还剩下一个苹果,所以 Sam 和 Alex 成功地从 Patrick <获得了一个苹果/ em>,将帕特里克的苹果减少了2.
复制完成后,根据数据库逻辑,我们最终会让Patrick拥有0或-1 apple,这两者都是错误的,我需要能够排队“获取”过程。
我的问题是如何在不同地区完成这项工作?
我想过将复制拓扑从一个环变为一个星,其中所有更新语句都会转到一个且只有一个中央数据库,因此可以在那里进行锁定。
但是这种实现要求中央数据库具有非常高的处理能力,因为它必须处理来自全世界的更新,同时实现锁定机制。
有谁知道完成此类系统设计的更好方法?
答案 0 :(得分:1)
您正在考虑CAP定理的含义。根据您的要求,您通常需要一致性和可用性,但可能会牺牲分区。这意味着您的数据在所有区域中都是一致的,并且当一个节点关闭时系统不会崩溃,但如果您的六个节点中的一个节点关闭,则该节点的客户端无法使用它。
一种方法是对数据进行分区。你能否突破捐赠者和受赠者,使他们“属于”特定地区?如果是这样,您可以保持该区域内的一致性和可用性,并为主服务器提供最终一致性以进行离线审核。
如果您无法对数据进行分区,可以考虑Percona XtraDB Cluster。我没有任何个人经验,但他们声称可以直接替换MySQL复制,它以分区安全为代价提供一致性和可用性。