购买Express VPN
享受全球加速服务

ExpressVPN的“许可证过期”应用程序错误:实际发生了什么?

我们向受影响的用户道歉

在2017年6月29日星期四,我们遇到一些技术问题,导致一些客户在ExpressVPN应用程序中错误地看到“许可证过期”消息。受影响的客户需要注销并重新登录到应用程序以重新获得对VPN的访问权限。

这个帖子解释了导致问题的原因,以及我们为避免重复发生的事件而采取的步骤。

什么地方出了错?“许可证已过期”错误时间表:

  • 我们为管理VPN基础架构的系统部署了一个配置更新。此更新包括传递给下游系统的不准确的数据。
  • 任何名为我们的API刷新其数据的ExpressVPN应用程序都收到无效信息。一些应用程序将其解释为“许可证过期”状态,而其他应用程序以未定义的方式执行。
  • 我们的一个自动化监控系统在1分钟内注意到了这个问题。
  • 有些客户在他们的应用程序中意外遇到“许可证过期”消息。受影响的客户通过聊天和电子邮件与我们联系,支持小组在几分钟内意识到发生意外的问题,并提醒工程团队。
  • 问题发生30分钟后,工程师发现并解决了根本原因。
  • 我们已将更新的配置部署到受影响的系统
  • 支持小组向受影响的客户解释了解决办法:解决方案是注销并重新登录应用程序。

系统图

要了解根本原因和后续行动,以下是受影响系统的体系结构的简化版本:

ExpressVPN应用系统图。

为什么“许可证过期”发生错误

级联故障发生在:

  • 后端系统:下游系统将数据解释为格式,但与客户无关。虽然我们自动测试我们的系统,但测试没有注意到这个问题,因为它与环境特定的配置数据有关,我们没有考虑到测试。
  • API服务器:服务处理无效数据,并决定没有可用的客户基础架构。
  • 我们的应用程序:刷新数据时,我们的应用程序将空列表解释为“用户许可证已过期”。不幸的是,这是一个很差的设计决定,从几年前,当我们构建了一个功能的批量打折。

综上所述:

原因是在很少使用的功能中是错误配置和脆弱设计组合。不幸的是,该错误触发了为很少使用的批量折扣功能保留的状态,从而影响了大量客户。

我们采取的后续行动是为了防止这些问题重新出现

  1. 我们正在将我们的应用更新到:
    • 更改“许可证到期”状态的定义。只有当存在特定的错误代码而不是数据不存在时,应用程序才会输入许可证过期状态。
    • 改善质量数据的定义。忽略不完整的数据,稍后再试。
  2. 在创建无效数据的后端系统中,我们是:
    • 添加集成测试以包括生产中使用的配置数据。这些测试必须在新版本的软件或配置数据投入生产之前通过。
    • 改变我们对配置数据工作流的管理。无效配置的一个原因是因为配置数据被加密,这使得开发人员更难检查。ExpressVPN使用一个名为Ansible的系统来管理和加密配置。单独的博文将描述我们管理加密配置数据的新做法。
  3. 在将数据传递给客户端应用程序的API服务器中,我们将添加一个功能来验证数据的质量。如果数据不符合某些标准,包括大小和完整性,系统将忽略更新并提醒负责的工程师。
  4. 我们将对我们的开发过程进行调整,以实现新功能:
    • 确保所有国家都被积极地界定。
    • 确保集成测试还包括生产环境的配置数据。
    • 自动化和监控的测试计划。除了测试代码的功能准确性,我们还将检查数据的质量。

ExpressVPN想向受过期许可证问题影响的客户道歉。我们急于从这些错误中吸取教训,我们为支持团队感到自豪,可以很快地注意并回应此问题。

ExpressVPN:安全、快速、30天退款保证

立即购买