AWS Kinesis和Lambda数据版本控制

5
我创建了一个 AWS Firehose 端点(可能会变成简单的 Kinesis),用于接收生产者发送的日志并将其保存到 S3 存储桶和消费数据的 Lambda 函数,处理后将输出保存到数据库中。
一切运作正常。现在我正在计划为整个结构创建一个分阶段和开发流程。当我发布新版本时,我无法立即替换全部生产者,因此需要保留旧版本,直到没有生产者使用旧版本。因为我可能会对新版本进行重大协议更改。
我不确定使用 kinesis 和 lambda 创建可版本化系统的最佳方法是什么。我应该复制整个结构以支持新版本(包括开发和分段),并使生产者写入特定版本的流吗?
还是应该创建一个中间 Lambda 函数来检查数据包(其中包含版本信息),并将事件输出到具有版本化文件夹的特定 S3 中?这样,Lambda 函数将仅消费它们了解的数据。这将让我使用 Lambda 函数的版本控制支持。
这是第一个想法的结构图。

Seperate flows for each version

这是第二个结构。

Single common flow for all versions

我想知道哪种方案更好,或者是否有更好的方法来实现这一目标。
1个回答

2
首先,Lambdas可以直接使用Kinesis触发-无需使用Kinesis Firehose或S3。
其次,您的问题实际上归结为:是否需要每个版本单独的Kinesis + Lambda管道。我建议采用以下解决方案:
- 一个Kinesis流,适用于所有数据版本。 - 该流上的一个Lambda函数。它在内部分别处理不同的版本。粗略地说,考虑版本号上的各种if-else检查。
以上方法相较于每个版本的Kinesis + Lambda管道的优势是:
- 前者操作上更简单。在后者中,每次引入新版本时都需要设置新的管道。 - 在任何时间点上,您只需要少量活跃版本。因此,在代码中进行一些if-else检查就可以正常工作。
当然,请将Dev和Prod管道分开,以便在前者中最小化坏代码的影响范围。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接