跨区域/区域保持数据库同步(写入/更新后)



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

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

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

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

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

  • PosgreSQL通过pg_cluster https://wiki.postgresql.org/wiki/PgCluster 支持它
  • MySQL https://www.howtoforge.com/mysql_master_master_replication

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

  • https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
  • https://dev.mysql.com/doc/refman/8.0/en/replication.html

同步主-主复制将非常慢,尤其是在多区域方案中,因此您可以考虑其他技术:

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

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

复制技术绝对值得一看,但复制可能会有一定的技术开销和成本。我在一家名为Redactics(https://www.redactics.com(的公司工作,我们想出了一个更简单的解决方案,这是一种基于增量更新的近实时复制,使用纯SQL方法。

这两种方法肯定都有优点和缺点,如果这不是最适合您需求的解决方案,我不会试图努力推动 Redactics,但 Redactics 只是跟踪最新的主键并使用修改时间戳来查找新的和更改的记录,然后将它们复制过来。您可以经常运行同步而不会产生大量负载,因为它只是一个增量更新。显然,任何工作流都可能中断,但修复中断的复制可能很棘手,因此我们喜欢这种方法,并在您自己的基础结构中运行这些同步工作流。

相关内容

  • 没有找到相关文章

最新更新