【发布时间】:2022-01-15 01:23:10
【问题描述】:
我们正在准备从我们的分析门户网站收集数据的解决方案,我们正在使用 Python/API 调用收集数据。来自我们的分析网络工具的 CSV/XLSX 报告,使用上述 API 调用通过 Python 脚本提取大量 JSON 数据。我们需要为大量客户获取数据。我们已经从 AWS t2.medium VM、4 GB RAM、2 个 CPU 执行了 Python 脚本。脚本运行大约 2-3 小时来构建 CSV/XLSX 报告,具体取决于查询(这对我们来说太长了)。所以我们正在考虑其他解决方案,我们需要加快 CSV/XLSX 报告的生成。我们不确定可以在 AWS 中使用哪些组件。我们正在考虑:一个主要的 Lambda 函数(身份验证、工作分配、触发并发 Lambda 函数)和许多并发 Lambda 函数。每个并发的 Lambda 将负责部分工作(10% 的客户端,10% 的 API 调用)。我们可以使用任何工具来加速 AWS、Step Functions/Parallel 流、Lambda 中提到的解决方案吗?
我的序列创建者(主要 Lambda 函数)代码如下所示:
import boto3
import json
import requests
client = boto3.client('lambda')
def lambda_handler(event, context):
response1 = client.invoke(FunctionName="worker-00", InvocationType="RequestResponse", Payload=json.dumps(event));
response2 = client.invoke(FunctionName="worker-01", InvocationType="RequestResponse", Payload=json.dumps(event));
response3 = client.invoke(FunctionName="worker-02", InvocationType="RequestResponse", Payload=json.dumps(event));
response4 = client.invoke(FunctionName="worker-03", InvocationType="RequestResponse", Payload=json.dumps(event));
【问题讨论】:
-
能否请您详细解释一下
Each concurrent Lambda will be responsible for part of the work (10% of the clients, 10% of the API calls)这一行,因为 lambdas 应该只负责一项任务。 -
例如,如果我们有 100 个客户,我们需要收集所有 100 个客户的数据。我们可以使用 5 个 Lambda,让它们并行工作,每个 lambda 有 20 个客户,应该会加快进程。
标签: python amazon-web-services aws-lambda aws-step-functions