写点什么

从单体到微服务的系统改造:采用事件驱动架构优化会员系统

  • 2023-09-19
    北京
  • 本文字数:1221 字

    阅读完需:约 4 分钟

大小:646.36K时长:03:40
从单体到微服务的系统改造:采用事件驱动架构优化会员系统

Baemin 是一家快速增长的送餐服务公司,它已经成功地从单体架构过渡到了更灵活的基于微服务的系统。这一转变的基石是事件驱动架构的实现,这是Baemin架构之旅的一个方面,正如最近的一篇博客文章所描述的那样。该架构的突出特点包括通过分层的事件订阅者细致地分离了关注点,以及战略性地使用事件存储来提高可靠性。Baemin 利用通用的关系数据库管理系统(RDBMS)并采用事务发件箱模式(Transactional Outbox Pattern),构建了一个可扩展且可靠的健壮框架。

 

最初,Baemin 努力克服单体架构的局限性,但随着公司规模的扩大,这种局限性变得越来越明显。系统无法处理激增的流量和订单,导致了大量的错误。向微服务的迁移于 2019 年 11 月完成,为下一阶段奠定了基础:采用事件驱动的架构。该架构对于实现各种微服务之间的松耦合、增强系统的弹性和灵活性至关重要。

 

Baemin 事件驱动架构的本质在于发布领域事件,而不是命令或请求。这种微妙但关键的区别可以减少不同系统之间的依赖关系。在传统的基于命令的系统中,一个服务的更改可能需要另一个服务也进行更改,从而导致紧密耦合的架构。通过关注领域事件,Baemin 确保每个微服务独立运行,并订阅与其领域相关的事件。

 

在 Baemin 的事件驱动架构中,事件和订阅者被组织为三层,以确保模块化和可扩展性。第一层,应用程序事件和第一订阅服务层,利用 Spring 框架的应用程序事件来管理内部、特定于领域的任务,并通过AWS简单通知服务(SNS)发布这些事件。第二层,内部事件和第二订阅服务层,处理的任务虽不是领域的核心,但却是必不可少的。例如,在登录过程中,该层负责一些次要任务,例如从其他设备中注销。最后,第三层称为外部事件和第三订阅服务层,用于发布外部系统将使用的事件。这些事件是通用的,以避免创建与外部系统的依赖关系。这种分层的方法允许 Baemin 在保持松耦合架构的同时确保了每个微服务都能独立运行。

 

事件驱动架构的挑战之一是确保事件发布的可靠性。Baemin 通过引入事件存储系统来解决这一问题。该存储系统使用与其领域存储相同的关系数据库管理系统(RDBMS),从而确保了事务数据的一致性。事件存储充当缓冲区,捕获事件并确保它们能可靠地发布。

 

该架构采用事务发件箱模式(Transactional Outbox Pattern)来确保数据一致性和可靠的事件发布。此模式对领域数据和事件数据使用相同的存储,从而实现可靠的事件发布机制。下图是其最终的设计,展示了不同类型的事件、事件存储系统和订阅者层之间的交互。

 


尽管如此,最终的设计还是值得注意的,因为它通过不同层次的事件订阅者细致地分离了关注点。使用事件存储来确保可靠性以及关注松耦合的领域事件是其突出的特点。

 

总而言之,Baemin 的架构转型为解决规模问题的组织提供了丰富的见解。通过对事件订阅者进行分层,并利用由通用 RDBMS 支持的事件存储,Baemin 精心打造了一个不仅满足其当前需求,而且非常适合未来的可扩展增强系统。

 

原文链接:

https://www.infoq.com/news/2023/09/delivery-hero-uses-eda/

 

2023-09-19 15:0651393

评论

发布
暂无评论
发现更多内容

YashanDB分布式事务处理方法,确保数据一致性

数据库砖家

YashanDB分布式数据存储一致性保障机制

数据库砖家

YashanDB分布式数据库应用开发指南

数据库砖家

YashanDB高可用架构设计,保障企业业务零中断

数据库砖家

YashanDB高性能存储引擎原理解析

数据库砖家

YashanDB监控报警系统设计与实现技巧

数据库砖家

YashanDB分布式架构中的负载均衡策略

数据库砖家

YashanDB分布式事务实现与最佳实践教程

数据库砖家

免费SSL证书能用吗?安全吗?

国科云

AI智能体开发的技术方案

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI技术应用

YashanDB集群部署指南,打造企业级高性能数据库

数据库砖家

YashanDB集群维护与升级实操指南

数据库砖家

YashanDB核心功能详解及操作实战教程

数据库砖家

YashanDB集群部署教程:提升数据库可用性

数据库砖家

CAD图纸如何批量转换成PDF格式?

在路上

cad

YashanDB高性能缓存机制及实战应用

数据库砖家

YashanDB集群部署架构与实施指南

数据库砖家

ESP32 + MCP over MQTT:从 0 到 1 打造情感陪伴智能体

EMQ映云科技

人工智能 智能硬件

YashanDB分布式数据库:应对海量数据的最佳实践

数据库砖家

YashanDB高性能数据库设计与实现技术

数据库砖家

YashanDB故障诊断与恢复指南,保障企业数据安全

数据库砖家

YashanDB集群部署教程,打造高可用数据库服务平台

数据库砖家

YashanDB分布式数据库网络架构及安全策略

数据库砖家

YashanDB分布式索引设计与查询优化

数据库砖家

YashanDB负载均衡配置及性能测试指南

数据库砖家

YashanDB分布式事务处理与一致性保证技术

数据库砖家

YashanDB分布式事务管理详解与最佳实践

数据库砖家

网易伏羲揭秘如何以智能体链接全网,改写未来工作新篇章|全球产品经理大会分享纪实

网易伏羲

网易伏羲 数字游民 游戏AI 具身智能 群体智能

YashanDB集群部署架构及性能提升技巧

数据库砖家

YashanDB集群管理及容灾备份实用教程

数据库砖家

YashanDB架构设计与实现,助力企业数字化转型

数据库砖家

从单体到微服务的系统改造:采用事件驱动架构优化会员系统_微服务_A N M Bazlur Rahman_InfoQ精选文章