--- title: "Event-Driven Architecture" type: concept tags: - Architecture - Event-Driven - Serverless - AWS sources: - public-cloud-learning-sessions-opentext-serverless-computing-20240903-160139-mee - public-cloud-learning-sessions-opentext-event-driven-architecture-part-1-2024091 - public-cloud-learning-sessions-opentext-event-driven-architecture-part-2-2024091 last_updated: 2026-05-05 --- ## Definition Event-Driven Architecture(事件驱动架构)是一种软件设计范式,在该模式下,系统组件通过产生和消费事件(Event)进行异步通信,而非通过直接的函数调用或请求-响应模式。事件是系统中发生的重要动作或状态变化的声明式通知,事件消费者无需知道事件产生者的存在。 ## Core Principles | 原则 | 描述 | |------|------| | 异步通信 | 生产者和消费者解耦,无需同步等待响应 | | 事件声明 | 事件代表"发生了什么",而非"该做什么" | | 松耦合 | 生产者和消费者之间无直接依赖 | | 可扩展 | 新增消费者无需修改生产者代码 | ## Event Anatomy 典型事件包含: ```json { "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]])控制工作流步骤 | 复杂业务流程、需要事务保障 | ## 生产级最佳实践 1. **幂等性(Idempotency)**:同一操作执行一次或多次产生相同结果。[[AWS-Lambda]] 异步调用会自动重试,因此幂等性是处理重复消息的关键——尤其适用于订单、支付等场景。 2. **事件排序**: - **有序**:SQS FIFO 或 Kinesis Data Streams - **乱序可接受**:标准 SQS 或 EventBridge(消费者自行处理乱序) 3. **团队独立性**:采用去中心化所有权,平台团队提供基础设防(Cloud CoE),消费者团队自主按需消费事件。 ## Event Patterns 1. **Pub/Sub**:SNS 主题广播,多消费者订阅同一事件类型 2. **Event Streaming**:Kinesis/DynamoDB Stream 持久化事件流,支持重放 3. **Fan-Out**:SNS 主题或 EventBridge 规则将事件分发到多个消费者 4. **Competing Consumer**:同一消息同一时间只有一个消费者处理(SQS) 5. **Dead-Letter Queue(DLQ)**:处理失败事件,防止消息丢失 6. **Saga Pattern**:通过事件序列协调分布式事务 7. **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]]