GrabUnlimited 的原始架构(来源:Grab 的工程博客)
在考虑了原有架构的问题及其对用户体验和运维开销的影响之后,团队开始寻找解决方案。工程师们没有选择重构现有的系统,而是选择基于 Temporal,(Grab 的另一个团队之前采用的开源工作流编排引擎),用一个新的架构取代现有的架构。
团队仔细评估了 Temporal 的多个方面,包括可扩展性、可靠性、性能、安全性,以及开发工作量、成本和可测试性。新架构得益于 Temporal 的许多内置特性,如无限重试、指数回退、速率限制和可观测性。
使用 Temporal 构建 GrabUnlimited 的新架构(来源:Grab 的工程博客)
团队还利用了 Temporal 的 弹性机制(如无限重试和指数回退)来配置适当的重试策略,以防止外部服务在短暂的可用性问题出现时被压垮。通过设计工作流步骤来处理不同的责任,并利用 Temporal 进行错误处理和工作流执行的排序,解决了之前架构中的幂等性问题。
在采用 Temporal 的过程中,GrabUnlimited 团队学到了很多,并不得不调整他们对系统设计的方法,以充分利用 Temporal 的功能。工程师们强调,这种转变使他们能够专注于产品平台的重要方面,而不是花费时间实现基本构建块。尽管采用新技术存在挑战,但团队相信“学习曲线是有回报的”。