WellRight 对事件驱动架构进行了现代化改造,以管理突发和不可预测的流量

作者: 约翰·李, Girish Sukhatankar, 瑞安·蒂格 |

WellRight 是一家领先的综合企业健康平台提供商,通过个性化健康计划帮助组织和员工取得有意义的成果。该平台通过在健康的多个维度上提供引人入胜的挑战,从步数追踪等体育活动到心理健康计划和团队建设练习,提高参与度和收益利用率。

在这篇文章中,我们将分享 WellRight 如何通过对事件驱动架构进行全面的现代化改造,优化其应用程序的成本和性能。

挑战

WellRight 的基础设施经常出现突发和不可预测的流量模式。例如,客户可以随时上传批量用户数据,这可能会影响成千上万的用户,然后这些数据会级联成数百万个更改。面对此类流量,WellRight 的传统单体基础设施遇到了一些挑战:

  • 注册、进度计算和奖励分配等多个过程依赖于一台服务器,从而导致邻居噪音问题。
  • 为了避免邻居噪音问题,对某些核心服务进行了隔离,但是对于高突发工作负载,自动扩展的反应速度不够快,无法满足需求。这导致了数百万个请求的队列备份。此外,还必须对数据库进行过度配置,以避免节流,从而增加总成本。
  • 应用程序的某些部分在设计时没有考虑到自动扩展,导致资源过度配置。

下图显示了来自示例 Amazon Simple Queue Service(Amazon SQS)队列的"收到的消息数量"指标。WellRight 经常会在不可预测的时间接收到一连串的事件。

折线图显示了在 SQS 队列中收到的消息数量,在原本为零活动的情况下,消息数量急剧增加。

解决方案概述

为了应对这些挑战,WellRight 做出了使用完全托管的亚马逊云科技服务过渡到事件驱动架构的战略决策。WellRight 的平台由异步状态变化驱动,异步状态变化通过多个健康计划传播,非常适合事件驱动的架构,可以分解为微服务。Amazon Lambda、Amazon SQS 和 Amazon DynamoDB 等托管服务之所以具有吸引力,是因为它们将消除管理服务器的需求,使 WellRight 能够专注于核心业务逻辑并减轻其工程团队的运营负担。它还有一个额外的好处,那就是可以避免过度配置基础架构或持续调整资源规模。每个微服务都将根据需要自动扩展,无需手动操作,从而最大限度地降低了成本。松散耦合的架构将使 WellRight 团队能够保持灵活性,能够在不影响现有工作流程的情况下添加或修改现有程序。

设计

WellRight 最初的事件驱动架构以使用无服务器和完全托管的服务为中心。DynamoDB 被用作用户信息的主要数据存储库。例如,当用户在分步挑战中取得进展时,DynamoDB 表中的更新将通过 DynamoDB Streams 传播到亚马逊事件桥。然后,该事件将被路由到相应的 SQS 队列,该队列充当缓冲区,为事件提供容错能力。然后,Lambda 函数将处理单个用户指标并更新程序表。程序表使用 DynamoDB 流通过 Amazon Simple Notification Service(Amazon SNS)发送更新,让用户随时了解他们的进度和排名。

下图说明了用户更新后的事件流程。

事件驱动架构的首次迭代表现要好于单一的传统应用程序,但流量的突发性质仍然是一个问题。由 SQS 队列触发的 Lambda 函数可快速扩展,处理请求的时间不到 15 分钟,而以前需要 30 台服务器,处理请求需要几个小时。Lambda 为 WellRight 提供了他们所需的可扩展性,但是快速扩展带来了新的挑战。这导致 DynamoDB 受限,并在极高负载时达到 Lambda 并发限制,从而导致死信队列 (DLQ) 中有许多未处理的消息。

最大并发度解决方案

2023 年 1 月,亚马逊云科技使用 Amazon SQS 作为事件源为 Lambda 函数引入了最大并发功能。这项新功能允许 WellRight 控制每个 SQS 队列的 Lambda 函数的并发性。在此次发布之前,只要 SQS 队列中有消息,Lambda 函数就会继续扩展。有时,Lambda 函数会扩展到其并发限制,从而导致其自身节流。但是,有了这个功能,扩展 Lambda 函数就不会超过设定的最大并发值。这为 WellRight 提供了对系统总体吞吐量的精细控制。WellRight 将根据需要调整最大并发值,以保护下游流程免于不堪重负,同时及时响应客户请求。

以下 Lambda 控制台的屏幕截图显示,该函数的最大并发度设置为 SQS 触发器的 100。

AWS Lambda 配置屏幕显示了从 SQS 进度计算队列触发的触发器,最大并发量设置为 100,此外还有一个说明 SQS 与 Lambda 连接的图表。

WellRight 将所有 Amazon SQS 转换为 Lambda 集成以使用此功能。这使 WellRight 能够完全控制客户请求的吞吐量,同时防止系统过载。借助最大并发性功能,WellRight 将处理失败的消息减少了 99%,并消除了 DynamoDB 限制事件。该功能已为所有 Amazon SQS 和 Lambda 集成(包括没有扩展问题的集成)启用,以保障未来潜在的扩展需求。

性能和成本节约

WellRight 的事件驱动架构显著提高了他们处理突发和不可预测的交通模式的能力。托管的无服务器服务可以即时扩展以应对这些流量高峰,为其客户提供无缝体验。在他们之前的传统架构中,客户在挑战进度、排行榜和奖励处理方面遇到了滞后。

现在,客户可以继续随时上传超过 100 万个参赛作品的更新,WellRight 可以保持最新的排行榜和奖励处理。向新架构的过渡还为 WellRight 节省了大量成本。在无服务器架构出现之前,他们的基准架构需要几个大型的 Amazon Elastic Compute Cloud(Amazon EC2)实例来处理最初的突增流量。在实施事件驱动架构后,WellRight 将进度计算服务的成本降低了 70%。

未来的计划

WellRight 目前正在向其余客户推出新的事件驱动架构。到 2024 年底,WellRight 计划淘汰剩余的大部分服务器,进一步降低其基础设施成本。

结论

WellRight 在亚马逊云科技上向事件驱动架构的过渡是一项成功的尝试。通过使用 Lambda、Amazon SQS 和 DynamoDB 等完全托管的服务,他们能够高效地处理突发和不可预测的流量模式,同时为客户提供无缝体验。为 Lambda 函数引入最大并发性改变了游戏规则,使 WellRight 能够控制其 Lambda 函数的吞吐量并避免下游资源过多。

总体而言,事件驱动的架构使 WellRight 能够高效扩展,提高性能并将进度计算服务的成本降低 70% 以上。随着他们继续优化其无服务器架构并迁移其余客户端,WellRight 处于有利地位,可以进一步增强其平台并为客户提供卓越的体验。

要了解有关构建事件驱动架构的更多信息,包括关键概念、优秀实践、亚马逊云科技服务和入门资源,请访问 Serverless Land。


作者简介



约翰·李

约翰·李

John Lee 是总部位于旧金山的亚马逊云科技的解决方案架构师。在他的职位上,John 帮助中小型企业在亚马逊云科技上进行构建。在加入亚马逊云科技之前,John 曾担任软件开发人员,还曾在研究生院学习人机交互。

Girish Sukhatankar

Girish Sukhatankar

Girish 是亚马逊云科技的高级解决方案架构师,总部设在美国德克萨斯州达拉斯。他喜欢通过创新和技术帮助中小企业实现其业务目标。Girish 拥有科罗拉多大学博尔德分校的电信硕士学位,专攻计算机网络。工作之余,你可以看到他在踢足球、排球或打乒乓球。

瑞安·蒂格

瑞安·蒂格

瑞安·蒂格是总部位于芝加哥的 WellRight Inc. 的工程副总裁。在他的职位上,Ryan 设计了高吞吐量 B2B 企业健康 SaaS 解决方案,并管理所有负责开发的产品和平台工程团队。在加入 WellRight 之前,Ryan 在软件行业的主管和个人贡献者职位上拥有丰富的经验,并毕业于天普大学,获得信息系统管理工商管理硕士学位。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。