我有一个使用MySQL存储数据的网络应用程序。 网络应用程序是内部的(不能通过互联网获得)。
我现在必须在3个(可能更多)位置(分支机构)部署此应用程序。 他们需要能够同步数据(在一个位置创建的条目在其他分支位置可用)。
要求
我能够解决这个问题的唯一方法(到目前为止)是创建UUID(唯一标识符)并使用源位(用于始发位置)和同步位(new = 0,synced =)对每一行进行编码1)然后写一个脚本,我每晚SSH到每个位置,并添加行=我的源和synced = 0到每个位置......我意识到这是粗野的,不是很优雅/可靠,但我不知道还有什么其他的做。
客户担心如果互联网连接失败,他希望该应用能够在本地运行,但仍然可以在其他分支之间进行同步(通过夜间脚本或其他方式)。正如我所说,今年晚些时候总共有3个地点,可能还有更多。
任何关于建筑的建议都将受到赞赏。
PS。出于安全考虑,我没有将数据库连接到互联网。但我愿意接受所有建议。
感谢。
答案 0 :(得分:1)
通过这样的体系结构决策,您的客户可能会在额外的硬件,开发和维护成本上花费大量资金。除非他们有关键任务数据输入需求,否则在所有分支位置复制硬件堆栈可能会有点疯狂。
话虽这么说,他们仍然需要在开放的互联网上移动数据,以便将数据从服务器复制到服务器,除非他们拥有自己的VPN,您将在其中进行设置。试图让一些日常流程来迁移/合并数据应该是你心中的一面红旗,而且总是非首发。这是一个非常复杂的问题。您可能需要的是某种master-master数据库复制集群。幸运的是,MySQL为您提供了执行此操作的能力。不幸的是,设置并使其恰到好处可能很复杂,如果您不得不在这里提出这个问题,可能会对您构成一些挑战。
就数据库安全性而言,只要您采取适当的预防措施来保护服务器,就没有任何理由认为您应该关注在互联网上托管MySQL数据库。可能会从网络级别开始,只允许访问端口3306(和22访问SSH),并且只访问Web应用程序服务器的IP地址。这还包括设置MySQL用户帐户以仅接受来自您将访问的特定已知主机的流量。