【问题标题】:Using AWS To Process Large Amounts Of Data With Serverless使用 AWS 通过无服务器处理大量数据
【发布时间】:2018-03-11 15:34:07
【问题描述】:

我的 DynamoDB 数据库中每个用户大约有 300,000 个事务。

如果这是最便宜的方式,我想以无服务器方式根据这些交易计算税费。

我的想法是,我应该使用 AWS Step Functions 来获取所有事务,将它们存储到 Amazon S3 中,然后使用 AWS Step Functions 遍历 CSV 文件中的每一行。问题是,一旦我在 CSV 中读取了一行,我就必须将它存储在内存中,以便我可以将其用于以后的计算。如果这个 Lambda 函数超时了,那么我没有办法保存状态,所以这条路线是不合理的。

另一个代价高昂的方法是在 DynamoDB 中为每个事务创建两个副本,并在副本表上执行操作,保持原始数据不变。这样做的问题是 DynamoDB 表最终是一致的,并且可能存在我读取脏项的情况。

【问题讨论】:

  • 这就是 AWS Batch 的用途。
  • @JakubKania 这不能解决内存问题,AWS Batch 更像是一个协调器。感谢您的工具,我会看看我是否可以围绕它定制一些东西

标签: amazon-web-services amazon-s3 aws-lambda serverless


【解决方案1】:

无服务器是事件驱动处理的理想选择,但对于您的批处理用例,使用 EC2 实例可能更容易。

Amazon EC2 t2.nano 实例低于 1c/小时,具有现货定价的 t2.micro 实例也是如此,它们是按秒计价的。

【讨论】:

  • EC2 可能是最简单的方法。
【解决方案2】:

这里确实没有足够的细节来提出一个好的建议。例如,您的 DynamoDB 表中的数据是如何组织的?你计划多久运行一次这项工作?您需要多快完成这项工作?

你提到了价格,所以我认为这对你来说是最大的因素。

对于事件驱动的处理来说,Lambda 往往成本最低。这个想法是,对于任何 EC2/ECS 事件驱动系统,您都需要在一定程度上过度配置以处理流量峰值。过度配置的计算能力大部分时间都处于空闲状态,但您仍然需要为此付费。在 lambda 的情况下,您需要为计算能力多付一点钱,但由于您不需要过度配置,因此您需要的更少可以节省资金。

批处理系统往往很适合 EC2,因为它们通常在整个作业期间使用 100% 的计算能力。在作业结束时,您关闭了所有实例,并且不再为它们付费。此外,如果您使用现货定价,您可以真正降低计算能力的价格。

【讨论】:

  • 数据方案有hashkey作为userID,sortkey作为time_transID。默认发电机排序对我来说就足够了。这似乎是一个 EC2 实例而不是 lambda 的作业,这些作业将在一天中从几秒钟到几分钟不等的地点运行。正如你所说,我认为这可能是 EC2 实例的工作。
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2023-03-17
相关资源
最近更新 更多