2

我有一个使用 MySQL 存储数据的网络应用程序。Web 应用程序是内部的(不能通过 Internet 获得)。

我现在必须在 3 个(可能更多)位置(分支机构)部署此应用程序。他们需要能够同步数据(在一个位置创建的条目在其他分支位置可用)。

要求

  • Web 应用程序的本地实例 + mysql 数据库
  • 每个位置在本地读写/在自己的网络上
  • 数据库每天同步一次(可能通过脚本通过 SSH),以便每个位置都有相同的数据。

我能够解决这个问题的唯一方法(到目前为止)是创建 UUID(唯一标识符)并使用源位(用于原始位置)和同步位(new=0,synced=1)对每一行进行编码然后编写一个脚本,在其中我每晚通过 SSH 连接到每个位置,并将 = my source 和 synced=0 的行添加到每个位置...我意识到这很粗鲁,而且不是很优雅/可靠,但我不知道还能做什么。

客户担心如果互联网连接失败,他希望应用程序能够在本地运行,但仍然在其他分支之间保持同步(通过夜间脚本或其他方式)。正如我所说,已经有 3 个地点,今年晚些时候可能还会有更多。

任何有关架构的建议将不胜感激。

PS。由于安全问题,我没有将数据库连接到互联网。但我愿意接受所有建议。

谢谢。

4

1 回答 1

1

通过这样的架构决策,您的客户可能会在额外的硬件、开发和维护成本上花费大量金钱。除非他们有关键任务数据输入需求,否则在所有分支机构位置复制硬件堆栈可能有点疯狂。

话虽如此,他们仍然需要在开放的互联网上移动数据以将数据从服务器复制到服务器,除非他们当然有自己的 VPN,您将在其中进行设置。尝试进行一些日常流程来迁移/合并数据应该是您心中的一个危险信号,并且完全不是初学者。这是一个非常复杂的问题。您可能需要的是某种主-主数据库复制集群。幸运的是,MySQL 为您提供了执行此操作的能力。不幸的是,设置和正确设置可能很复杂,如果您不得不在这里提出这个问题,这对您来说可能有点挑战。

就数据库安全而言,只要您采取适当的预防措施来保护服务器,您就不必担心将 MySQL 数据库托管在 Internet 上。这可能会从网络级别开始,只允许访问端口 3306(和 22 用于 SSH 访问)并且只允许访问 Web 应用程序服务器的 IP 地址。这还包括将 MySQL 用户帐户设置为仅接受来自您将要访问的特定已知主机的流量。

于 2013-03-26T22:02:56.257 回答