2016-09-22 49 views
1

我需要从许多数据源(例如手机)收集数据。例如,1000部手机,每20分钟上传一批1MB。我正在考虑使用带有单个碎片的Kinesis流来提取数据(总吞吐量大约为1MB/s)。 单个手机可以直接访问Kinesis API吗?还是应该将我自己的前端(例如Web服务器)放在前面?做出这个决定时要记住的主要限制/考虑是什么?许多生产商的Kinesis碎片

P.S.使用AWS IoT基础设施的替代方案将会相当昂贵

回答

2

您应该有一个Web服务,它从客户端接收数据并将它们发送给Kinesis。该Web服务器可以使用Kinesis Producer Library(KPL),在消息速率传输,超时,策略重试和可伸缩性方面提供最佳性能。 KPL可以创建许多工作人员,并可以调整以优化邮件速率并且不会超出Kinesys Shards强加的写入限制。

让每个将数据发送到kinesis的客户端在性能,维护成本和交付方面都可能是矫枉过正的。 如果客户端开始以高速流量发送数据会发生什么情况?分片具有写入操作的速率限制(最多1,000条记录/秒,数据写入速率最高达1 MB /秒)。 一个'积极的'客户端可能会产生连续的流量,并使一个分片不响应一段时间,并阻止所有发送应存储在同一分片中的记录的其他客户端。

此外,考虑数千客户的交付成本。如果你想改变流名称会发生​​什么?或更改accessID /密钥?或者从kinesis切换到kafka?您必须管理数千个客户端的更新。

使用Web服务器,您可以隐藏复杂性并使任何更改对客户端透明。您可以考虑直接在EC2中运行Web服务。直接在AWS中制作者应该减少网络延迟。此外,您可以利用AWS提供的所有可扩展性/弹性/容错功能。