Architecture 考试频率 ⭐⭐⭐⭐⭐

解耦与事件驱动架构

Decoupling & Event-Driven Architecture

ArchitectureDecouplingEvent-Driven
最近整理

通过队列、事件与稳定契约拆开上下游的速度、故障和扩缩边界。

基本信息

字段内容
英文Decoupling & Event-Driven Architecture
全称Decoupling & Event-Driven Architecture
中文释义解耦与事件驱动架构
日文释义疎結合とイベント駆動
考试频率⭐⭐⭐⭐⭐
易混淆同步调用

一句话理解

用队列和事件降低组件之间的直接依赖。

核心作用

  • 降低生产者与消费者之间的直接依赖。
  • 缓冲突发流量,让上下游按各自速度工作。
  • 隔离局部故障,避免一个组件变慢拖垮整条链路。
  • 让服务可以独立部署、扩缩和重试。

紧耦合与松耦合

维度紧耦合松耦合
调用关系组件直接依赖对方地址与可用性通过队列、事件或中间层交互
失败影响容易级联失败可通过缓冲、重试与隔离缩小影响
扩缩上下游往往需要同步扩缩生产端与消费端可独立扩缩
一致性较容易立即返回结果通常需要接受异步与最终一致性

同步与异步

  • 同步调用:调用方等待结果,适合需要立即响应的短链路。
  • 异步调用:调用方提交任务后继续工作,适合耗时、可重试、突发或无需立即返回的处理。
  • 解耦不等于所有场景都必须异步;应根据响应时效、一致性与故障边界选择。

常见 AWS 模式

  • SQS:队列、缓冲、削峰、消费者 Pull。
  • SNS:Topic、Push、Pub/Sub、Fan-out。
  • EventBridge:Event Bus 按事件内容和规则路由。
  • Step Functions:显式编排多步骤工作流与状态。

可靠处理要点

  • 至少一次投递场景需要消费者具备幂等性。
  • Visibility Timeout 应覆盖处理时间;失败消息通过重试和 DLQ 隔离。
  • 监控队列积压、最旧消息年龄、失败率与处理延迟。
  • 设计 Backpressure,避免上游无限制地产生下游无法消费的任务。

工作中的应用场景

  • 下单接口先写入 SQS,订单 Worker 按自己的吞吐处理。
  • SNS Fan-out 把同一业务事件送入多个独立 SQS 队列。
  • EventBridge 根据事件类型路由到 Lambda、SQS 或 Step Functions。
  • SQS 触发 Lambda 批量处理消息;成功后删除,失败后重试。

工作原理

Producer 发布消息或事件 → 中间服务保存或路由 → Consumer 独立拉取 / 接收并处理 → 成功确认,失败重试或进入 DLQ。

Cloud Practitioner 考点

  • SQS = 排队与缓冲;SNS = 广播;EventBridge = 规则路由。
  • 松耦合可以提高弹性与故障隔离。
  • 队列能削峰,但不会自动修复消费者逻辑。

SAA-C03 考点

  • 根据 Backlog、Fan-out、Event Pattern 等关键词选服务。
  • SQS Standard 可能重复投递,消费者需幂等。
  • Visibility Timeout、DLQ、Redrive Policy、Long Polling。
  • 同步改异步时考虑最终一致性、重试和顺序。

常见误区

  • 松耦合不等于“没有依赖”,而是让依赖通过稳定契约和中间层管理。
  • SQS 不是广播;SNS 不是传统持久队列;EventBridge 不主要解决积压缓冲。
  • 重试次数越多并不一定越可靠,必须防止重试风暴与毒消息。

易混淆服务

SQS vs SNS vs EventBridge;编排(Step Functions)vs 事件路由(EventBridge);同步请求 vs 异步任务。

面试高频问题

  • 为什么在两个服务之间增加队列?
  • 如何保证重复消息不会重复扣款或重复创建订单?
  • 队列积压持续上升时如何定位瓶颈?
  • 什么时候直接同步调用比事件驱动更合适?

重点记忆

解耦 = 独立变化 + 故障隔离 + 独立扩缩;可靠异步 = 幂等 + 重试 + DLQ + 监控。

关联服务

Amazon SQS、Amazon SNS、Amazon EventBridge、AWS Lambda、AWS Step Functions、Amazon CloudWatch。

官方参考