以声速连续配置

post-thumb

自COVID-19大流行开始以来,我错过了许多事情,其中之一是观看现场音乐的激动。没有什么能比得上感受、听觉和观看现场演奏的音乐。观众和表演者之间的实时互动将伟大的音乐提升到令人愉悦的程度。无论是哪种类型的表演,作为一名表演者,需要多年的技巧和经验来知道如何进行令人难忘和独特的现场表演。

随着音乐场馆重新开放,我最近得以在阿姆斯特丹皇家音乐厅观看乔伊斯·迪多纳托的演出。她由钢琴家克雷格·特里(Craig Terry)伴奏。就像我最近的大部分经历一样,我忍不住从开发者的角度去思考这场音乐会。必威体育精装版app官网

作为一个团队,迪多纳托和特里调整了他们的表演元素。乐谱是一个良好的起点,但通过增加小即兴创作和繁荣,延长独奏,并改变节奏回应群众的反馈,他们使用这些变化提升其性能,创建时刻活在观众的记忆。

作为建设者,我们可以从表演者和现场活动中学到一些东西。编写性能良好、无错误的代码是必要的第一步,但应用程序应该被认为是动态的、有生命的东西,可以适应并实时地对服务故障、需求高峰和稳定状态的变化等事件作出反应。实现这种适应性的关键是使动态更改配置变得简单而安全,这样调整应用程序的行为就像按下一个按钮一样简单。

Amazon.com就是一个很好的例子。Prime Day是一个重大的现场活动,它带来了规模和吞吐量方面的挑战,需要动态技术堆栈,能够实时做出反应,以满足客户的需求。但与DiDonato和Terry的音乐会二人组不同,实时调整为Prime Day这样的活动提供动力的系统,需要亚马逊内部数百个组织的数千名开发人员的协调和投入。必威体育精装版app官网

做事的老方法

在亚马逊的早期,对电子商务代码库进行更改是复杂、缓慢的,而且充满了危险。单个更改将需要对单个单片可执行文件进行完整的重新部署。该可执行文件的大小超过十亿字节,需要花费一天的时间来编译。在代码库中的更改和看到产品中的影响之间有很长的时间,因此很难将两者关联起来。多年来,随着Amazon的扩展和发展,这种缓慢的软件部署过程成为了一个瓶颈,限制了我们为客户交付特性和应用程序改进的速度。为了解决这个问题,我们打破了整体,转向面向服务的设计。这使得团队能够更快、更频繁地发布功能,并减少了对单个服务的更改范围。随着所有权的转移,需要单个团队来管理其服务的部署和操作,从而产生了许多与我们今天使用的CI/CD管道类似的简化流程和过程。

此时,配置仍然直接在应用程序的代码库中进行管理,这使得更改变慢,并且仍然需要重新部署服务或重新启动服务以采用新的配置。很明显,尽管CI/CD实践和技术解决了许多部署挑战,但仍然缺乏快速修改应用程序行为的能力,特别是在响应动态活动环境方面。该功能对于实现像Amazon.com这样的系统的可用性需求是必要的。

我们意识到代码发布仅仅是开始,如果我们想要更快地发展,我们需要开发三个功能:必威体育精装版app官网

  1. 能够快速存储和更新配置数据,与代码部署分开;

  2. 让应用程序从外部服务获取配置的能力;

  3. 为安全检查和验证配置的能力。

为了实现这些目标,我们开始构建一个集中式的动态配置管理系统,该系统可以使跨Amazon的团队快速、可靠地存储和获取应用程序配置。这个系统使Amazon的团队能够将配置值从应用程序代码中分离出来,并在配置更改时对配置更新做出响应,从而消除了长时间重新部署和重新启动应用程序以改变行为的需要。

配置与应用程序代码分开管理并在运行时连续查询的过程,我们称之为连续配置(CC),这对我们在实时适应和反应的同时保持高可用性的能力产生了根本性的影响。随着集中式系统和CC流程在Amazon中越来越出名,团队开始使用它来构建各种大型系统,包括AWS。2019年,我们宣布AWS AppConfig作为AWS系统管理器中的一项功能,以便客户在实现自己的连续配置实践时,也能从我们学到的经验中受益。

CC,又是一个缩略语?

随着Amazon的发展,外部开发人员在很长一段时间内一直在使用应用必威体育精装版app官网程序配置来改变他们的软件行为。但一般来说,这种配置在本质上是静态的,公司仍然使用过时的技术,不能让他们最好地服务客户。配置在应用程序初始化时加载,然后保持不变,直到应用程序重新启动。另外,一些客户还设法从其他地方(Amazon S3或某处的数据库条目)获取这些配置细节。betway88体育官网虽然这对一些人来说是可行的,但这些自定义解决方案实现经常面临延迟、可伸缩性、易用性等方面的限制。

真正的动态配置是不同的。配置真相的来源存在于一个独立的配置管理系统中,并由消费应用程序进行轮询。这些配置值是工程师预计在未来需要容易更改的,或者可能根据特定的系统条件而变化,即使他们不知道具体的时间。这些值通常分为两组:修改应用程序的操作行为(如节流、限制、连接限制或日志记录冗长)的值和控制FAC(特性访问控制)的值,包括特性标志、A/B测试和用户允许/拒绝列表。

持续配置是在运行时更新这些动态配置值的过程,所有这些都不需要部署新代码或重新启动应用程序。它也是在整个应用程序中使用部署策略以可控的方式推出这些更改的实践。

通过构建AppConfig,我们了解了很多关于如何很好地进行连续配置以及如何避免它可能带来的一些问题的知识。例如,您需要能够在不影响应用程序可用性的情况下部署配置更改。因此,AppConfig可以验证配置数据以确保它在语法和语义上都是正确的。这意味着意外的无效或不完整的数据输入不会产生灾难性的影响,比如导致应用程序不可用。

还有其他的备用机制可以确保错误不会像滚雪球一样变成灾难。例如,AWS AppConfig允许您仅将配置更改部署到一小部分用户,以便在发布配置更改之前分析配置更改的影响,因此您可以在出现问题时限制爆发半径。我们还为团队构建了一种机制,以便在部署没有按照预期进行时发出警报,并轻松地回滚到以前的版本。

功能的访问控制

特性标志是连续配置的常见用例。它们允许开发人员几乎立必威体育精装版app官网即发布新的终端用户功能,而不需要重新部署整个应用程序的操作风险和时间成本。

这种功能的一个常见用例是,在精确的时间内为发生的事件交付应用程序更改,与尝试重新启动整个应用程序或依赖DNS切换相比,CC系统中的配置更改要小得多、快得多、可靠得多。作为一个例子,一个客户产生一个电视节目可以使用AppConfig来管理观众参与,所以投票的用户界面可以显示在移动应用在非常时刻,电视主持人宣布“投票现在开放”最新的真人秀和关闭所有用户尽快完成。

在AWS,我们在启动服务时使用AppConfig。当一项新服务处于开发阶段时,它通常会在发布前进入生必威体育精装版app官网产阶段,内部用户和一些合作伙伴有权提供反馈或制作发布材料。我们通过一个持续配置系统管理的允许列表来添加这些用户。当服务启动时,例如遵循re:Invent的公告,我们更改配置,使服务对所有帐户可用,而不仅仅是allowlist上的帐户。当新特性进入预览版时,与同时管理应用程序的独立稳定beta版本构建相比,使用允许列表管理单个生产部署要容易得多。

您可能会认为这些用例可以简单地使用数据库开关或一些内存中的标志来解决这个问题,但根据我们的经验,编写配置系统是复杂的,特别是在可伸缩的情况下。我们学到的一件事是分析内部错误更正(COE)在过去的几年中,配置更改导致的宕机率与代码更改的宕机率大致相同。在解决中断问题时,当压力级别较高时,就会对配置进行手动更改,这进一步增加了更改中出现错误或尝试回滚的风险。在变化最关键的时刻,当你的手通常是最颤抖的时候,验证系统和护栏可以帮助你获得手术般的精确度。

期待

就像CI/CD减少了对部署的恐惧一样,连续配置减少了对更改配置的恐惧。通过定期锻炼这种能力,我们可以建立信心,并开始实现自动化。AppConfig在这种自动化中构建。例如,如果您创建了一个CloudWatch Alarm,它对应用程序执行健康检查,那么您可以让AppConfig监视该告警。然后,在配置更改的部署过程中,如果CloudWatch Alarm进入告警状态,则部署将回滚。

我认为这就是连续配置开始改变我们操作方式的地方。通过使改变配置变得更容易和更安全,我们正在使配置民主化。像AppConfig这样的连续配置系统的一个不明显的好处是,它们可以提供正确的保护屏障,使更广泛的产品涉众能够自服务于应用程序行为的更改。从想要扩大数据库连接数量的初级工程师,到想要将客户添加到beta服务访问的产品经理,再到想要修改a /B测试的实验群组划分的用户体验设计师,服务所有权的民主化有助于消除操作工程师对生产应用程序的所有更改的瓶颈。

或者,也许我们能够安全地将某些表盘和开关交给商业智能或数据科学团队,使他们能够实时更改配置。有趣的是,想象一下,当我们实现这一点时,各种新想法和创新将成为可能——系统不仅对事件和警报作出反应,而且可以预测你可能需要切换到不同配置的时间。

活在当下

在商业中,就像在音乐中一样,速度和时机很重要,成功就是机会与能力的结合。对于像DiDonato这样的表演者来说,时机就是一切。如果她误解了观众,或者如果钢琴家不能在他想要的时候即兴演奏,那么流就被破坏了,与观众的联系也就失去了。对于您的业务,当机会出现时,您的应用程序必须具有立即适应的能力。如果你不能,你的竞争对手可能会。

通过使用连续配置实时地对变化作出反应,您正在构建自己的能力,以便当机会出现时,您将能够作出反应。,谁知道呢?在未来,我们也许能够在事件发生之前就做出反应。

评论的Disqus