在 regions/zones 之间保持数据库同步(在 write/update 之后)

keeping databases in sync (after write/update) across regions/zones

我必须在 php 中编写一个网络服务以在三个不同的区域/(城市或国家)提供服务。每个区域都有自己的机器 运行 每个 Web 服务背后的这个 Web 服务实例是一个数据库,它在每个区域都是准确的 clone/copy,Web 服务使用数据库中的数据为客户端提供服务。多个 Web 服务实例的主要原因是分布客户端负载。

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

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

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

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

但在立即实施之前,我建议您阅读更多有关不同类型的复制及其优缺点的信息:

同步Master-Master复制会很慢,尤其是在多zone场景下,所以你可以考虑其他技术:

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

有一本关于不同分布式技术(包括分片和复制)的好书 - "Designing Data Intensive Applications" Martin Kleppmann 着。