5

是否有优雅升级网站的首选方法?我有一个全新的代码库准备在网站上使用,但更新它需要几个小时。我不希望网站因为“正在升级,尽快回来!”而一直停机。消息,但我也不能在新站点到位时离开当前站点。

我能想到的唯一可能允许优雅升级的方法是使用两台服务器,但这会变得更加昂贵。

4

7 回答 7

10

当您准备好部署时,不会开始计划“优雅地升级您的网站”。它在应用程序设计的早期就开始了。这意味着您必须构建一个可以优雅升级的应用程序,并且还必须具备支持该升级的基础设施。

您提供的细节很少,并且正在向互联网上随机的人提出一个模糊但重要的问题。这让我相信“优雅升级”是最后一刻的担忧(就像 23 分钟前一样)。

你的问题,“有没有优雅升级网站的首选方法?” 只能这样回答,“是的,但我做的方式和你不一样。”

于 2009-10-08T15:41:10.603 回答
1

几个小时太多了,如果数据库中有很多转换,您可以先复制数据库,完成转换,设置新站点(但数据库稍旧),看看自从您使用以来发生了什么变化副本,也将其转换(如果您没有太多更改,应该比大转储更快)并将其插入新数据库。

只是不要忘记备份!

于 2009-10-08T16:09:23.650 回答
1

您可以使用多种策略 - 取决于您愿意为升级投入的时间/资源。

根据您执行迁移的方式,有可能在绝对零停机时间的情况下执行此操作。

您的应用程序/站点越复杂,如果您不希望停机,迁移策略可能就越复杂。

我们通过以下方式实现了零停机迁移:

  1. 使用新版本的站点和数据库设置新服务器。
    • 更改负载均衡器以将流量分成两个池新应用程序和旧应用程序。
    • 配置负载均衡器开始向新应用服务器发送流量,但在旧应用服务器上保留现有会话
    • 新应用程序上的新会话检查客户数据是否已迁移,如果没有 - 快速迁移。
    • 随着负载下降,逐步关闭“旧应用”服务器,升级到新应用,并添加到新应用负载均衡器池。
    • 会话结束时,客户数据将迁移到新数据库。
    • 在负载允许的情况下,将非活动客户数据迁移到新数据库。

当然,这更复杂——因为我们需要在两个环境中保持对客户数据的访问并逐步迁移。

它确实允许我们在发现某些问题时回滚更改 - 例如,在新应用服务器之一上过度使用 CPU 或内存。

对于没有额外服务器预算的较小站点,您可以通过简单地使用多个 IP 地址或某种形式的内部负载平衡软件将请求路由到旧站点或新站点来实现此目的。这会使事情变得更加复杂。

如果您无法在同一数据存储(后端 Web 服务、数据库等)上运行旧应用程序和新应用程序 - 那么您的应用程序需要知道它们需要在旧/新之间同步数据 - 例如在保存/更新客户数据期间,需要在两个位置进行写入。

于 2009-10-08T15:48:04.957 回答
0

如果只是您要升级的数据库,只需新建一个并在准备好后立即切换回来。如果您正在谈论上传代码,请将其上传到另一个目录,并mv在准备好时上传。如果您在开发环境中有类似的设置,这应该不是问题。

您还可以租用非常便宜的服务器,例如每月 20 欧元(kimsufi 或其他东西)的服务器并进行升级。

于 2009-10-08T15:18:44.203 回答
0

我认为,无论您采用哪种方式,都绝对有必要获得您的网络托管和域名提供商的充分合作。

一个粗略的程序是:

  1. 租用具有不同 IP 地址的新服务器,这将是您部署新站点的位置。或者,如果可能,请在您的站点内创建一个公众无法访问的测试子域。
  2. 在新的服务器/子域中部署您的站点。首先使用 IP 或您的子域对您的新站点执行所有必要的测试。
  3. 当您确定一切正常时,首先将问题重定向到您的新服务器/子域。
  4. 将您的 DNS 重定向到新的 IP 地址,或以这样一种方式修复它,使您的主域现在指向子域的原始位置。

理想情况下,甚至没有人会注意到您的站点已关闭,或者如果它有停机时间,它只会持续几分钟。

于 2009-10-08T15:22:16.240 回答
0

听起来你想吃蛋糕。

如果升级是需要几个小时的手动作业,为什么不通过编写作业脚本来加快升级速度。

于 2009-10-08T15:23:01.280 回答
0

这可能是您需要在当前版本中已经“设计”的东西。

是否可以对其进行细分,以便某些部分(例如目录)可用,而其他部分(例如采购)正在升级?

可以使用缓存创建只读版本吗?

或者,一天中的某些时候服务中断是可以接受的吗?周日晚上工作?即使是相当大的网站也有一些维护窗口,在此期间某些功能不可用。

于 2009-10-08T15:27:53.033 回答