Momento 将对象缓存即服务迁移至 Ampere Altra
快照
组织背景
Momento 的云应用缓存基础设施复杂且耗时。传统缓存解决方案需要在复制、故障转移管理、备份、恢复以及升级和部署的生命周期管理方面投入大量精力。这种运营负担分散了核心业务活动和功能开发的资源。
解决方案
Momento 提供基于 Ampere 的 Google Tau T2A 实例的无服务器缓存解决方案,自动化资源管理和优化,使开发人员能够集成快速可靠的缓存,而无需担心底层基础设施。基于 Apache Pelikan 开源项目,Momento 的无服务器缓存无需手动配置和操作任务,提供可靠 API 实现无缝结果。
关键特性
- 无服务器架构:无需管理、配置或维护服务器
- 零配置:无需手动干预即可持续优化基础设施
- 高性能:在 P99.9 下保持缓存请求 2 毫秒往返时间的服务级别目标,确保低尾延迟
- 可扩展性:使用多线程存储节点和核心绑定来高效处理高负载
- 附加服务:扩展产品套件包括发布-订阅消息总线
技术创新
上下文切换优化:通过将线程固定到特定核心并为核心分配网络 I/O,减少性能开销,在 16 核实例上实现每秒超过一百万次操作。
影响
Momento 基于 Ampere 的 Google Tau T2A 无服务器缓存服务加速了开发人员体验,减轻了运营负担,并为现代云应用创建了经济高效的高性能系统。
背景:Momento 是谁?做什么的?
Momento 由联合创始人 Khawaja Shams 和 Daniela Miao 共同创立。他们在 AWS 的 DynamoDB 团队共事多年后,于 2021 年底创立了 Momento。公司的核心理念是常用应用基础设施应该比现在更容易使用。
凭借在 AWS 对象缓存方面的丰富经验,Momento 团队选择缓存作为其初始产品。他们随后扩展了产品套件,包括发布-订阅消息总线等服务。基于 Apache Pelikan 开源项目的 Momento 无服务器缓存使客户能够自动化自行运行键值缓存所需的资源管理和优化工作。
所有云应用都以某种形式使用缓存。缓存是常用请求对象的低延迟存储,可减少最常用服务的服务时间。例如,对于网站,主页、作为热门网页一部分提供的图像或 CSS 文件,或网店中最受欢迎的商品,可能会存储在缓存中,以确保在人们请求时加载时间更快。
缓存的操作化涉及管理复制、主节点故障时的故障转移、中断后的备份和恢复,以及升级和部署的生命周期管理。所有这些都需要付出努力,需要知识和经验,并占用您想做的工作时间。
作为一家公司,Momento 认为他们有责任让客户从这项工作中解放出来,提供可靠、可信的 API 供您在应用中使用,以便您可以专注于提供产生业务价值的功能。从 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 下保持缓存请求 2 毫秒往返时间的服务级别目标。
为什么如此关心尾延迟?对于缓存之类的东西,加载一个网页可能会在后台生成数百个 API 请求,这又可能生成数百个缓存请求——如果您在 P99 响应时间上出现退化,最终可能会影响几乎所有的用户。因此,P99.9 可以更准确地衡量普通用户对服务的体验。
“我们在 Momento 虔诚追随的 Marc Brooker 有一篇很棒的博客文章,可视化了尾延迟对用户的影响,” CTO Daniela Miao 说。“对于许多非常成功的应用和企业,可能 1% 的请求会影响几乎每一个用户。[…] 我们真正专注于为客户提供三个九(P99.9)的延迟。”
上下文切换优化
作为优化过程的一部分,Momento 确定了由于某些核心上的上下文切换导致的性能开销。上下文切换发生在处理器停止执行一个任务以执行另一个任务时,可能由以下原因引起:
- 系统中断:内核中断用户应用程序以处理诸如处理网络流量之类的任务
- 处理器争用:在高负载下,进程竞争有限的计算时间,导致任务偶尔"换出”
在 Momento 对此主题的深入研究中,他们解释说上下文切换成本高昂,因为处理器在保存一个任务状态和加载另一个任务状态时会失去生产力。这就像人类在项目工作中被电话或会议打断时经历的生产力损失一样。切换任务需要时间,然后还需要额外的时间重新集中注意力并再次变得高效。
通过最小化上下文切换,Momento 提高了处理器效率和整体系统性能。
开始使用 Momento
Momento 专注于性能,特别是尾延迟,并在 GitHub 上手动管理所有客户端 SDK,以防止版本不匹配问题。
- 注册:访问 Momento 网站注册
- 选择 SDK:为您首选的编程语言选择手动管理的 SDK
- 创建缓存:使用简单的控制台界面创建新缓存
- 存储/检索数据:利用 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 的"尾延迟可能比您想象的更重要"
- “为什么尾延迟很重要”