将常见Web应用程序代码分享给许多Web服务器的最佳方式是什么?
例如,我有一个包含用PHP编写的Web应用程序的目录。 现在,我有多台机器可以提供相同的内容,每台机器运行一个networking服务器,使用TCP / IP均衡器进行负载平衡。
我还没有尝试过这种情况下的NFS。 但是根据慢速NFS传输小文件的性能,由于涉及很多[小]文件,传输性能会很慢。
编辑:我想集中存储在一个位置的所有文件,所以更新到代码将由web服务器立即读取。
我将概述几个选项,以通过NFS方法显示实时代码的替代scheme 。
“最佳”策略取决于您select的代码部署策略,可能是其中之一:
“最佳”策略还取决于应用程序的可用性要求:
除上述选项外,我会亲自select软件包部署方法。 但是,对于Web请求,通过NFS共享less量文件可以很好地工作:与Internet相比,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和保险丝。