AWS Kinesis 和 Lambda 数据版本控制

AWS Kinesis and Lambda data versioning

我已经创建了一个 AWS Firehose 端点(可能会更改为简单的 Kinesis),它从生产者那里接收日志并将它们保存到 S3 存储桶,以及一个使用数据、处理数据并将输出保存到数据库的 lambda 函数。

一切正常。现在我正计划为整个结构创建一个暂存和开发流程。当我发布一个新版本时,我无法立即替换整个生产者,因此我需要保留旧的生产版本,直到没有生产者离开——因为我可能会在新版本上做出破坏性的协议更改。

我不确定使用 kinesis 和 lambda 创建版本化系统的最佳方法是什么。我应该为新版本(包括开发和暂存)复制整个结构并让生产者写入特定版本的流吗?

或者我应该创建一个 mid lambda 函数来检查数据包(其中包含它们的版本信息)并将事件输出到具有版本控制文件夹的特定 s3?这样 lambda 函数将只使用它们知道的数据。这将使我能够使用对 lambda 函数的版本控制支持。

这是第一个想法的结构图

这是第二个结构

我想知道哪个是更好的解决方案或者是否有更好的方法来实现这个

首先,可以使用 Kinesis 直接触发 Lambda——无需 Kinesis Firehose 或 S3。

其次,您的问题实际上归结为:每个版本是否需要单独的 Kinesis+Lambda 管道。我会采用以下解决方案:

  • 所有 个数据版本的一个 Kinesis 流。
  • 此流上的一个 Lambda 函数。它在内部分别处理不同的版本。粗略地说,想想对版本号的各种 if-else 检查。

上述方法与每个版本一个 Kinesis+Lambda 管道的优势:

  • 前者操作简单。在后者中,每次引入新版本时都需要设置新管道。
  • 在任何时候,您都会有少量的活动版本。因此,代码中的一些 if-else 检查应该可以正常工作。

当然,Dev 和 Prod 流水线要分开,这样才能尽量减少前者坏代码的爆炸半径。