Event-Driven Architect
用途
该技能提供事件驱动架构设计与实现方面的专业知识,涵盖消息代理、事件溯源、CQRS,以及 CloudEvents、AsyncAPI 等标准,用于构建可扩展、解耦的系统。
适用场景
在以下情况调用本技能:
- 设计事件驱动架构
- 实现消息队列与消息代理
- 构建事件溯源系统
- 实现 CQRS 模式
- 创建 AsyncAPI 规范
- 设计事件网格(Event Mesh)拓扑
- 构建异步微服务
在以下情况不要调用本技能:
- 构建同步 REST API(改用 api-designer)
- 搭建 Kafka 基础设施(改用 data-engineer)
- 构建工作流编排(改用 workflow-orchestrator)
- 设计 GraphQL API(改用 graphql-architect)
决策框架
消息代理选择:
- 高吞吐、流式处理 → Kafka
- 灵活路由 → RabbitMQ
- 云原生、无服务器 → EventBridge、Pub/Sub
- 简单排队 → SQS、Redis Streams
- 企业集成 → Azure Service Bus
模式选择:
- 需要审计/回放 → 事件溯源
- 读写分离 → CQRS
- 简单异步 → 发布/订阅
- 保证投递 → 事务性发件箱(Transaction Outbox)
- 复杂路由 → 消息路由器
核心工作流
- 事件驱动系统设计
- 识别领域事件
- 定义事件模式(CloudEvents)
- 选择消息代理
- 设计主题/队列结构
- 定义消费者组
- 规划死信处理
- 使用 AsyncAPI 编写文档
- 事件溯源实现
- 定义聚合边界
- 设计事件类型
- 实现事件存储
- 构建投影处理器
- 创建读模型
- 处理模式演进
- 规划快照策略
- AsyncAPI 规范
- 定义服务器与协议
- 描述通道(主题/队列)
- 定义消息模式
- 记录操作(发布/订阅)
- 添加安全方案
- 生成文档
- 启用代码生成
最佳实践
- 使用 CloudEvents 格式以实现互操作性
- 设计幂等消费者
- 实现死信队列
- 谨慎地对事件模式进行版本管理
- 监控消费者滞后(consumer lag)
- 为至少一次投递做好规划
反模式
反模式 | 问题 | 正确做法
- 以同步方式实现异步 | 违背初衷 | 使用合适的模式
- 无幂等性 | 重复处理 | 设计幂等处理器
- 忽略顺序 | 数据一致性告警 | 如需要则按 key 分区
- 事件体过大 | 网络开销 | 使用小事件,按需获取详情
- 无模式演进 | 破坏性变更 | 制定版本策略