当前位置: 首页 > article >正文

一次线上事故,我学到了事件驱动架构的5个教训

凌晨3点17分监控大屏突然一片血红。用户订单成功了但库存没扣、支付没扣、物流没发...上百万的交易数据人间蒸发。排查结果让所有人傻眼只是一个无关紧要的代码改动让整个事件驱动系统安静地死亡了——没有报错没有日志就像什么都没发生过。1 那个让我们全员进制服的夜晚2025 年 12 月 12 日双 12 大促。凌晨 2:47我正在值班室刷手机突然手机疯狂震动 监控告警订单事件处理量 0 监控告警库存事件处理量 0 监控告警支付回调处理量 0 监控告警物流通知处理量 0我瞬间清醒裤子都没穿好就冲进了机房。发生了什么用户下单成功了订单服务正常返回了。但后续所有流程 - 库存扣减、支付处理、物流通知、短信推送 - 全都消失了。后来排查发现只是因为某个同事修改了一行看似无关紧要的日志打印代码。导致事件总线初始化失败。最恐怖的是系统没有任何报错它只是安静的不工作了。这就是事件驱动EDA最可怕的地方传统架构某个服务挂了你会收到报错事件驱动架构事件总线挂了所有人都相安无事2 消息重复消费 - 用户收到 5 条扣款短信2.1 发生了什么大促高峰期某用户手机突然收到了 5 条“库存已扣减”的短信。投诉电话被打爆。2.2 根因分析消息队列的“至少投递一次”语义 消费者没有“去重保护” 用户收到5条消息2.3 怎么解决核心原则消费者必须幂等方案一数据库唯一键重复插入 报错方案二Redis 缓存已存在 跳过方案三业务状态机已经是 RESERVED 跳过3 时间丢失 - 127笔订单“成功”但没付款3.1 发生了什么财务对账时发现当天 127 笔订单显示“成功”但数据库里没有任何支付记录。顺着链路查下去订单服务确实发布了事件但支付服务所在的服务器正好在发版重启消息还没来得及处理就丢了...3.2 根因分析发布时没持久化消费失败直接丢弃网络抖动丢消息3.3 怎么解决核心原则宁可慢也不能丢发布时先持久化再发送消费失败重试 死信死信队列人工兜底时间乱序 - 后下的单先发货4.1 发生了什么用户投诉命名先下的单 A后下的单 B为什么 B 先发货了排查发现订单 A 和订单 B 的时间恰好被分发到不同的消费者分区加上高峰期处理延迟不同事件处理顺序完全乱套。4.2 根因分析事件乱序大有可能因为消息队列分区策略轮询将订单 A 分发到了处理速度慢的消费者所监听的分区订单 B 分发到了处理速度快的消费者所监听的分区。导致了订单 B 比订单 A 先处理完。4.3 怎么解决核心原则同一个订单的时间必须交给同一个消费者处理方案分区键可以通过订单 ID 作为分区键同一个订单的所有事件一定进入同一个分区备选方案消费者端排序通过事件序列号消费者收到后按照 seq 排序再处理5 事件循环 - CPU 100%罪魁祸首5.1 发生了什么监控显示某个服务器 CPU 100%内存持续飙升。日志显示同一个事件被反复处理每秒数万次。最终定位订单服务发布“订单已创建”事件触发通知服务发送短信通知服务发完短信后发布“通知已发送”事件订单服务订阅了这个事件一激动又发布了“订单已创建”事件...无限循环开始5.2 根因分析订单服务发布了 order 事件会触发服务通知服务通知发布了 notify 事件同时订单服务订阅了 notify 事件循环启动每秒数万次直到服务器挂掉5.3 怎么解决核心原则要么预防要么检测方案一状态机控制订单的状态不可逆CREATED ──▶ STOCK_RESERVED ──▶ PAID ──▶ SHIPPED ──▶ COMPLETED只有 CREATED 状态才能处理 order.created 事件如果已经是 STOCK_RESERVED收到 order.created 直接忽略方案二循环检测最简单的计数器机制就可以做到计数器机制如下方案三过滤末端事件定义一些事件不要二次触发其他事件6 根本不知道卡在哪 30 分钟的订单6.1 发生了什么一个订单处理了30分钟还没完成。中间经过订单服务 → 库存服务 → 支付服务 → 物流服务 → 通知服务...每个服务都说处理成功了但整体就是慢。根本不知道卡在哪一步。传统请求请求A ──▶ 服务1 ──▶ 服务2 ──▶ 服务3 ──▶ 响应请求到哪了一目了然事件驱动事件A ──▶ 队列 ──▶ [?][?][?] ──▶ [?][?]事件去哪了谁都不知道找不到问题才是最可怕的问题6.3 怎么解决核心原则全链路追踪TraceID 贯穿始终任何一步出问题都可以用 trace:nb123 搜到所有相关日志7 避坑 checklistEDA 保命 checklist消费者实现幂等性了吗 - 用唯一键 / Redis / 状态机防止重复处理消息持久化了吗- 先写数据库再发消息队列失败重试 死信队列有了吗 - 超过3次进 DLQ人工处理同一订单的事件进同一分区了吗 - 用业务 ID 做分区键状态机防止事件循环了吗 - 状态不可逆跳过非法转换全链路追踪配了吗 - traceId 贯穿所有服务8 最后的忠告事件驱动架构是双刃剑好处坏处系统松耦合问题难排查性能高容易丢消息扩展性强容易损坏容错性好容易重复我的建议从小功能开始试 ---别一上来就该核心流程监控告警先做好 ---上线前先把追踪搭建好逐步前进--- 一个服务一个服务的迁移宁可慢也不要丢凌晨3点的那些教训现在都变成这篇文章了。觉得有用点个赞再走

相关文章:

一次线上事故,我学到了事件驱动架构的5个教训

凌晨3点17分,监控大屏突然一片血红。用户订单"成功"了,但库存没扣、支付没扣、物流没发...上百万的交易数据人间蒸发。排查结果让所有人傻眼:只是一个"无关紧要"的代码改动,让整个事件驱动系统安静地"死…...

JetBrains IDEs官宣 实验性 AI 功能:Recap 与 Insights 详解

前言 JetBrains IDEs 已经提供了丰富的 AI 功能,从代码自动补全到代码生成和解释。2026年3月,JetBrains 推出了两款主动式 AI 功能实验插件——Recap(回顾)和Insights(洞察),为开发者带来全新的…...

【靶点筛选样本前处理①】细胞膜蛋白的全流程提取实操:标准化制备及验证

引言 在多组学与空间蛋白质组学研究中,依赖全细胞裂解液的蛋白分析范式已显现显著局限 —— 其不仅会稀释低丰度亚细胞定位蛋白,还会完全掩盖细胞内蛋白转位事件,高纯度的细胞亚组分提取,已成为Western Blot、免疫共沉淀&#xf…...

老码农和你一起学AI系列:语言模型采样方法

语言模型在生成文本时,每一步都会计算出下一个词的概率分布(比如“吃”:0.4,“喝”:0.3,“玩”:0.2……)。那么,具体选哪个词作为输出呢?这就涉及采样方法。根…...

CSDN一亿技术人员的千载难逢机遇:个人如何转型,平台如何进化

CSDN一亿技术人员的千载难逢机遇:个人如何转型,平台如何进化 2026年,中国技术圈正在经历一场前所未有的范式转移。 这不是一次技术迭代,不是一次框架升级,不是一次语言更替——而是一次权力结构的根本性重构。 当大…...

SRMAS工作室简介

小红书、抖音 搜‘科研连连看’ ‘srmas工作室’ SRMAS英文全称Smart Research Multi Agent System,是多智能体协作(MAS)驱动的专业生产力实验室.一 定位srmas工作室是一家专注于复杂逻辑自动化与多智能体协同的技术工作室。通过自研的可视化 Mul…...

经典2DMMORPG手游【石器时代H5内购版】服务端图文手工搭建教程

游戏截图搭建环境信息 系统:Centos 7.6 配置:2核4G内存 搭建资源获取 资源网站:www.woniuyxdj.cn 宝塔面板安装 通用自动安装命令 if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O in…...

2026大专国际经济与贸易就业方向有哪些?

2026年企业对于国贸类岗位的描述越来越清晰。外贸业务、跟单、报关报检等传统岗位的需求持续存在,具备实务经验的求职者往往能获得更多的面试机会。与此同时,随着跨境电商和各类新业态的快速发展,涉及海外市场运营、数字营销等方向的新岗位也…...

越南《人工智能法》具体内容详解(附中越互译)

越南《人工智能法》(第134/2025/QH15号)于2025年12月10日由越南国会以90.70%的高赞成率表决通过,2026年3月1日正式生效,共8章35条,是东盟首部全面规范人工智能领域的专项法律。该法以“管理以促进发展”为核心方针,在风险管控与创新激励间寻求平衡,既借鉴国际惯例,又立…...

习题3.12 另类循环队列

习题3.12 另类循环队列分数 20作者 DS课程组单位 浙江大学如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。函数接口定义:bool AddQ(…...

springboot+vue预报名管理系统--毕业论文

目录系统设计与技术选型需求分析与功能模块数据库设计后端实现前端实现系统安全与优化测试与部署总结与展望项目技术支持源码LW获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统设计与技术选型 阐述SpringBoot和Vue的技术优势,说…...

【AI】大语言模型 (LLM) 产品的开发流程参考

🔥小龙报:个人主页 🎬作者简介:C研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《AI》 ✨ 永远相信美好的事情即将发生 文章目录前言一、个人开发者的大语言模型 (LLM) 产品的开发流程参考1.1 准…...

网络协议红蓝对抗:从TCP重传到QUIC的可靠性战争

网络协议红蓝对抗:从TCP重传到QUIC的可靠性战争原创深度技术长文 | 14,200字 | 含6大协议栈剖析、5个网络故障实验、4段可复现抓包分析 本文以高强度红蓝对抗形式,深入网络协议栈最核心战场——可靠性机制。从TCP的超时重传、快速恢复,到HTTP…...

文件系统红蓝对抗:从ext4到ZFS的数据持久性战争

文件系统红蓝对抗:从ext4到ZFS的数据持久性战争原创深度技术长文 | 13,800字 | 含7大文件系统对比、5个数据损坏实验、4段可复现代码 本文以高强度红蓝对抗形式,深入剖析ext4、XFS、Btrfs、ZFS、NTFS等主流文件系统在数据持久性、崩溃一致性、性能权衡上…...

操作系统红蓝对抗:从页表到调度器的血性博弈

操作系统红蓝对抗:从页表到调度器的血性博弈原创深度技术长文 | 13,200字 | 含8大核心机制剖析、6段可运行代码、5个性能陷阱预警 本文以高强度红蓝对抗形式,深入操作系统内核最敏感区域——内存管理、进程调度、中断处理、同步原语等核心子系统。通过1v…...

MySQL--八股文(一)

一、什么是MySQL?二、MySQL常用的储存引擎有什么?它们有什么区别?三、数据库的三大范式有哪些?四、MySQL的数据类型有哪些?五、索引六、B树和B树一、什么是MySQL?MySQL是一种开放源代码的关系型数据库管理系…...

(论文速读)SFAFBR:一种自监督的人工特征偏置校正框架

论文题目:Artificial Feature Bias Rectified by Self-Supervised Learning for Rolling Bearings Fault Diagnosis Under Limited Labeled Vibration Signals(有限标记振动信号下滚动轴承故障诊断的自监督学习修正人工特征偏差)期刊&#xf…...

从0实现OnCall基于Python语言框架

Step01第一步做的事情,先把 Python 版 OnCall 的后端外壳搭起来。也就是说,先验证了一件最关键的事:这个项目能不能先以 Python 服务的形式真正跑起来,并且具备最基础的对外通信能力。只有这一步成立,后面接模型、接 R…...

计院操作系统实验10

基于QEMU将UART串口重定向至控制台的实现,使用UART串口作为输入设备,通过设置信号量和中断,每次用户输入字符串,GIC会接收到中断号33,随后调用shell进程存储输入至缓冲区并在控制台上回显输入,实现简单的sh…...

[特殊字符] OpenClaw(小龙虾)CentOS 7 完整安装手册

🔧 **适用系统**:CentOS 7.x(本文基于 CentOS 7.9 编写) 🏗️ **架构要求**:x86_64 👤 **操作用户**:root(为简化操作,本文全程使用 root 用户&#xff0…...

打不开游戏提示缺少D3DCompiler_47.dll文件 分享免费下载

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…...

【小程序】✈️一口气用AI肝了50+功能的小程序(已上线)

💥💥✈️✈️欢迎阅读本文章❤️❤️💥💥 🏆本篇文章阅读大约耗时5分钟。 ⛳️motto:不积跬步、无以千里 📋📋📋本文目录如下:🎁🎁&am…...

构建StructBERT模型集群:负载均衡与高可用部署架构

构建StructBERT模型集群:负载均衡与高可用部署架构 最近和几个做企业服务的同行聊天,大家普遍遇到一个头疼的问题:单个模型服务扛不住业务高峰期的流量。平时跑得好好的,一到促销或者活动,服务就卡顿甚至挂掉&#xf…...

Emoji国旗代码大全:如何在网页和App中正确显示各国旗帜(附完整Unicode列表)

Emoji国旗代码实战指南:跨平台兼容方案与Unicode最佳实践 在全球化数字产品设计中,emoji国旗已成为用户界面不可或缺的视觉元素。从社交平台的用户国籍标识到电商网站的物流追踪,这些彩色小旗帜背后却隐藏着令人头疼的技术挑战——不同设备显…...

Qwen3-VL-2B-Instruct如何保护隐私?数据安全指南

Qwen3-VL-2B-Instruct如何保护隐私?数据安全指南 在AI应用日益普及的今天,我们享受技术便利的同时,也面临着数据隐私的挑战。当你使用一个能“看懂”图片的AI模型时,一个核心问题自然浮现:我上传的图片和数据安全吗&a…...

Coze-Loop游戏AI开发:强化学习算法加速

Coze-Loop游戏AI开发:强化学习算法加速 1. 引言 游戏AI开发正在经历一场革命性的变化。传统的游戏AI往往依赖于预设的行为树和有限状态机,虽然稳定可控,但缺乏真正的智能和适应性。随着强化学习技术的成熟,我们现在可以创建能够…...

哪吒监控面板SSH功能安全关闭指南:保护你的VPS不被入侵

哪吒监控面板SSH功能安全管理全指南 对于使用哪吒监控面板的VPS管理员来说,SSH功能的安全管理是一个需要谨慎对待的议题。这个功能虽然在某些紧急情况下能提供便利,比如服务器失联时的远程访问,但它也可能成为潜在的安全隐患。特别是在当前网…...

2026 论文写作工具实测:Paperxie 领衔 9 款 AI 工具,搞定初稿 / 绘图 / 排版 / AI 率全流程

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippthttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 毕业季的论文焦虑,从来都不是「不会写」,而是「写不完、写不好、通不过」。从选题卡壳到格…...

论文人救星!Paperxie:从初稿到终稿,一站式搞定写作 / 绘图 / 排版 / AI 率

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippthttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 谁懂啊家人们!写毕业论文的苦,只有经历过的人才懂:选题抓耳挠腮、大纲逻辑混乱…...

C#上位机+AI视觉:基于Halcon/OpenCV的工业缺陷检测系统开发(汽车零部件厂真实落地案例 | 附完整可复用代码 | 漏检率从15%降至0.5%)

我在天津滨海新区的汽车密封条厂做了8年工业上位机开发,见过90%的工厂都面临同一个质检痛点: 人工检测密封条的表面划痕、气泡、缺胶,一天8小时盯着看,眼睛花了漏检率高达15%,客户投诉不断; 后来上了一套国外的视觉检测系统,贵得离谱,一套200万,还只能检测一种产品,换…...