2016-09-22 5 views
1

Ich muss Daten aus vielen Datenquellen (z. B. Mobiltelefone) sammeln. Zum Beispiel 1000 Telefone, die alle 20 Minuten einen Stapel von 1 MB hochladen. Ich denke, einen Kinesis-Stream mit einem einzigen Shard zu verwenden, um die Daten aufzunehmen (der Gesamtdurchsatz beträgt ungefähr 1 MB/s). Wäre es sinnvoll, wenn die einzelnen Telefone direkt auf die Kinesis API zugreifen, oder sollte ich mein eigenes Frontend (z. B. Webserver) in den Vordergrund stellen? Was wären die wichtigsten Grenzen/Überlegungen, die bei dieser Entscheidung zu beachten sind?Kinesis Shard mit vielen Herstellern

P.S. Die Alternative zur Verwendung der AWS-IoT-Infrastruktur wäre erheblich teurer.

Antwort

2

Sie sollten über einen Webdienst verfügen, der die Daten von Ihren Clients empfängt und an Kinesis sendet. Dieser Webserver kann die Kinesis Producer Library (KPL) verwenden, die die beste Leistung in Bezug auf Nachrichtenrate, Timeout, Richtlinienwiederholung und Skalierbarkeit bietet. KPL kann viele Worker erstellen und kann so optimiert werden, dass die Nachrichtenrate optimiert wird und die Schreibgrenze von Kinesys Shards nicht überschritten wird.

Jeder einzelne Client, der Daten an Kinesis sendet, könnte ein Overkill in Bezug auf Leistung, Kosten und Lieferung sein. Was passiert, wenn ein Client beginnt, Daten mit hohem Datenverkehr zu senden? Ein Shard hat ein Ratenlimit für Schreibvorgänge (bis zu 1.000 Datensätze/s, Datenschreibrate bis zu 1 MB/s). Ein "aggressiver" Client könnte exzessiven Datenverkehr generieren und einen Shard für einige Zeit nicht reagieren lassen und alle anderen Clients blockieren, die Datensätze senden, die im selben Shard gespeichert werden sollen.

Darüber hinaus denken Sie an die Versandkosten über Tausende von Kunden. Was passiert, wenn Sie den Namen des Streams ändern möchten? oder ändern Sie die accessID/Schlüssel? Oder wechseln Sie einfach von Kinesis zu Kafka? Sie müssen das Update von Tausenden von Clients verwalten.

Mit einem Webserver können Sie die Komplexität verbergen und Änderungen für den Client transparent machen. Sie können den Webdienst direkt in EC2 ausführen. Lassen Sie den Hersteller direkt in AWS die Netzwerklatenz reduzieren. Darüber hinaus können Sie alle von AWS gebotenen Funktionen für Skalierbarkeit, Ausfallsicherheit und Fehlertoleranz nutzen.