AWS Lambda 函数的快速数据访问

Fast data access for AWS Lambda function

我有一个基于 python 的 lambda 函数,它基于 kinesis firehose 流触发 s3 put 操作,该流以每分钟约 10k 条记录的速度发送数据。现在,lambda 函数只是对数据执行一些小的修复,并将其以 100 个为一批交付给 logstash 实例。lambda 执行时间为 5-12 秒,这很好,因为它每分钟运行一次。

我们正在考虑在将流式数据发送到 logstash 之前用更多信息来丰富它。传入的每条消息都有一个 "id" 字段,我们想根据某种数据库查找该 ID,从数据库中获取一些额外信息并将其注入到对象中,然后再传递给它。

问题是,我不能让它足够快。 我尝试将所有数据(600k 记录)加载到 DynamoDB 中,并在 lambda 函数中对每个记录循环执行查找。这会大大减慢执行速度。然后我想我们不必两次查找相同的 id,所以我使用一个列表 obj 来保存已经 "looked-up" 的数据——这使执行时间有所下降,但仍然与我们的速度相去甚远。我喜欢。

然后我想到预加载整个数据库数据集。我对此进行了测试——在开始遍历 s3 对象中的每条记录之前,只需将 dynamodb 中的所有 600 条记录转储到一个 "cache list" 对象中。数据在大约一分钟内转储,但缓存列表现在非常大,每次查找它需要 5 秒(比访问数据库慢得多)。

我不知道在这里做什么 - 我完全意识到 lambda 可能不是适合这个的平台,如果我们不能让它工作,我们可能会转向其他产品,但是首先我想我会看看社区是否有一些关于如何加快这件事的指示。

将数据预加载到 Redis 服务器中。这正是Redis擅长的。