11

我需要最佳实践来更新我的网站上的一个或多个文件,而不会让它崩溃;

例如,如果我更新 Model.php 文件,上传将需要几秒钟,比如在它替换服务器上的文件之前一两秒,同时,网站会显示一些错误,即找不到 model.php,或者不完整,即使我压制错误,网站最终也会死掉。

最好的做法是什么?

4

3 回答 3

12

我在实践中经常使用和看到的一种做法是——

  • 使用版本控制系统 (VCS),例如 SVN 或 Git

  • 在实时服务器上,将站点的 Web 根目录作为符号链接,指向包含您网站的最新版本(例如/www/domain.com/r555)的目录(版本号)。555

  • 当发生更改时,检查对 VCS 的更改

  • 有一个脚本可以检查新目录的最新修订,并带有修订名称(例如,/www/domain.com/r556

  • 结帐完成后,更改符号链接并使其指向/www/domain.com/r556.

如果您有诸如文件上传之类的动态数据以及在 VCS 中无法拥有的动态数据,则会出现一些障碍,但它们都可以在不停机的情况下得到处理。

不过,诸如数据库更改之类的事情可能仍需要某种维护模式。

于 2013-03-31T18:25:35.910 回答
2

当您更新产品时,创建一个名为的文件夹1.1并将新应用程序放入其中(无论是手动还是通过某些 VCS),然后将公共 html 目录符号链接到它。切换将是瞬时的。

这不是一种不常见的方法,因为其中一个好处是如果代码有问题,管理员可以立即符号链接回1.0文件夹。

另一个好处是将 VCS 标记命名为与文件夹相同的名称,以便可以轻松跟踪正在使用的版本。

于 2013-03-31T18:25:16.673 回答
0

使用缓存服务器/应用程序为用户保留可用的缓存副本。清漆就是一个例子。您可以将 Varnish 设置为将内容缓存一段时间,以及在实际网站的服务器不可访问的情况下(Model.php not found错误和类似情况)的替代时间。

在这种情况下,如果您更新生产系统,Varnish 可以继续提供网站的缓存副本,直到后端重新启动并正常运行(无论是 2 秒还是 2 小时)。只要记住在更新后清除 Varnish 缓存,以防用户的某些东西(UI、内容等)发生变化。

所有的 Web 服务器都有一些可用的缓存功能,但 Varnish 等都是缓存而设计的。

另一种选择是在HAProxy之类的负载均衡器后面运行同一网站的两个或多个实例。一次更新一个,HAProxy 可以将流量重定向到您当前未更新的那个。

如果您需要有关服务器级缓存或负载平衡的更多信息,请前往服务器故障。

于 2015-01-28T07:27:45.340 回答