我需要最佳实践来更新我的网站上的一个或多个文件,而不会让它崩溃;
例如,如果我更新 Model.php 文件,上传将需要几秒钟,比如在它替换服务器上的文件之前一两秒,同时,网站会显示一些错误,即找不到 model.php,或者不完整,即使我压制错误,网站最终也会死掉。
最好的做法是什么?
我需要最佳实践来更新我的网站上的一个或多个文件,而不会让它崩溃;
例如,如果我更新 Model.php 文件,上传将需要几秒钟,比如在它替换服务器上的文件之前一两秒,同时,网站会显示一些错误,即找不到 model.php,或者不完整,即使我压制错误,网站最终也会死掉。
最好的做法是什么?
我在实践中经常使用和看到的一种做法是——
使用版本控制系统 (VCS),例如 SVN 或 Git
在实时服务器上,将站点的 Web 根目录作为符号链接,指向包含您网站的最新版本(例如/www/domain.com/r555
)的目录(版本号)。555
当发生更改时,检查对 VCS 的更改
有一个脚本可以检查新目录的最新修订,并带有修订名称(例如,/www/domain.com/r556
)
结帐完成后,更改符号链接并使其指向/www/domain.com/r556
.
如果您有诸如文件上传之类的动态数据以及在 VCS 中无法拥有的动态数据,则会出现一些障碍,但它们都可以在不停机的情况下得到处理。
不过,诸如数据库更改之类的事情可能仍需要某种维护模式。
当您更新产品时,创建一个名为的文件夹1.1
并将新应用程序放入其中(无论是手动还是通过某些 VCS),然后将公共 html 目录符号链接到它。切换将是瞬时的。
这不是一种不常见的方法,因为其中一个好处是如果代码有问题,管理员可以立即符号链接回1.0
文件夹。
另一个好处是将 VCS 标记命名为与文件夹相同的名称,以便可以轻松跟踪正在使用的版本。
使用缓存服务器/应用程序为用户保留可用的缓存副本。清漆就是一个例子。您可以将 Varnish 设置为将内容缓存一段时间,以及在实际网站的服务器不可访问的情况下(Model.php not found
错误和类似情况)的替代时间。
在这种情况下,如果您更新生产系统,Varnish 可以继续提供网站的缓存副本,直到后端重新启动并正常运行(无论是 2 秒还是 2 小时)。只要记住在更新后清除 Varnish 缓存,以防用户的某些东西(UI、内容等)发生变化。
所有的 Web 服务器都有一些可用的缓存功能,但 Varnish 等都是为缓存而设计的。
另一种选择是在HAProxy之类的负载均衡器后面运行同一网站的两个或多个实例。一次更新一个,HAProxy 可以将流量重定向到您当前未更新的那个。
如果您需要有关服务器级缓存或负载平衡的更多信息,请前往服务器故障。