首页 > 解决方案 > 跨区域/区域保持数据库同步(写入/更新后)

问题描述

我必须在 php 中编写一个 web 服务来服务于三个不同的区域/(城市或国家)。每个区域都有自己的机器来运行这个 Web 服务实例,每个 Web 服务后面都是一个数据库,在每个区域中都是精确克隆/复制的,Web 服务使用来自 db 的数据为客户端提供服务。多个 Web 服务实例的主要原因是分配客户端负载。

客户端可以通过 Web 服务 API 进行读写调用。写入调用将修改该实例的数据库,但必须尽快将此更改应用于其他区域中的所有数据库,因为每个区域中的所有数据库都是克隆和精确副本,因此必须同步一个数据库中的所有更改其他区域的数据库。

我认为写调用必须转到某种主服务器,该服务器在所有 Web 服务等之间进行协调。但我确信这种模式很常见,并且已经有一些解决方案。

请告知是否有任何数据库或应用程序级别的技术可以在有写入调用时保持数据库同步,以便修改或添加反映在 db 的所有实例中?我可以选择我喜欢的数据库,但主要选择是 mysql 服务器或 postgres,但可以更改为其他可以解决此问题的数据库。

标签: databasedistributedscalable

解决方案


你是对的,这种模式很常见,并且有一个名字——同步主主复制。大多数现代 RDBMS 都支持它:

但在立即实施之前,我建议阅读更多关于不同类型的复制,它们的优缺点:

同步 Master-Master 复制会很慢,尤其是在多区域场景中,因此您可以考虑其他技术:

  • 异步复制
  • 分片/分区
  • 分片和复制的混合

有一本关于不同分布式技术(包括分片和复制)的非常好的书 - Martin Kleppmann 的“设计数据密集型应用程序”。


推荐阅读