写点什么

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

  • 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:0650871

评论

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

嵌入式系统降低功耗的设计技术

不脱发的程序猿

嵌入式设计 嵌入式系统 低功耗

细节爆炸!阿里架构师总结出:共计23版块Java架构师“成长笔记”

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

TypeScript 开发环境搭建

Emperor_LawD

typescript ts 520单身福利 520 单身福利

做了一个开源的在线互动教室,想分享给大家

千竹

开源 WebRTC 在线教育 在线课堂 互动白板

马斯克会在熊市周期里瞄准下一个百倍币么?

猫Buboo

区块链 狗狗币

省钱、省时、省力的音视频通信服务

anyRTC开发者

音视频 WebRTC 云服务 RTC

新垣结衣嫁了个“非典型性”程序员

小智

程序员 软件开发 日本

2021年10年后端开发程序员最新《C/C++Linux 服务器开发》学习路线总结,建议收藏

奔着腾讯去

学习 服务器集群 Linux服务器开发 C++后台开发

花重金购买的“Java面试知识点”真香,知彼知己,百战不殆

Java架构师迁哥

程序员兼职网站推荐~

MY

520到了,吟湿几首

花花

520 520单身福利 520 单身福利

作为骨灰级MEME项目,Grin接下来会走向何方?

猫Buboo

仅需几行代码轻松实现第一人称行走

ThingJS数字孪生引擎

大前端 3D可视化 数字孪生

【建议收藏】B站上有哪些值得反复观看的Java视频教程?

格致君的planB

项目开发中ARM单片机芯片分类及选型

不脱发的程序猿

嵌入式 ARM单片机 ARM芯片分类及选型 单片机选型

GO语言平均薪资为什么比Java高?

Java架构师迁哥

只有程序猿才能看懂的520内涵表白

三掌柜

520 520单身福利 520 单身福利

浅析决策树的生长和剪枝

华为云开发者联盟

数据 决策树 预测模型 剪枝 过拟合

实现高性能MySQL,深入探索数据库索引

奔着腾讯去

数据库 数据库事务 innodb 索引 MySQL 高可用

程序员应该多久跳一次槽?怎样跳槽才是正确的跳槽?

Java架构师迁哥

Matlab制作视频并转换成gif动态图的方法

格致君的planB

大厂面试题之计算机网络重点篇(附答案)

linux大本营

c++ Linux 网络协议 udp TCP/IP

一周信创舆情观察(5.10~5.16)

统小信uos

OCR性能优化:从认识BiLSTM网络结构开始

华为云开发者联盟

OCR Seq2Seq BiLSTM 网络结构 OCR网络

人人矿场提供真实稳定算力,形成全球分布式算力供给网络

DT极客

浅谈虚拟偶像背后的舞蹈生成

行者AI

人工智能

张一鸣退隐江湖

池建强

字节跳动 张一鸣

视频分割修整功哪一款视频剪辑软件更好用?

奈奈的杂社

短视频 视频剪辑 视频处理 视频制作

PCB天线无线模组如何布局摆放?

不脱发的程序猿

物联网 嵌入式设计 PCB天线无线模组 无线模组布局摆放 PCB产品

云小课 | 玩转HiLens Studio之手机实时视频流调试代码

华为云开发者联盟

华为 华为HiLens HiLens Studio EI智能体 实时视频

阿里架构师自爆“面试指南(泰山版)”所有的成功都不是白给的

Java架构师迁哥

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