4.7 KiB
4.7 KiB
title, type, tags, sources, last_updated
| title | type | tags | sources | last_updated | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Event-Driven Architecture | concept |
|
|
2026-05-05 |
Definition
Event-Driven Architecture(事件驱动架构)是一种软件设计范式,在该模式下,系统组件通过产生和消费事件(Event)进行异步通信,而非通过直接的函数调用或请求-响应模式。事件是系统中发生的重要动作或状态变化的声明式通知,事件消费者无需知道事件产生者的存在。
Core Principles
| 原则 | 描述 |
|---|---|
| 异步通信 | 生产者和消费者解耦,无需同步等待响应 |
| 事件声明 | 事件代表"发生了什么",而非"该做什么" |
| 松耦合 | 生产者和消费者之间无直接依赖 |
| 可扩展 | 新增消费者无需修改生产者代码 |
Event Anatomy
典型事件包含:
{
"event_id": "uuid",
"event_type": "ORDER_CREATED",
"source": "order-service",
"timestamp": "2026-04-14T10:00:00Z",
"data": { /* 业务相关数据 */ }
}
AWS Event-Driven Stack
| 组件 | 角色 | 说明 |
|---|---|---|
| Amazon-EventBridge | 事件总线 | 接收、过滤、路由事件到目标 |
| AWS-Lambda | 事件消费者 | 响应事件执行处理逻辑 |
| Amazon-SNS | 事件发布/订阅 | 一对多广播消息 |
| Amazon-SQS | 事件队列 | 可靠的事件持久化和顺序处理 |
| Amazon-DynamoDB | 事件源 | DynamoDB Streams 触发 Lambda |
| Amazon-S3 | 事件源 | S3 事件通知触发 Lambda |
Serverless 中的事件驱动
AWS-Lambda 是事件驱动架构的核心执行单元:
- 事件即触发器:Lambda 函数不主动运行,由事件触发
- 事件源映射:Lambda 轮询 Kinesis、DynamoDB Stream、SQS 获取事件
- 状态变化即事件:S3 对象上传、API Gateway 请求、DynamoDB 写入等均为事件
Event Patterns
EDA 三组件与事件代理类型
| 组件 | 角色 | 说明 |
|---|---|---|
| 事件生产者(Producer) | 产生事件 | 服务检测到状态变化时发布事件 |
| 事件消费者(Consumer) | 消费事件 | 订阅并处理事件,执行对应业务逻辑 |
| 事件代理(Broker) | 路由/存储 | 分事件路由器和事件存储两类 |
事件路由器(Event Routers)——按规则过滤事件并路由到正确消费者:
- Amazon-EventBridge:更丰富,支持 Schema 注册、跨服务触发
- Amazon-SNS:一对多广播(Fan-out)
事件存储(Event Stores)——流式持久化事件,消费者自行过滤:
- Amazon-SQS:标准队列(乱序/高性能)/ FIFO 队列(有序/Exactly-Once)
- Kinesis-Data-Streams:有序事件流,支持重放
编排模式:Choreography vs Orchestration
| 模式 | 特点 | 适用场景 |
|---|---|---|
| Choreography(编排) | 各微服务自主通信,无中央协调者 | 简单、独立的跨服务交互 |
| Orchestration(编排) | 中央协调者(如 AWS-Step-Functions)控制工作流步骤 | 复杂业务流程、需要事务保障 |
生产级最佳实践
-
幂等性(Idempotency):同一操作执行一次或多次产生相同结果。AWS-Lambda 异步调用会自动重试,因此幂等性是处理重复消息的关键——尤其适用于订单、支付等场景。
-
事件排序:
- 有序:SQS FIFO 或 Kinesis Data Streams
- 乱序可接受:标准 SQS 或 EventBridge(消费者自行处理乱序)
-
团队独立性:采用去中心化所有权,平台团队提供基础设防(Cloud CoE),消费者团队自主按需消费事件。
Event Patterns
- Pub/Sub:SNS 主题广播,多消费者订阅同一事件类型
- Event Streaming:Kinesis/DynamoDB Stream 持久化事件流,支持重放
- Fan-Out:SNS 主题或 EventBridge 规则将事件分发到多个消费者
- Competing Consumer:同一消息同一时间只有一个消费者处理(SQS)
- Dead-Letter Queue(DLQ):处理失败事件,防止消息丢失
- Saga Pattern:通过事件序列协调分布式事务
- Event Sourcing:完整记录所有状态变化事件作为唯一真相来源
Connections
- Event-Driven-Architecture ← is_execution_model_of ← Serverless-Computing
- Event-Driven-Architecture ← uses ← Amazon-EventBridge
- Event-Driven-Architecture ← executed_by ← AWS-Lambda