事件驱动架构图解——生产、发布、消费 · 思维导图

事件驱动架构图解——生产、发布、消费. 可编辑的思维导图,以彩色分支、子主题和曲线连接呈现想法。 曲线表示联系;只有方向重要时才使用箭头。

事件驱动架构靠事件让系统之间通信,从而实现解耦:生产者发布已经发生的事,总线把它路由给订阅者,事件存储则保留这段历史。

事件驱动架构图解——生产、发布、消费 · 思维导图

The interactive MindMap canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.

如何阅读这张思维导图

  • 从中心主题开始,沿着彩色分支探索相关想法。
  • 曲线表示联系;只有方向重要时才使用箭头。

Producers

这一分支汇集 “An event records something that HAPPENED — “order placed”, “user updated” — not an instruction to anyone in particular. Producers don't know who is listening.”.

Event bus

这一分支汇集 “Events are published to the bus”, “The bus decouples producers from consumers: a producer keeps publishing whether or not any consumer is ready, and consumers subscribe to the events they care about.”.

Consumers

这一分支汇集 “Consumers process events asynchronously”, “The test of the architecture: add a service that reacts to existing events, and not one producer changes. This is the flexibility the pattern buys.”.

Event history

这一分支汇集 “The event log is the system of record: every state change, in order, forever. Current state is a projection that can be rebuilt from it.”, “Events can be replayed for audit or recovery”.

跨分支联系

事件记录的是已经发生的事;它不是给某个特定对象的命令。

总线把生产者和消费者解耦——双方都不知道对方的身份和节奏。

事件存储让这段历史成为可以重放的权威记录。

消费者是异步的:慢的消费者永远不会阻塞生产者。

新消费者靠订阅接入——这套架构关于灵活性的全部主张都建立在这一点上。

Key relationships and takeaways

  • 事件记录的是已经发生的事;它不是给某个特定对象的命令。
  • 总线把生产者和消费者解耦——双方都不知道对方的身份和节奏。
  • 事件存储让这段历史成为可以重放的权威记录。
  • 消费者是异步的:慢的消费者永远不会阻塞生产者。
  • 新消费者靠订阅接入——这套架构关于灵活性的全部主张都建立在这一点上。

When to use this visual

  • 向一个正从请求/响应转向事件的团队,讲清楚生产者、总线与消费者这套划分。
  • 设计一次新的集成:事件存储能回答历史是需要保留,还是消费完即弃。
  • 审视一套已有的事件驱动系统,找出那个经典的失败——一个名义上的消费者,实际上是同步依赖。

运作方式

  1. 调整中心主题

    根据项目或课程修改中心主题的名称。

  2. 扩展分支

    编辑想法并添加示例或注释。

  3. 连接相关想法

    绘制跨分支连接;只有方向重要时才使用箭头。

常见问题

什么是事件驱动架构?

它是一种架构风格:组件之间通过发布和订阅事件来通信,而不是互相直接调用。一个创建或改变了什么的服务,会发布一个描述已发生之事的事件;总线把它路由给每一个关心它的订阅者;事件存储则保留这段历史。因为生产者从不点名自己的消费者,系统可以在不触碰已有部分的情况下继续生长。

命令和事件有什么区别?

命令是发给某个特定接收方的指令——“处理这个订单”——并且期待一个结果。事件则是一条记录,说明某件事已经发生——“订单已下单”——它不点名任何接收方。这个区分之所以重要,是因为命令把发送方耦合到接收方,而事件让接收方可以自由变化。图上的生产者只发出事件,这正是让总线保持松耦合的原因。

事件存储是干什么用的?

事件存储是系统留存下来的历史:每一个事件,按顺序,永久保留。它有三个用途——审计(什么时候发生了什么)、恢复(通过重放事件重建一个服务的状态),以及可扩展性(新的消费者可以读过去的事件来追平)。图上把它画成下面那条分支,因为它是对同一批事件的另一种用法,而消费者是实时处理这些事件的。

事件驱动架构有哪些故障模式?

经典的几种是:事件被重复投递(所以消费者必须幂等)、事件被乱序处理(所以消费者必须处理顺序问题),以及死信队列(反复失败的事件)。图上那种异步处理正是让这些变得可控的原因——消费者可以重试而不阻塞生产者——这也是为什么操作步骤里的故障分支是这套设计务实的另一半。

在 QueryChart 中编辑此思维导图

在可编辑画布中打开思维导图。移动想法、添加分支并绘制连接。

在 QueryChart 中编辑此思维导图

思维导图中的更多内容