首届AICon深圳正式启动|AI实践哪家强?来 AICon,解锁技术前沿,探寻产业新机! 了解详情
写点什么

Grab 订阅平台从 SQS 和 Redis 切换到 Temporal

  • 2025-07-22
    北京
  • 本文字数:1377 字

    阅读完需:约 5 分钟

大小:673.36K时长:03:49
Grab订阅平台从SQS和Redis切换到Temporal

Grab基于Temporal构建了新的GrabUnlimited架构。该公司增强了用户体验,并将其服务于数百万用户的订阅平台的生产事件减少了 80%。新架构显著提高了系统的鲁棒性和可扩展性,解决了之前解决方案中的一系列问题。

 

GrabUnlimited 是 Grab 的订阅计划,为按月付费的会员提供福利。支持 GrabUnlimited 的平台实现了两个主要流程:一个是注册会员,另一个是更新会员。随着订阅者基数的增长,该公司开始遇到问题和系统中断。根据运维指标,Grab 观察到用户因数据库中会员状态损坏而被阻止、会员资格未能自动续订,或用户在续订后未收到福利等问题。

 

Grab 的工程经理Michel Parreno和首席工程师Theodore Felix Leo描述了在初始架构中遇到的问题:

 

随着最初的成功,从 2022 年 1 月到 2023 年 6 月,订阅者数量大幅增加超过 1000%,支持 GrabUnlimited 的架构开始出现压力迹象。常见的订阅者问题,如未收到会员福利,以及开发者问题,表现为服务中断次数增加,突显了系统的低弹性。罪魁祸首是什么?一个后端服务,虽然功能强大,但并未被没有被构建来有效地管理快速扩展的成员模型的复杂性。

 

GrabUnlimited 的原始架构依赖于Amazon RDS进行数据存储,SQS进行消息传递,Redis进行缓存和分布式加锁。采用状态机模式来跟踪成员状态。随着时间的推移,由于订阅者数量不断增加,用于检索到期续订会员的每日 cron 作业变得越来越慢。开发团队不得不将任务分成多个批次,并最终垂直扩展数据库。此外,由于 5 分钟 Redis 锁的限制,续订过程可能导致会员状态损坏。

 

GrabUnlimited 的原始架构(来源:Grab的工程博客

 

该解决方案还存在弹性问题,即上游服务的中断,加上 SQS 重试没有指数回退,可能会导致服务在恢复上线时超载。最后,随着状态转换数量的增加,原始架构中的订阅服务变得过于复杂。它还缺乏幂等性保证,导致在重试过程中福利被重复授予。

 

在考虑了原有架构的问题及其对用户体验和运维开销的影响之后,团队开始寻找解决方案。工程师们没有选择重构现有的系统,而是选择基于Temporal,(Grab 的另一个团队之前采用的开源工作流编排引擎),用一个新的架构取代现有的架构。

 

团队仔细评估了 Temporal 的多个方面,包括可扩展性、可靠性、性能、安全性,以及开发工作量、成本和可测试性。新架构得益于 Temporal 的许多内置特性,如无限重试、指数回退、速率限制和可观测性。


使用 Temporal 构建 GrabUnlimited 的新架构(来源:Grab的工程博客

 

在新架构中,每天的 cron 作业被Timer替换,它允许根据用户的订阅时间将续订过程在一天中分散进行,从而大大提高了可扩展性。通过利用 Temporal 的内置工作流执行能力,解决了之前的并发挑战,相同的工作流ID被分配给运行互斥操作的多个工作流实例。

 

团队还利用了 Temporal 的弹性机制(如无限重试和指数回退)来配置适当的重试策略,以防止外部服务在短暂的可用性问题出现时被压垮。通过设计工作流步骤来处理不同的责任,并利用 Temporal 进行错误处理和工作流执行的排序,解决了之前架构中的幂等性问题。

 

在采用 Temporal 的过程中,GrabUnlimited 团队学到了很多,并不得不调整他们对系统设计的方法,以充分利用 Temporal 的功能。工程师们强调,这种转变使他们能够专注于产品平台的重要方面,而不是花费时间实现基本构建块。尽管采用新技术存在挑战,但团队相信“学习曲线是有回报的”。

 

原文链接:

https://www.infoq.com/news/2025/07/grab-temporal-sqs-redis/

2025-07-22 12:001

评论

发布
暂无评论

springsecurity默认用户生成

急需上岸的小谢

如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表

蒋川

Vue PDF pdf阅读器

大画 Spark :: 网络(5)-Spark中的server端和client端

dclar

大数据 hadoop spark Spark 源码 大数据开发

Flutter 容器盒子布局模型

岛上码农

flutter ios 安卓 移动端开发 3月月更

安全代码审计-PHP

网络安全学海

网络安全 信息安全 渗透测试 漏洞 代码审计

CompusAss校园社团小程序解决方案

CC同学

python 编辑器提示 do not use bare except

AlwaysBeta

Python vscode 编辑器 pycharm Python PEP

appsmith 怎么用?评价如何

蒋川

appsmith

微服务工程中,基础组件应用

架构 分布式 微服务

假如让你来设计SSL/TLS协议,你要怎么设计呢?

华为云开发者联盟

网络安全 HTTP 通信 SSL/TLS 协议 网络通信安全

java高级用法之:无所不能的java,本地方法调用实况

程序那些事

Java Netty 程序那些事 3月月更

免费硬件、专属导师、豪华大礼|AI达人创造营第二期项目征集启动啦!

百度大脑

《大饼卷一切》爆笑相声剧 今晚开票!

InfoQ 天津

高精度轻量级目标检测产业应用,实现多类通信塔识别

百度大脑

12 款最棒 Vue 开源 UI 库测评 - 特别针对国内使用场景推荐

蒋川

Vue vue admin

AI人脸识别测温一体机设计

DS小龙哥

3月月更

2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA

冴羽

JavaScript Vue 前端 vuepress PWA

社区人物志|缪翎:见证开源世界的女性力量

ApacheDoris

大数据 开源 数据分析 OLAP apache doris

selenium操作元素遇到的异常

红毛丹

selenium

React Draggable 实现拖拽 - 最详细中文教程 - 卡拉云

蒋川

React

「架构实战营」模块四作业 考试试卷存储方案

hxb

「架构实战营」

Android TabLayout 选中 tab 文字加粗显示

逆锋起笔

android 3月月更 TabLayout android滑动标签

Tech Talk 活动预告 | 为什么说 Serverless 是应用开发的未来?

亚马逊云科技 (Amazon Web Services)

Serverless

小程序的第六年,我们还能怎么玩?

知晓云

小程序 微信 小程序生态 小程序运营

Hoo虎符研究院|区块链简报20220307期

区块链前沿News

Hoo 虎符交易所 虎符研究院

关于中国芯片,这些话如鲠在喉

脑极体

惨,给Go提的代码被批麻了

捉虫大师

Go 开源 Code Review

全网渗透率达80%!“耳朵经济”将成为当下市场的流行趋势

易观分析

耳朵经济 在线音频

如何避免在面试中看走眼

Hockor

个人成长 面试经验

业内首家!百度智能云智慧金融业务通过ISO37301合规管理体系认证

百度大脑

Grab订阅平台从SQS和Redis切换到Temporal_架构_Rafal Gancarz_InfoQ精选文章