将常见的Web应用程序代码分享给许多Web服务器

将常见Web应用程序代码分享给许多Web服务器的最佳方式是什么?

例如,我有一个包含用PHP编写的Web应用程序的目录。 现在,我有多台机器可以提供相同的内容,每台机器运行一个networking服务器,使用TCP / IP均衡器进行负载平衡

我还没有尝试过这种情况下的NFS。 但是根据慢速NFS传输小文件的性能,由于涉及很多[小]文件,传输性能会很慢。

编辑:我想集中存储在一个位置的所有文件,所以更新到代码将由web服务器立即读取。

我将概述几个选项,以通过NFS方法显示实时代码的替代scheme

“最佳”策略取决于您select的代码部署策略,可能是其中之一:

  • 在实时系统上进行编辑 – 在一个中心位置开发人员更改/更新应用程序,实时机器然后select更改(听起来像您的scheme)
  • 源代码导出代码 – 开发人员对源代码pipe理系统进行更改,然后运行程序将代码导出到负载平衡池中的所有机器上(或等待机器自行执行更新)
  • 通过软件包系统部署的代码 – 开发人员对源代码pipe理系统进行更改,并创build存储库中的软件包(例如,通过APT或YUM)。 开发人员运行一个程序来强制负载均衡的机器从存储库安装新的软件。

“最佳”策略还取决于应用程序的可用性要求:

  • 理论上100%的正常运行时间 – 应用程序在进行软件更新时仍然可用(使用您build议的方法,但要注意primefaces性问题:在更新期间,您的PHP应用程序可能会包含新旧文件的混合)
  • 定期维护接受 – 软件更新时,应用程序会暂时脱机(无primefaces性问题)

除上述选项外,我会亲自select软件包部署方法。 但是,对于Web请求,通过NFS共享less量文件可以很好地工作:与Internet相比,NFS引入的延迟很小。 但是在你这样做之前,考虑一下缺点:

  • 考虑哪些系统资源是平衡的:如果您使用多台机器来平衡CPU使用率,那么设置可能会正常工作。 但是,如果您使用多台机器来平衡IO,那么通过NFS(或其他方式)将其移动到一台机器上可能并不明智。
  • 考虑文件服务器的失败:如果持有这些文件的机器不存在,它可能会使整个应用程序脱机(因为networking服务器无法读取文件)。 在这种情况下,networking服务器往往会locking等待,NFS恢复。

由于这些可能的障碍(IO绑定的文件服务器,Web服务器的故障),我还build议定期同步应用程序的Web服务器。 推动更改几台机器应该只需要几秒钟。 如果需要,你可以设置一些逻辑,如:if(time()> 23:59:00){在软件B中使用软件} else {在软件A中使用软件})。 如果所有机器都必须运行相同的软件版本,例如,如果您刚刚更改了数据库模式,这可能会很有用。

在部署过程中几秒钟的延迟真的不是太糟糕。 在现场系统上工作的开发人员肯定会注意到延迟,但开发人员不应该编辑实时系统。

如果其内容不变,那么任何传输方法都会做,甚至NFS。 如果你先打开文件然后解压缩它们,传输速度将会非常快。

当然,如果您需要定期传输大量小文件,那么您可能没有任何解决scheme – 您的Web服务器将始终与最新的文件(或更糟,所需的文件)过时。

如果你想设置一种方式来部署文件到中央服务器,然后让他们自动转移到其他人,你可以设置一个rsync传输到服务器,那么只有你更改的文件将被转移(如果你使用rsync守护进程,它将使用rsync的协议,并且几乎不需要任何时间,所有可能的秒数)。

别人使用的一个好方法是将networking文件存储在版本控制系统中,然后使用它将文件导出到其他服务器,然后您只需更新文件,而vcs将用新版本replace已更改的文件。

顺便说一下,NFS对于小文件来说不是太好,但是没有别的。 这个问题比networking延迟更重要。 这还不应该让你使用它,除非你有一堆文件传输,它不会太慢,使用。 你可以尝试使用CIFS传输,而不是NFS,我为我的Windows服务器这样做,因为我有更好的大型文件的性能。

Arie,我的webdev公司拥有大量由我们的网站共享的图书馆。 这些站点运行在不同数据中心的less量生产服务器上。

由于服务器位于不同的数据中心,因此我们无法从单个集中的低延迟位置提供这些库。 相反,我们使用Webistrano(优秀的Capistrano部署工具的graphics用户界面)将库部署到所有服务器,直接从我们的SVN回购。 Capistrano同时部署到所有服务器,只有在所有服务器成功部署后,才会切换符号链接指向新的部署目录。 否则,它将在所有服务器上进行回滚。

换句话说,更新是在几乎相同的时间在所有服务器上执行的,或根本不执行。 交易或primefaces或任何你想调用它。

我们在部署脚本最后的任务是正常重启Apache,以刷新所有已存储前面path的PHPcaching(real_path,Zend Framework等)。

它工作得很好,非常安全,而且由于所有文件都存储在本地服务器上,因此延迟非常低。 这也很容易 只需点击在Webistrano部署。

你可以看看sshfs。 基本上你会有一个中央位置,其他服务器挂载为本地文件夹。

例如(将服务器安装为目录)。

sshfs server.with.content:/home/arie/local_folder 

现在,您可以像访问本地文件夹一样访问其他服务器。 额外的好处是数据传输是encryption的。

谷歌sshfs和保险丝。