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

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

科技

作者 | A N M Bazlur Rahman
译者 | 刘雅梦
策划 | 丁晓昀

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/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

今日好文推荐

GitHub 变 Twitter?强“喂”新推荐算法引公愤,开发者从“编程乌托邦”被驱赶到了信息茧房

小型开发者的生存之战:Unity 想要我们的全部收入!我们要破产了

40 多名直接下属、从不 1 对 1 沟通,老黄如此管理下的英伟达能在 AI 芯片领域称霸多久?
AI 大模型热潮来袭,看机密计算如何应对敏感数据安全挑战

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
财报前瞻丨Enphase:仍是软件驱动家庭能源解决方案领头羊西雅图追尾劫车事件频发,警方提醒公众警惕;西雅图水族馆和任天堂合作,全新沉浸式展览即将开展;公用事业部要求用户节约用水以抗干旱超大特大城市城中村改造:怎么改?难点在哪儿?迈特芯黄瀚韬:自研立方脉动架构,已开发三款X-Edge芯片并实现大模型高效能并行存算丨GACS 2023第二届世界华人作家笔会花絮:严歌苓谈移民创作澳移民系统改革, 教师职业加速审批! 新南威尔士大学教育学硕士详解KafkaFlow 入门指南:构建可扩展的 Kafka 事件驱动应用反思公益项目运营不合规事件:如何建构优质的公益品牌?《芦叶青青芦花白》&《烟火手记》SOFAServerless 应用架构助力业务10倍效率提升,探索微服务隔离与共享的新平衡|QConJECloud 基于微服务架构的低代码平台微服务 vs. 事件驱动架构:重新开始理解差异蚂蚁 SOFAServerless 微服务新架构的探索与实践预计9月21日发布,疑似蔚来首款手机曝光:采用曲面屏一张图搞懂微服务架构设计传百度向华为订购 AI 芯片;特斯拉上调 Model 3/Y 长续航版售价;字节旗下 PICO 启动架构调整 | 极客早知道美光发布 128GB DDR5 RDIMM 内存:采用 32Gb 芯片,速度可达 8000 MT/s建信量化事件驱动基金合同终止,公募量化优胜劣汰加剧老驥伏櫪,不敵ITiQOO 12系列再预热:采用自研电竞芯片Q1,1/1.3 英寸大底主摄出现7起副作用事件,Apellis股价大跌超50%,FDA首次批准的眼疾药物面临安全性质疑明日见!真我GT5再预热:采用IMX890主摄、三大系统功能升级2023 年 Serverless 状态报告发布:采用率大幅增长SpringCloud 微服务架构:实现分布式系统的无缝协作Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?AIGC,驱动架构与业务的新动力 | 9月16日 TF线下活动报名营收毛利双增、债务结构优化 合生创展打造高质量发展范本百度:单机几十万并发的系统JVM如何优化?索尼发布新款 PS5:采用可拆卸光驱,体积更小、重量更轻字节跳动微服务架构下的高性能优化实践5116 血壮山河之武汉会战 富金山战役 4最近觉得自己很“土”KEDA:基于事件驱动扩展K8S应用的深度实践LinkedIn采用协议缓冲区进行微服务集成,将延迟降低了60%字节二面:10Wqps会员系统,如何设计?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。