亚马逊Lambda是否适合同时计算数百份报告?

2024-05-13 06:55:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的现状:

我目前有一个Python脚本,它通过HTTP端点获取数据,每天计算并生成成百上千的报告。目前,它运行在一个awsec2实例上,其中使用一个队列将需要生成的报告分为四个线程。脚本一次获取四个数据,计算每个报表,并将其保存到PostgreSQL Amazon RDS中。在

问题:

随着项目规模的扩大,我的脚本将无法足够快地计算,也无法用当前方法在一天内生成所需的所有报表。在

寻找解决方案:

我偶然发现了Amazon Lambda,但我没有发现有人将其用于与我类似的用例。我的计划是将需要生成的每个报表上传/放入它自己的s3bucket中,然后在创建bucket时触发Lambda函数。Lambda函数将执行所有数据获取(从HTTP端点)和所有计算,并将其保存到PostgreSQL Amazon RDS中的一行。从理论上讲,这将使所有东西都是并行的,并且消除了等待资源释放的队列的需要。在

基本上,我正在寻找一个解决方案,以确保我的脚本能够每天运行并完成每一天,而不会过度运行到第二天。在

我的问题:

亚马逊Lambda适合这种东西吗?在

使用amazonlambda(每天创建成百上千个s3存储桶)进行这样的操作会不会代价高昂?在

有更好的选择吗?在

任何帮助、建议、见解或提示都将不胜感激。谢谢!在


Tags: 数据lambda函数脚本httpamazon报表队列
3条回答

Would Amazon Lambda be suitable for something like this?

  • 你的跑步时间不能超过5分钟。在
  • 部署(特别是当您有许多外部库时)有点笨拙
  • 您几乎无法控制AWS如何运行代码(可能会有延迟或暂停,日志更难获取)

如果这些对你来说不是很严重的问题,我认为你的问题听起来很合适。在

Would it be costly to do something like this with Amazon Lambda (creating hundreds/thousands of s3 buckets a day)?

请参见Lambda PricingS3 Pricing。在

每天创建数千个bucket听起来是个坏主意(AWS可能不允许)。默认情况下,您的帐户中可以有100个存储桶,每个存储桶名称都是全局的(对于该区域)。也许你是说一个桶里有几千把钥匙?在

所有这些都取决于报表的大小、创建报表所需的时间和内存,以及从AWS获取报表的频率(这是您为数据传输付费的时候)。AWS有一个cost calculator尽管这有点痛苦,所以您可能更愿意自己从他们的定价页面中找出答案。在

Is there better options?

如果您的报告几乎是不断生成的,那么您最好继续自己运行服务器。如果您偶尔得到非常大的批处理,那么您最好是在现场竞价实例或查看其他云服务提供商。如果你一整天都有不规则的爆发,那么Lambda似乎非常适合你。在

@Nathaniel回答了大部分问题,但我要补充一点“其他选择”:

如果从源代码的角度来看,您可以并行运行多于四个的报告(您只需将它们限制为4个,这是因为CPU利用率不是因为HTTP服务无法处理更高的负载),那么我肯定可以说您可以做更多的事情:

  1. 重写报表以使用async IO,这样就可以利用HTTP请求被阻止的时间。这可以提高吞吐量。

  2. 获取一个具有更多CPU的实例,并使用更多线程运行脚本。对于您正在执行的任务,我认为您至少可以使用CPU*4个线程运行,可能会更多—监视CPU利用率并增加线程数,直到您获得良好的用户CPU利用率。

  3. 执行自集群-将脚本放在实例启动时运行,并在没有作业完成时终止实例,使用现货价格创建一些实例,并观察它们执行任务

  4. 如果您不介意切换语言,您可以使用显式集群和基于消息的调度—如Akka或Storm。

AWS Big Data blog引入了一种体系结构,用Lambda并行处理S3中的大量文件。原型级实现在节点.js,但体系结构与语言无关。此解决方案假定您可以分发处理。在

总结一下:

  1. 这个想法是运行一台接收报告请求的EC2机器。这台机器在S3中创建一个源文件列表(在您的例子中可能是http端点),它将其分发给Lambda函数的第一级。在
  2. 这些函数中的每一个都将任务分配给叶级辅助函数。在
  3. 所有的结果都被聚合回EC2机器,EC2机器实时地将结果流式传输给用户(在您的例子中可能是RDS)。在

您的用例是不同的,但是本文展示了一种在非常短的时间内并行运行大量分析任务的简单方法。在

所介绍的原型实现缺少生产中需要的几个明显特性,因此只能用于演示。也请看一看作者在评论中的精彩的Re:invent演示文稿。在

相关问题 更多 >