Momento 将对象缓存服务迁移至 Ampere Altra 处理器,实现高性能无服务器架构

Momento 基于 Ampere Altra 处理器和 Google Tau T2A 实例,构建了高性能无服务器缓存服务。通过线程绑定、核心隔离和网络 I/O 优化,实现了 P99.9 延迟低于 2ms,每秒超百万操作的高吞吐量架构。

快照

组织背景
Momento 的云应用缓存基础设施复杂且耗时。传统缓存方案需大量精力处理复制、故障转移管理、备份恢复以及升级部署的生命周期管理。这种运维负担分散了核心业务和功能开发的资源。

解决方案
Momento 提供基于 Ampere 处理器的 Google Tau T2A 实例的无服务器缓存方案,自动化资源管理和优化,使开发者无需关注底层基础设施即可集成快速可靠的缓存。基于 Apache Pelikan 开源项目,Momento 无服务器缓存无需手动配置和运维任务,提供可靠 API 实现无缝结果。

核心特性

  • 无服务器架构:无需管理、配置或维护服务器。
  • 零配置:基础设施持续优化,无需人工干预。
  • 高性能:P99.9 缓存请求往返时间保持在 2ms 以内,确保低尾延迟。
  • 可扩展性:使用多线程存储节点和核心绑定,高效处理高负载。
  • 附加服务:扩展产品套件包括发布-订阅消息总线。

技术创新
通过将线程绑定到特定核心并专设核心处理网络 I/O,优化上下文切换,减少性能开销,在 16 核实例上实现每秒超百万操作。

影响
Momento 的无服务器缓存服务,依托基于 Ampere 的 Google Tau T2A,加速开发者体验,减轻运维负担,为现代云应用创建经济高效的高性能系统。

背景:Momento 是谁?做什么的?

Momento 由联合创始人 Khawaja Shams 和 Daniela Miao 创立。他们曾在 AWS DynamoDB 团队共事多年,于 2021 年底创建 Momento。公司核心理念是让常用应用基础设施比当前更简单。

基于在 AWS 处理对象缓存的丰富经验,Momento 团队选择缓存作为初始产品,并逐步扩展至发布-订阅消息总线等服务。Momento 无服务器缓存基于 Apache Pelikan 开源项目,使客户自动化资源管理和优化工作,无需自行运行键值缓存。

所有云应用都以某种形式使用缓存。缓存是常用请求对象的低延迟存储,减少高频服务的响应时间。例如,网站首页、热门网页的图片或 CSS 文件、网店热门商品可能存储在缓存中,以确保用户请求时更快加载。

缓存运维涉及管理复制、主节点故障时的故障转移、中断后的备份恢复以及升级部署的生命周期管理。这些工作耗费精力、需要知识经验,并分散了本应专注的业务目标。

Momento 视自身责任为解放客户,提供可靠可信的 API 供应用集成,使客户专注于交付产生业务价值的功能。Momento 团队认为,“配置”不应出现在缓存用户的词汇中——最终目标是按需提供快速可靠的缓存,所有管理问题均由 Momento 处理。

部署:轻松移植至 Ampere 处理器

最初,Momento 决定在基于 Ampere 的 Google T2A 实例上部署无服务器缓存方案,是出于性价比和效率优势。

基于 Ampere 的 Tau T2A 虚拟机从头设计,提供可预测的高性能和线性可扩展性,使横向扩展应用快速部署,性能超越现有 x86 虚拟机 30% 以上。

然而,在最近一次采访中,Momento 联合创始人兼 CTO Daniela Miao 也指出采用 Ampere 的灵活性,因为它不是全有或全无的命题:“这不是单向门……您可以运行混合模式,如果您希望确保应用可移植和灵活,可以部分运行在 Arm64,部分在 x86。”

此外,迁移到 Ampere CPU 的经历比团队最初预期的顺利得多。“移植到基于 Ampere 的 Tau T2A 实例非常惊人——我们没做太多工作,它就正常运行了。”

查看完整视频采访,听 Daniela 讨论 Momento 的工作、客户关注点、与 Ampere 合作如何帮助交付客户价值,以及他们为榨取 Ampere 实例最大性能所做的一些优化和配置更改。

结果:Ampere 如何帮助 Momento 交付更好产品

Momento 密切关注尾延迟——他们的关键指标是 P99.9 响应时间,即 99.9% 的缓存调用在该时间内返回客户端。他们的目标是在 P99.9 保持缓存请求的往返时间服务等级目标为 2ms。

为什么如此关注尾延迟?对于缓存之类的东西,加载一个网页可能在后台生成数百个 API 请求,进而可能生成数百个缓存请求——如果 P99 响应时间下降,最终可能影响几乎所有用户。因此,P99.9 可以更准确地衡量普通用户的服务体验。

“我们在 Momento 虔诚追随的 Marc Brooker 有一篇很棒博文,可视化尾延迟对用户的影响,”CTO Daniela Miao 说。“对于许多非常成功的应用和业务,可能 1% 的请求会影响几乎每一个用户。[…] 我们真正关注客户 P 三个九(P99.9)的延迟。”

上下文切换优化

作为优化过程的一部分,Momento 确定了某些核心上上下文切换导致的性能开销。上下文切换发生在处理器停止执行一个任务以执行另一个任务时,可能由以下原因引起:

  • 系统中断:内核中断用户应用以处理诸如处理网络流量等任务。
  • 处理器争用:在高负载下,进程竞争有限的计算时间,导致任务偶尔“换出”。

在 Momento 对此主题的深入探讨中,他们解释说上下文切换成本高昂,因为处理器在保存一个任务状态和加载另一个任务时失去生产力。这就像人类在项目工作中被电话或会议打断时生产力损失一样。切换任务需要时间,然后还需要额外时间重新聚焦并再次变得高效。

通过最小化上下文切换,Momento 提高了处理器效率和整体系统性能。

开始使用 Momento

Momento 专注于性能,尤其是尾延迟,并在 GitHub 上手 curate 所有客户端 SDK,防止版本不匹配问题。

  1. 注册:访问 Momento 网站注册。
  2. 选择 SDK:为您偏好的编程语言选择手 curate 的 SDK。
  3. 创建缓存:使用简单控制台界面创建新缓存。
  4. 存储/检索数据:利用 SDK 中的 set 和 get 函数在缓存中存储和检索对象。

Momento 的架构

Momento 的架构将 API 网关功能与存储节点上的数据线程分离。API 网关将请求路由到最佳存储节点,而每个存储节点有多个工作线程处理缓存操作。

  • 可扩展性:在 16 核 T2A-standard-16 虚拟机上,运行两个 Pelikan 实例,每个实例 6 个线程。
  • 核心绑定:线程绑定到特定核心,防止随着负载增加被其他应用中断。
  • 网络 I/O 优化:四个 RX/TX(接收/发送)队列绑定到专用核心,避免内核中断引起的上下文切换。虽然可以让更多核心处理网络 I/O,但他们发现使用四个队列对,能够以 95% 负载驱动 Momento 缓存,而网络吞吐量不会成为瓶颈。

附加资源

要了解更多关于 Momento 使用基于 Ampere CPU 的 Tau T2A 实例的经验,请查看“在 Google Cloud 最新基于 Arm 的 T2A 虚拟机上涡轮增压 Pelikan 缓存”。

要查找关于在 Ampere CPU 上优化代码的更多信息,请查看 Ampere 开发者中心的调优指南。您还可以注册我们的月度开发者通讯,获取更新和更多此类精彩内容的链接。

最后,如果您对此案例研究有疑问或评论,Ampere 开发者社区有整个 Ampere 用户和粉丝社区准备回答。请务必订阅我们的 YouTube 频道,获取未来更多以开发者为中心的内容。

参考文献

  • 2015 StrangeLoop 上 Yao Yue 的 Pelikan 演示
  • “让 Pelikan 在 Arm 上飞”
  • “在 Google Cloud 上用 Tau T2A 虚拟机涡轮增压 Pelikan 缓存”
  • Marc Brooker 的“尾延迟可能比您想的更重要”
  • “为什么尾延迟重要”
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计