DVA-C03 · LESSON 1

使用 AWS 服务开发30% · 3 个主题

使用有上限的退避处理 SDK 临时错误。考虑 SQS 重投递,以条件写入保证订单幂等。根据访问模式选择 DynamoDB 键和索引,区分 Query 与 Scan。

1.1正确实现事件和数据操作

概念

使用有上限的退避处理 SDK 临时错误。考虑 SQS 重投递,以条件写入保证订单幂等。根据访问模式选择 DynamoDB 键和索引,区分 Query 与 Scan。

原理、步骤

  1. 先写出需求和成功标准。
  2. 在测试环境操作,保留成功与失败证据。
  3. 检查结果后,使用下方领域练习验证判断。

工作中的示例

投递重复订单事件,验证保存数量及重试结果。

易混淆点、考试注意事项

小测验

Q1. 希望用 Auto Scaling 水平扩展 EC2 上的 Web 应用。登录状态保存在服务器内存中,服务器数量变化时用户会被登出。最合适的对策是哪一项?

  1. 把会话信息保存在 ElastiCache 或 DynamoDB 中,使服务器无状态
  2. 请用户修改浏览器设置,不保存登录状态
  3. 禁用 ALB 运行状况检查,固定服务器使 Auto Scaling 不替换它们
  4. 停用 Auto Scaling,用一台最大的实例运行
查看答案和解析

正确答案:A 把会话信息保存在 ElastiCache 或 DynamoDB 中,使服务器无状态

把会话放在外部数据存储中,任何服务器都能处理同一会话,从而可以自由增减服务器。粘性会话只是临时的变通办法。

Q2. 接收图片上传的 API 因生成缩略图耗时太长而响应超时。最合适的改进方法是哪一项?

  1. 把 API 超时延长到 1 小时,让用户等待
  2. 接收后立即响应,缩略图生成通过 SQS 等异步处理
  3. 停止生成缩略图,直接显示原图
  4. 把 API 服务器改为最大实例类型,继续同步生成缩略图
查看答案和解析

正确答案:B 接收后立即响应,缩略图生成通过 SQS 等异步处理

把耗时处理与接收分离并异步执行,可以加快响应,处理端也能独立扩展。

参考链接

1.2设计可扩展、松耦合的架构

概念

松耦合是在组件之间放置 SQS(队列)、SNS(通知)或 EventBridge(事件),使一方的延迟或故障不会波及另一方。让处理无状态,把会话放在 ElastiCache 或 DynamoDB 中,用 Auto Scaling 水平扩展。无服务器(Lambda、API Gateway、Step Functions)和容器(ECS、EKS、Fargate)也是可选方案。

原理、步骤

  1. 必要时把同步调用改为经过 SQS 的异步处理
  2. 把一个事件分发给多个处理时,从 SNS 发往多个 SQS(扇出)
  3. 让应用无状态,把会话放在外部
  4. 以 SQS 队列长度等为指标进行 Auto Scaling
  5. 用 Step Functions 控制多个步骤,并定义失败时的重试

工作中的示例

订单发布到 SNS,扇出到库存、计费、通知各自的 SQS,各处理独立扩展。即使计费处理停止,订单也会留在队列中。

易混淆点、考试注意事项

小测验

Q1. 你正在设计使用队列的异步处理。请选出关于 Amazon SQS 的错误说法。

  1. 消息在接收者删除前,会在保留期内留在队列中
  2. 可以吸收发送方和接收方处理速度的差异,实现松耦合
  3. 可以用死信队列转移持续处理失败的消息
  4. 标准队列始终严格保证消息的发送顺序
查看答案和解析

正确答案:D 标准队列始终严格保证消息的发送顺序

标准队列是尽力而为的顺序,需要严格顺序时用 FIFO 队列。

Q2. 你正在构建无服务器处理。关于 Lambda 的限制或计费,错误的说法是哪一项?

  1. 可以由 S3、SQS、EventBridge 等多种服务的事件触发运行
  2. 按调用次数和执行时间(单价取决于内存大小)计费
  3. 单次执行时间没有上限,几小时的批处理也能直接运行
  4. 可以配置为访问 VPC 内的资源
查看答案和解析

正确答案:C 单次执行时间没有上限,几小时的批处理也能直接运行

Lambda 最长执行时间为 15 分钟。长时间处理用 Step Functions 拆分,或使用 ECS/Fargate、AWS Batch。

参考链接

1.3确定高性能的数据库方案

概念

扩展读取用 RDS 和 Aurora 只读副本(Aurora 最多 15 个),频繁读取的缓存用 ElastiCache(Redis、Memcached),DynamoDB 的微秒级读取用 DAX。连接数激增用 RDS Proxy,不可预测的负载用 Aurora Serverless v2;大规模键值场景下,DynamoDB 分区键的设计决定性能。

原理、步骤

  1. 确认读写比例和延迟要求
  2. 读取多时使用只读副本或缓存
  3. 来自 Lambda 的大量连接用 RDS Proxy 汇集
  4. DynamoDB 选择访问不偏斜的分区键,必要时加上 DAX
  5. 全球低延迟读取使用 Aurora Global Database 或 DynamoDB 全局表

工作中的示例

商品详情页的读取占数据库负载的 90%,因此把结果缓存在 ElastiCache 中,库存更新写入主实例。

易混淆点、考试注意事项

小测验

Q1. 仅在订单 ID 尚不存在时创建 DynamoDB 订单,应使用什么?

  1. 根据 TTL 删除时间判断重复
  2. 使用 ConditionExpression 条件写入
  3. 读取后执行无条件 PutItem
  4. 通过 Scan 结果数量判断
查看答案和解析

正确答案:B 使用 ConditionExpression 条件写入

原子条件写入可避免先读后写的竞争。

Q2. 希望提高 DynamoDB 性能。除分区键(客户 ID)外,还想按订单日期检索。目前是扫描整张表,很慢。最合适的是哪一项?

  1. 按需容量模式
  2. DynamoDB Streams
  3. 全局二级索引(GSI)
  4. DynamoDB Accelerator(DAX)
查看答案和解析

正确答案:C 全局二级索引(GSI)

GSI 支持按不同的分区键和排序键查询,可以避免扫描。

参考链接

课程由本站根据公开信息独立编写,不保证与考试内容一致。产品规格可能变化,请在参考链接中确认最新信息。

使用须知(非官方、原创题目、不保证合格)