DVA-C03 · LESSON 1
使用 AWS 服务开发30% · 3 个主题
使用有上限的退避处理 SDK 临时错误。考虑 SQS 重投递,以条件写入保证订单幂等。根据访问模式选择 DynamoDB 键和索引,区分 Query 与 Scan。
1.1正确实现事件和数据操作
概念
使用有上限的退避处理 SDK 临时错误。考虑 SQS 重投递,以条件写入保证订单幂等。根据访问模式选择 DynamoDB 键和索引,区分 Query 与 Scan。
原理、步骤
- 先写出需求和成功标准。
- 在测试环境操作,保留成功与失败证据。
- 检查结果后,使用下方领域练习验证判断。
工作中的示例
投递重复订单事件,验证保存数量及重试结果。
易混淆点、考试注意事项
- 模拟考试正确率不能换算为官方分数,请以官方文档确认实际服务行为。
小测验
Q1. 希望用 Auto Scaling 水平扩展 EC2 上的 Web 应用。登录状态保存在服务器内存中,服务器数量变化时用户会被登出。最合适的对策是哪一项?
- 把会话信息保存在 ElastiCache 或 DynamoDB 中,使服务器无状态
- 请用户修改浏览器设置,不保存登录状态
- 禁用 ALB 运行状况检查,固定服务器使 Auto Scaling 不替换它们
- 停用 Auto Scaling,用一台最大的实例运行
查看答案和解析
正确答案:A 把会话信息保存在 ElastiCache 或 DynamoDB 中,使服务器无状态
把会话放在外部数据存储中,任何服务器都能处理同一会话,从而可以自由增减服务器。粘性会话只是临时的变通办法。
Q2. 接收图片上传的 API 因生成缩略图耗时太长而响应超时。最合适的改进方法是哪一项?
- 把 API 超时延长到 1 小时,让用户等待
- 接收后立即响应,缩略图生成通过 SQS 等异步处理
- 停止生成缩略图,直接显示原图
- 把 API 服务器改为最大实例类型,继续同步生成缩略图
查看答案和解析
正确答案:B 接收后立即响应,缩略图生成通过 SQS 等异步处理
把耗时处理与接收分离并异步执行,可以加快响应,处理端也能独立扩展。
参考链接
1.2设计可扩展、松耦合的架构
概念
松耦合是在组件之间放置 SQS(队列)、SNS(通知)或 EventBridge(事件),使一方的延迟或故障不会波及另一方。让处理无状态,把会话放在 ElastiCache 或 DynamoDB 中,用 Auto Scaling 水平扩展。无服务器(Lambda、API Gateway、Step Functions)和容器(ECS、EKS、Fargate)也是可选方案。
原理、步骤
- 必要时把同步调用改为经过 SQS 的异步处理
- 把一个事件分发给多个处理时,从 SNS 发往多个 SQS(扇出)
- 让应用无状态,把会话放在外部
- 以 SQS 队列长度等为指标进行 Auto Scaling
- 用 Step Functions 控制多个步骤,并定义失败时的重试
工作中的示例
订单发布到 SNS,扇出到库存、计费、通知各自的 SQS,各处理独立扩展。即使计费处理停止,订单也会留在队列中。
易混淆点、考试注意事项
- SQS 标准队列是至少一次传递(可能重复),FIFO 队列保证顺序且只处理一次
- 可见性超时要长于处理时间
- 持续处理失败的消息转入死信队列
小测验
Q1. 你正在设计使用队列的异步处理。请选出关于 Amazon SQS 的错误说法。
- 消息在接收者删除前,会在保留期内留在队列中
- 可以吸收发送方和接收方处理速度的差异,实现松耦合
- 可以用死信队列转移持续处理失败的消息
- 标准队列始终严格保证消息的发送顺序
查看答案和解析
正确答案:D 标准队列始终严格保证消息的发送顺序
标准队列是尽力而为的顺序,需要严格顺序时用 FIFO 队列。
Q2. 你正在构建无服务器处理。关于 Lambda 的限制或计费,错误的说法是哪一项?
- 可以由 S3、SQS、EventBridge 等多种服务的事件触发运行
- 按调用次数和执行时间(单价取决于内存大小)计费
- 单次执行时间没有上限,几小时的批处理也能直接运行
- 可以配置为访问 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 分区键的设计决定性能。
原理、步骤
- 确认读写比例和延迟要求
- 读取多时使用只读副本或缓存
- 来自 Lambda 的大量连接用 RDS Proxy 汇集
- DynamoDB 选择访问不偏斜的分区键,必要时加上 DAX
- 全球低延迟读取使用 Aurora Global Database 或 DynamoDB 全局表
工作中的示例
商品详情页的读取占数据库负载的 90%,因此把结果缓存在 ElastiCache 中,库存更新写入主实例。
易混淆点、考试注意事项
- 只读副本是异步的,会有轻微延迟
- DAX 是 DynamoDB 专用缓存(与 ElastiCache 不同)
- RDS Proxy 用于管理连接,并不能让查询本身变快
小测验
Q1. 仅在订单 ID 尚不存在时创建 DynamoDB 订单,应使用什么?
- 根据 TTL 删除时间判断重复
- 使用 ConditionExpression 条件写入
- 读取后执行无条件 PutItem
- 通过 Scan 结果数量判断
查看答案和解析
正确答案:B 使用 ConditionExpression 条件写入
原子条件写入可避免先读后写的竞争。
Q2. 希望提高 DynamoDB 性能。除分区键(客户 ID)外,还想按订单日期检索。目前是扫描整张表,很慢。最合适的是哪一项?
- 按需容量模式
- DynamoDB Streams
- 全局二级索引(GSI)
- DynamoDB Accelerator(DAX)
查看答案和解析
正确答案:C 全局二级索引(GSI)
GSI 支持按不同的分区键和排序键查询,可以避免扫描。
参考链接
课程由本站根据公开信息独立编写,不保证与考试内容一致。产品规格可能变化,请在参考链接中确认最新信息。
使用须知(非官方、原创题目、不保证合格)
- 本站题目是根据官方公开的技能大纲和考试指南独立编写的原创练习题,并非真实考试题目。
- Amazon Web Services、AWS 及相关标志是 Amazon.com, Inc. 或其关联公司的商标。本站与 AWS 无合作关系,也未获得 AWS 的认可或推荐。
- 本内容仅为学习辅助,不保证考试合格。考试内容、形式和前提条件可能随时变更,参加考试前请务必在官方页面确认最新信息。
- 模拟考试的正确率无法换算为官方(换算)分数,也不能预测是否合格。
- 进度仅保存在本浏览器(localStorage)中;使用 Google 登录后才会同步到账号。可在“Cookie 与存储设置”页面(日语)中删除。