事件驱动是什么
事件驱动架构里,组件通过产生与消费事件协作,生产者不直接调用消费者,只把已发生的事实发布到事件通道。它带来松耦合、异步削峰与更好的扩展能力,代价是可观测性、错误处理与一致性复杂度明显上升:事件一旦发出就是契约,顺序、重复与积压都需要专门治理。它既有简单的发布订阅形态,也有以事件流为中心的流处理形态。
基本信息
| 核心元素 | 事件、生产者、消费者、事件通道(消息中间件) |
|---|---|
| 交互方式 | 发布订阅、事件流处理、事件协作 |
| 交付语义 | 至多一次、至少一次、精确一次,实现成本依次递增 |
| 典型收益 | 削峰填谷、松耦合、按消费能力独立扩展 |
| 常见载体 | Kafka、RabbitMQ、Pulsar、云消息服务 |
事件链路治理清单
| 维度 | 要点 |
|---|---|
| 契约 | 事件 schema 版本化,兼容策略(向后、向前)在发布前确定 |
| 幂等 | 消费端按键去重,同一事件重复投递结果一致 |
| 顺序 | 按业务键分区保序,跨业务键并行处理 |
| 追踪 | 关联 ID 贯穿生产到消费,支持端到端定位 |
| 积压 | 消费延迟、死信数量纳入监控并设告警阈值 |
| 回放 | 保留周期与重放流程明确,避免事故后无法重建 |
典型使用场景
- 订单链路解耦:下单成功后发布事件,库存、积分、通知各自消费
- 流量削峰:秒杀请求写入队列,后端按能力匀速处理
- 跨系统集成:以事件代替点对点接口,减少双方发布时间耦合
- 数据同步与物化视图:订阅变更事件维护搜索索引与报表
- 审计与风控:事件流天然形成可追溯的业务轨迹
- 实时计算:对事件流做窗口聚合,产出实时指标
至少一次投递加消费端幂等是工程上最常见的组合;精确一次通常只在特定组件与特定范围内成立,跨系统端到端往往仍需要去重。
事件链路拉长后排障依赖端到端追踪与回放能力,缺少这两项时线上问题定位时间会成倍增加。