Delivery Hero 采用事件驱动架构以应对 Baemin 的增长

Baemin的架构转型:从单体到事件驱动微服务

Baemin是韩国一家由Delivery Hero拥有的外卖服务平台。面对快速增长的客户会员数量,Baemin成功通过从单体架构转型为事件驱动的微服务架构,解决了系统扩展的挑战。

背景与挑战

Baemin最初采用单体架构,但随着业务规模的扩大,该架构逐渐暴露出局限性。系统无法应对流量和订单的激增,导致大量错误。2019年11月,Baemin完成了向微服务架构的转型,为进一步采用事件驱动架构奠定了基础。

事件驱动架构的核心

Baemin的事件驱动架构的核心在于发布领域事件,而非命令或请求。这种设计减少了系统间的依赖,避免了传统命令式系统中因一个服务的变化而需要修改其他服务的紧密耦合问题。通过关注领域事件,Baemin确保每个微服务能够独立运行,仅订阅与其领域相关的事件。

事件订阅者的分层设计

Baemin的事件驱动架构将事件和订阅者分为三层,以确保模块化和可扩展性:

  1. 应用事件与第一层订阅者:利用Spring Framework的Application Event处理内部、特定领域的任务,并通过AWS SNS发布这些事件。
  2. 内部事件与第二层订阅者:处理非核心但必要的任务,例如在登录过程中处理从其他设备注销等次要任务。
  3. 外部事件与第三层订阅者:发布供外部系统消费的事件,这些事件经过泛化以避免与外部系统产生依赖。

事件存储与可靠性

为确保事件发布的可靠性,Baemin引入了事件存储系统。该系统使用与领域存储相同的RDBMS,通过事务确保数据一致性。事件存储作为缓冲区,捕获事件并确保其可靠发布。

事务性发件箱模式

Baemin采用事务性发件箱模式(Transactional Outbox Pattern)来确保数据一致性和事件发布的可靠性。该模式使用相同的存储来管理领域数据和事件数据,从而提供可靠的事件发布机制。

总结

Baemin的架构转型为面临扩展问题的组织提供了宝贵的经验。通过分层的事件订阅者和基于RDBMS的事件存储,Baemin构建了一个不仅满足当前需求,还具备未来扩展和增强能力的系统。这种架构设计在确保系统松散耦合的同时,提升了系统的弹性和灵活性。

阅读 34
0 条评论