AWS Kinesis和Lambda数据版本控制

时间:2017-03-28 15:16:17

标签: amazon-web-services amazon-s3 lambda architecture amazon-kinesis

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

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

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

或者我应该创建一个中间lambda函数来检查数据包(包含其版本信息)并将事件输出到具有版本化文件夹的特定s3?因此lambda函数只会消耗他们所知道的数据。这将让我使用lambda函数的版本控制支持。

这是第一个想法的结构图像

Seperate flows for each version

这是第二个结构

Single common flow for all versions

我想知道哪个是更好的解决方案,还是有更好的方法来实现这个目标

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

当然,请将Dev和Prod管道分开,以便最大限度地减少前者中坏代码的爆炸半径。