正常运行时间长的服务如何在不重新启动的情况下应用补丁?

信息安全 更新 打补丁
2021-08-31 03:36:33

如何在您无法重新启动但更新需要重新启动的系统上安装关键安全更新。例如,需要以零停机时间 24x7 运行的服务/企业,例如 Amazon.com 或 Google。

4个回答

不同操作系统中有各种实用程序允许对正在运行的代码进行热修补。这方面的一个例子是Linux 的kpatchlivepatch特性,它们允许在不中断运行的情况下修补正在运行的内核。它的功能有限,只能对内核进行微不足道的更改,但这通常足以缓解许多关键的安全问题,直到找到时间进行适当的修复。这种技术一般称为动态软件更新

我应该指出,几乎没有停机时间(高可用性)的站点由于实时补丁而不是那么可靠,而是因为冗余。每当一个系统出现故障时,都会有许多备份到位,可以立即开始路由流量或处理请求,没有延迟。有大量不同的技术可以实现这一点。冗余级别提供了以为单位的大量正常运行时间。三九正常运行时间为 99.9%。四个九的正常运行时间是 99.99%,等等。“圣杯”是五个 9,即 99.999% 的正常运行时间。由于冗余备份系统遍布全球,您列出的许多服务具有五九可用性。

我观看了 Netflix 员工在安全会议上的演示。他们根本不打补丁。相反,当需要补丁时,它们会建立新实例,然后清除未打补丁的实例。他们几乎一直在这样做。他们称之为红黑部署

简短的回答是:

他们确实重新启动。

您似乎假设亚马逊和谷歌在单个服务器上运行,如果重新启动,整个站点/服务就会关闭。这与事实相去甚远——大型服务通常运行在许多并行工作的服务器上。如需进一步阅读,请查看集群负载平衡故障转移等技术。

例如,谷歌在全球拥有十几个数据中心,每个数据中心都拥有大量服务器(估计每个中心有 100,000-400,000 台服务器)。

在此类环境中,更新(功能更新和安全更新)通常作为滚动部署安装:

  • 选择一些服务器子集
  • 在子集上安装更新
  • 重新启动子集;同时其他服务器接管
  • 重复下一个子集:-)

还有其他选项,例如热补丁,但根据我的经验,它们的使用频率并不高,至少在典型的大型网站上没有。有关详细信息,请参阅森林的答案。

您可以检查“软件部署”下的“部署活动”。一种常见的方法是在您的服务前面使用负载均衡器并相应地重定向流量。在一种称为“蓝绿部署”的技术中,您将流量从“蓝”服务器重定向到“绿”服务器。这没有任何用户端停机时间,当然前提是应用程序可以正确处理这个问题,例如通过无状态服务。

假设您的应用程序在蓝色服务器上运行 v1,并且您的负载均衡器将流量导向那里。您可以将绿色服务器(不接收任何流量)升级到 v2。然后,您重新配置负载均衡器以将流量定向到绿色服务器。因此,您已从 v1 升级到 v2,无需停机。

您也可以使用蓝绿技术作为测试的一部分。例如,您将负载均衡器配置为将 95% 的流量引导至蓝色服务器 (v1),将 5% 的流量引导至绿色服务器 (v2)。通过这种方式,您可以在更少的流量下测试您的新版本,并且在出现错误时对用户的影响更小。