2016-09-22 3 views
1

多くのデータソース(携帯電話など)からデータを収集する必要があります。たとえば、1,000台の電話機で、それぞれ20分ごとに1MBのバッチをアップロードします。私はデータを取り込むために単一のシャードでキネシスストリームを使用することを考えています(合計スループットは約1MB/sです)。 個々の携帯電話がKinesis APIに直接アクセスすることは意味がありますか、自分のフロントエンド(Webサーバーなど)を前面に置く必要がありますか?この決定を下す際に留意すべき主な制限/考慮事項は何ですか?多くのプロデューサーがいるキネシスシャード

P.S. AWS IoTインフラストラクチャを使用する代わりに、かなり高価になります

答えて

2

クライアントからデータを受信して​​Kinesisに送信するWebサービスが必要です。このWebサーバーは、メッセージレートの配信、タイムアウト、ポリシーの再試行およびスケーラビリティに関して最高のパフォーマンスを提供するKinesis Producer Library(KPL)を使用できます。 KPLは多くのワーカーを作成することができ、メッセージレートを最適化し、Kinesys Shardsによって課された書き込み制限を超えないように調整することができます。

キネシスにデータを送信するすべてのクライアントに、パフォーマンス、メインテナンスコスト、および配信の面で過度の負担がかかる可能性があります。 クライアントが高速トラフィックでデータを送信し始めるとどうなりますか?シャードには書き込み操作のレート制限があります(最大1,000レコード/秒、データ書き込み速度は最大1 MB /秒)。 「攻撃的な」クライアントは、連続トラフィックを生成し、しばらくシャードに応答しないようにし、同じシャードに格納されるべきレコードを送信する他のすべてのクライアントをブロックする可能性があります。

さらに、何千人ものクライアントの配信コストについて考えてみましょう。ストリーム名を変更したい場合はどうなりますか?またはaccessID /キーを変更しますか?またはキネシスからカフカに切り替えるだけですか?何千ものクライアントの更新を管理する必要があります。

Webサーバーを使用すると、複雑さを隠して、変更をクライアントに透過的に反映させることができます。 EC2で直接Webサービスを実行すると考えることができます。 AWSのプロデューサにネットワークの待ち時間を短縮する必要があります。さらに、AWSが提供するすべてのスケーラビリティ/復元力/フォールトトレランス機能を利用できます。

関連する問題