编辑:

编辑:

我认为这是提出此类问题的正确地方,但如果我应该去其他 Stack Exchange,请不要责怪我。

无论如何,您认为保持服务器同步的最佳方法是什么?显然,使用类似 Rsync 的东西,但问题是这样的。假设您有两台服务器托管完全相同的文件。您的 A 记录将同一域指向这两台服务器。基本上,我们在这里看到的是一个基本的循环负载平衡设置。

如果您有静态文件,这显然可以正常工作,但用户上传怎么办?假​​设您托管一个简单的基于论坛的网站(如 4chan),并在两台服务器上对其进行负载平衡。假设一个人上传了一张图片,它会被存储在他们的 PC 所连接的服务器上(来自循环 DNS),但就在那一刻,另一个人过来查看该文件,但他们连接到另一台服务器,在文件有时间在两台服务器之间同步之前,他们就只剩下一张损坏的图片了。

我认为解决这个问题的方法是给每台服务器设置一个单独的子域,如果文件尚未同步,则从已有的服务器加载(使用一些神奇的 PHP 代码)。不过我相信一定有更简单的方法。

编辑:

显然,我说的只是托管在几台 VPS 之类的服务器上的小规模内容(这更像是一个假设性问题,将来可能会用到),而不是像 Facebook 和 Google 那样拥有定制技术的大型数据中心

答案1

确保多台机器可以访问相同数据的“最正确”方法是将数据放在所有机器都可以访问的共享文件系统上。NFS 是标准解决方案,但远非唯一选择。

如果您希望坚持使用基于 rsync 的方案,对于小型网站来说,这是完全可行的。避免潜在“数据丢失”问题的最佳方法是保存文件并同步在您发回响应之前,请先将文件上传到另一台机器。这会减慢文件上传响应的速度,但这确实意味着您不会有任何可能性文件数据在之后的请求中无法在任何一台机器上使用——在对上传发出响应之前,客户端无法对资源的存在做出任何假设。同样,在为文件在数据库中创建记录之前,请保存并同步文件,以防止另一个请求(例如,枚举数据库中的条目)在文件可用之前引用该文件。

相关内容