【发布时间】:2019-08-10 04:54:27
【问题描述】:
我有一个 每 5 分钟重复运行的 Lambda。它为每个用户执行一次数据处理任务(查询第三方 API 并处理响应)。这会每 5 分钟产生一次数据峰值。
我想将数据峰值转换为每秒均匀分布的数据。有什么方法可以在 5 分钟内将重复的任务分散到多个 Lambda 调用中,以实现更均匀的数据分布?
我的目标是随着时间的推移获得均匀分布的数据输出,这样我就可以将其传输到 AWS Kinesis,就好像它是实时流数据一样。
编辑:
现在,我的 Lambda 通过 Cloudwatch 事件每 5 分钟运行一次。它向我的服务器查询用户 API 密钥,然后查询第三方 API,处理结果并将其存储在 DynamoDB 中。
我想将负载平均分布在 5 分钟内,以便每秒处理一批用户,从而产生均匀的输出。
我想我可以在 Memcached 中将我的用户群分成 300 个存储桶(每秒 5 分钟一个),然后运行一个小型 EC2 实例,该实例将从 Memcached 获取存储桶并每秒为每个存储桶触发一个 Lambda。有没有更好的方法来实现这一点?
【问题讨论】:
-
您能进一步详细说明您的堆栈吗?您的 lambda 是如何触发的(cloudwatch 事件规则或其他方式)?您的 lambda 处理数据的来源是什么?
-
@congbaoguier 我更新了问题
-
这个提议的架构在让您当前的 Lambda 更频繁地发布到 Dynamo 之上,给您带来了什么,即循环访问您的用户并在每 x 次调用 3rd 方 api 后发布结果?
-
可能是带有迭代器模式的 AWS Step Functions(请参阅 read.acloud.guru/…)
-
如果您的 ec2 基本上是非空闲的,这实际上是一个好主意。不过,您可能想要计算出您将拥有多少确切的空闲时间,并根据每秒 Lambda 方法计算成本。无服务器并不是所有事情的最佳解决方案。这只是一个选择。仅在与使用大部分空闲的 ec2 实例相比确实节省资金时才使用它。
标签: amazon-web-services aws-lambda amazon-kinesis