Amazon web services AWS Kinesis和Lambda数据版本控制

Amazon web services AWS Kinesis和Lambda数据版本控制,amazon-web-services,amazon-s3,lambda,architecture,amazon-kinesis,Amazon Web Services,Amazon S3,Lambda,Architecture,Amazon Kinesis,我已经创建了一个AWS Firehose端点(可能会更改为简单的Kinesis),它接收来自生产者的日志并将它们保存到S3 bucket和一个lambda函数中,lambda函数使用数据、处理数据并将输出保存到db 一切正常。现在我计划为整个结构创建一个阶段和开发流程。当我发布一个新版本时,我无法立即替换整个生产者,因此我需要保留旧的生产版本,直到没有生产者离开——因为我可能会对新版本进行破坏性的协议更改 我不确定使用kinesis和lambda创建可版本化系统的最佳方法是什么。我是否应该复制新

我已经创建了一个AWS Firehose端点(可能会更改为简单的Kinesis),它接收来自生产者的日志并将它们保存到S3 bucket和一个lambda函数中,lambda函数使用数据、处理数据并将输出保存到db

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

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

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

这是第一个想法的结构图

这是第二个结构


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

首先,Lambdas可以直接使用Kinesis触发-无需Kinesis Firehose或S3

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

  • 所有版本的数据都有一个运动流
  • 此流上有一个Lambda函数。它在内部分别处理不同的版本。粗略地说,可以考虑对版本号进行各种if-else检查
上述方法相对于每个版本一个Kinesis+Lambda管道的优势:

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

当然,要将开发和生产管道分开,以尽量减少前者中坏代码的爆炸半径。

我们的团队决定使用firehose+s3来保留原始数据。否则你是对的-也许我们将迁移到kinesis唯一的解决方案