我们从最新的基础设施升级中吸取的 4 个教训

已发表: 2022-05-04

基础设施升级。 一个常见的任务,尤其是对于像我们这样的 SaaS 公司,对吧?

好吧,我们的最新版本不是典型的软件升级,因为我们对其进行了一些改动。

主要目标是将我们的软件升级到最新版本,但这次我们在项目中增加了两个步骤 - 减少客户必须列入许可名单的 IP 数量并实现数据库冗余。

虽然大部分更新进展顺利,但我们在此过程中也遇到了一些服务中断。

在接下来的几行中,我们将分享有关我们执行升级的原因、进展情况以及我们最大的学习进展的幕后信息。

让我们开始吧!


为什么我们首先执行升级及其包含的内容

我们了解我们的责任以及 NitroPack 在客户业务成功中所扮演的角色。 这就是为什么确保最佳性能、最高安全标准和 24/7 服务稳定性至关重要的原因。

定期升级我们的基础设施是确保所有这些的众多方法之一。 如前所述,此特定升级分为三个部分:


1.将我们的软件更新到最新的稳定版本

作为基于云的解决方案,NitroPack 为我们的 100,000 多个客户站点所做的所有优化都是在我们的基础架构上执行的。 目前,我们使用 100 多台服务器来运行该服务。 通过此更新,我们必须将协调我们的服务器机群的软件升级到最新的稳定版本。


2. 减少客户必须列入许可名单的 IP 数量

简而言之,我们的 IP 许可列表过程对用户不友好。

在更新之前,我们的客户必须将 40 多个 IP 地址列入许可名单,这些 IP 地址为 NitroPack 向客户站点提供的传出流量(请求)提供服务。 最重要的是,这些 IP 不是固定的,这意味着当我们的一台服务器退役时,一个新的服务器会出现一个不同的 IP 地址。

这个生成新 IP 的过程要求我们的客户定期将几十个新地址列入白名单,以便 NitroPack 成功优化他们的网站。

更新后,我们的客户只需要将三个固定的、永不更改的 IP 列入许可名单。


3.实现数据库冗余

长期以来,我们希望实现数据库冗余,因为它可以提高 NitroPack 网站和仪表板的整体性能,并且我们将能够增强服务安全性。 此外,此更新将使我们能够以零停机时间执行未来的数据库升级。

考虑到这些目标,我们将过程分为两个步骤,在两者之间留出一天的时间,所以我们有很多喘息的机会:

第 1 步:(11 月 4 日):减少 IP 数量
第 2 步:(11 月 6 日):数据库冗余和服务器软件更新

但并非一切都按照我们的预期进行。


什么没有按计划进行

尽管我们做了充分的准备,但我们在所有三个更新中都遇到了一些意想不到的问题。 这是发生的事情:

问题 #1:IP 更新过程中的连接问题

11 月 4 日,我们计划执行初步服务更新,旨在减少 NitroPack 传出流量的 IP 地址数量。

Т他最初的版本有一个内部软件错误,不允许我们的服务在某些情况下创建传出连接。 不幸的是,这个问题只在我们的基础设施遇到高峰流量情况时出现。 这就是为什么我们在初始测试期间没有在暂存环境中检测到问题的原因。 连接问题导致 NitroPack 无法可靠地执行传出优化,并且我们的一些客户经历了几个小时的服务不稳定。

好消息是,我们的开发团队通过更新 HTTP 客户端的软件,设法迅速缓解了这个问题。


问题 #2:数据库备份花费的时间比估计的要长

当我们在 11 月 6 日开始处理数据库冗余时,我们很快发现它需要的时间比计划的要长得多。 这迫使我们在一天后推送服务器软件升级。

但这是出于好意。 首先,我们希望在备份数据库时非常谨慎,这样我们就可以毫无问题地执行冗余。


问题 #3:服务器错误减慢了软件升级过程

当我们在 11 月 7 日开始部署服务器软件升级时,一小部分(不到 1%)的服务器开始抛出意外错误,最终导致无法部署更新并减慢了整个过程。 没有办法自己解决问题,我们被迫将其上报给我们的服务器提供商。

虽然这看起来像是一个小问题,但考虑到任务的规模,这个意外错误导致一小部分(不到 2%)的 NitroPack 客户经历间歇性的短暂服务停机。


问题 #4:意外的 502 CDN 错误导致服务不稳定

当我们认为我们已经完成升级时 - 我们的监控系统开始记录频繁出现的 CDN 错误,HTTP 状态代码为 502。

不幸的是,该错误影响了我们所有的客户,导致 CDN 资源交付不稳定几天。 在检查了问题后,我们发布了一个软件更新,永久修复了服务的不稳定性。

一旦 NitroPack 的一切工作正常,我们就召开了一次回顾会议,根据我们从这次基础设施升级中获得的经验,回顾我们未来可以改进的地方。

我们正在采取的措施以确保将来不再发生同样的问题

总的来说,我们为整个升级的进展感到自豪。 我们偶尔会遇到服务不稳定的情况,但这是可控的,我们成功避免了整个客户群的整个服务停机。

然而,我们知道,拍拍自己的后背并完全专注于正确的事情不会推动我们作为一家公司和服务向前发展。

这就是为什么我们要传达我们将实施的改进,以便以更有效的方式执行未来的升级。 以下是要点:

可进行压力测试的暂存环境

这将使我们能够检测仅在具有数万个请求的大容量情况下发生的错误。 例如,这将帮助我们提前识别 HTTP 客户端和可重用连接问题,并且我们将能够在不中断的情况下执行 IP 更新。


更好的监控和警报系统

根据此次升级过程中出现的问题,我们能够确定我们缺乏监控和警报的区域。 好消息是我们已经为这两个区域进行了配置。


更好的跨团队协作和更积极的客户沟通

由于参与升级的各个团队彼此之间的同步并不理想,我们觉得我们无法主动及时地与现有客户沟通升级进度。 我们有我们的 status.nitropack.io 页面,所以每个人都可以关注升级过程中发生的事情,但这还不够。

下一次,我们将通过社交媒体、电子邮件、仪表板和网站等尽可能多的渠道传达升级进度!


与我们的服务器提供商更好地协调

对于未来的更新,我们将努力与我们的服务提供商更好地协调,以确保及时解决意外问题。 这将帮助我们更有效地处理不可预见的服务器错误。

最后,我们要感谢所有客户的耐心和理解。 您的信任是我们不断改进服务的动力。