Q60 — AWS SAA-C03 第15章
第 60/100 题 | ← 返回第15章
Q1160. 一家公司有一个无服务器应用程序,它使用 Amazon API Gateway REST API 背后的 AWS Lambda 函数将数据存储在 Amazon DynamoDB 表中。数据库查询可能非常耗时。API 客户端不需要接收查询结果。解决方案架构师希望减少 API 的响应时间并避免超时问题。哪种解决方案可以满足这些要求?
- A. 创建 Amazon Kinesis 数据流。配置 REST API 终端节点以使用 Kinesis 数据流作为目标。配置 Lambda 函数以从数据流中读取记录。
- B. 创建一个 Amazon Simple Notification Service (Amazon SNS) 主题。配置 REST API 终端节点以使用 SNS 主题作为目标。配置 Lambda 函数以订阅该 SNS 主题。
- C. 创建应用程序负载均衡器 (ALB)。将 ALB 配置为 REST API 的目标。将 Lambda 函数设置为 ALB 的目标。配置应用程序自动扩展 (Auto Scaling),以根据应用程序延迟扩展 Lambda 预置的并发量。
- D. 创建 Amazon Simple Queue Service (Amazon SQS) 队列。配置 REST API 终端节点以使用 SQS 队列作为直接目标。配置 Lambda 函数以从 SQS 队列读取数据。 ✓
正确答案: D. 创建 Amazon Simple Queue Service (Amazon SQS) 队列。配置 REST API 终端节点以使用 SQS 队列作为直接目标。配置 Lambda 函数以从 SQS 队列读取数据。
解析
对于 API 客户端不需要立即获得查询结果的无服务器应用程序,为了满足减少 API 响应时间并避免超时问题的要求,最佳解决方案是将 API 响应与数据库查询执行分离。这可以通过使用队列进行异步处理来实现。关键要求:减少 API 响应时间(客户端不应等待慢速查询)。避免超时问题(Lambda 有最长执行时间,慢速查询可能会超过该时间)。API 客户端不需要结果(因此 API 可以在请求入队后立即返回)。期权分析:A. 创建 Amazon Kinesis 数据流。配置 REST API 终端节点以使用 Kinesis 数据流作为目标。配置 Lambda 函数以从数据流中读取记录。Kinesis 适用于实时流数据(例如,日志提取、物联网遥测)。它并不适合简单的异步任务排队(对于此用例来说有点过度)。它不适合将 API 请求与数据库查询分离。B. 创建 Amazon Simple Notification Service (Amazon SNS) 主题。配置 REST API 终端节点以使用 SNS 主题作为目标。配置 Lambda 函数以订阅 SNS 主题。SNS 用于发布/订阅消息传递(例如,通知、警报)。虽然它可以触发 Lambda 函数,但它不是队列(不保证顺序或恰好一次处理)。不适合可靠的异步任务处理。C. 创建应用程序负载均衡器 (ALB)。将 ALB 配置为 REST API 的目标。将 Lambda 函数设置为 ALB 的目标。配置应用程序自动扩展 (Auto Scaling),以根据应用程序延迟扩展 Lambda 预置的并发量。ALB + Lambda 适用于基于 HTTP 的工作负载,但不能解决超时问题(Lambda 仍然必须同步执行查询)。预配置并发有助于冷启动,但不能解决缓慢的数据库查询。不是异步处理的最佳解决方案。D. 创建 Amazon Simple Queue Service (Amazon SQS) 队列。配置 REST API 终端节点以使用 SQS 队列作为直接目标。配置 Lambda 函数以从 SQS 队列读取数据。SQS 是一个完全托管的消息队列,可将 API 与数据库查询分离。API 可以在请求入队后立即返回(无需等待查询)。Lambda 函数可以异步处理消息,从而避免超时。最适合要求。正确答案:D. 创建 Amazon Simple Queue Service (Amazon SQS) 队列。配置 REST API 终端节点以使用 SQS 队列作为直接目标。配置 Lambda 函数以从 SQS 队列读取数据。该解决方案提供:解耦处理(API 立即返回,Lambda 稍后处理)。避免超时问题(Lambda 不会因慢查询而阻塞)。可靠的异步任务处理(SQS 确保消息得到处理)。最终答案:D. 创建 Amazon Simple Queue Service (Amazon SQS) 队列。配置 REST API 终端节点以使用 SQS 队列作为直接目标。配置 Lambda 函数以从 SQS 队列读取数据。满足缩短 API 响应时间并避免超时问题的解决方案如下:D. 创建 Amazon Simple Queue Service (Amazon SQS) 队列。配置 REST API 终端节点以使用 SQS 队列作为直接目标。配置 Lambda 函数以从 SQS 队列读取数据。Amazon SQS:此服务允许异步处理请求。通过将请求放入队列,API 可以立即响应客户端,而无需等待 Lambda 函数完成 DynamoDB 查询。解耦:通过将 API 请求与 Lambda 函数的执行解耦,您可以消除函数处理查询时间过长时可能出现的潜在超时问题。缩短响应时间:客户端会快速收到请求已收到的确认,同时查询的处理独立进行,从而提升整体用户体验。这种方法有效地解决了性能问题,同时确保 API 保持响应。