Files
nexus/wiki/concepts/Event-Driven-Architecture.md

109 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 QueueDLQ**:处理失败事件,防止消息丢失
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]]