2016-11-18 6 views
0

Ich arbeite für einen M2M IoT-Provider. Es gibt Millionen von eingesetzten IoT-Geräten im Feld. Die Daten werden von Edge-Geräten gesammelt und an unseren zentralen Server gesendet. Der Server verarbeitet die Gerätedaten und sendet die verarbeiteten Informationen an verschiedene andere Subsysteme.Analytics Engine für IoT-Geräte

Wir konzipieren die Idee einer Analytics Engine (AE) parallel zum bestehenden System. Die von den IoT-Geräten kommenden Daten müssen in diesen Motor eingegeben werden, um verschiedene Arten von Analysen zu ermöglichen. Beispiel: Überwachen Sie die Ereignisse, die von einem Gerät während der letzten 24 Stunden kommen, und ermitteln Sie den Zustand oder andere Dinge. Wir versuchen, die Antworten auf die folgenden Fragen in diesem Zusammenhang herauszufinden:

1) Wo sollen wir die eingehenden Daten von IoT-Geräten tippen, um in das neue System (AE) zu speisen? Wenn wir auf den bestehenden Server tippen, werden wir eine starke Kopplung zwischen den beiden Systemen einführen. Jede Ausfallzeit am bestehenden Server muss die Pipeline ebenfalls auf AE trocknen. Was ist die allgemein empfohlene Strategie für einen solchen Fall?

2) Wir planen, AE mit Kafka zu beenden, um die Datenverfügbarkeit zu gewährleisten. Es soll verschiedene Mikro-Dienste geben, die als Kafka-Konsumenten handeln und ihre Sachen machen. Wie soll die Architektur eines Mikroservices aussehen, der den Gerätezustand gemäß den in den letzten 24 Stunden gemeldeten Ereignissen verwalten soll (d. H. Sowohl historische Daten als auch Live-Daten berücksichtigen)? Es gibt zahlreiche Technologien wie Spark, Hadoop, Apache und ich bin mir nicht sicher, mit welchem ​​ich anfangen soll. Wie sollte ich die eingehenden Gerätedaten beibehalten und historische und eingehende Daten zusammen verarbeiten, um den aktuellen Gerätezustand herauszufinden? Was ist in solchen Szenarien üblich: Werden die verdichteten Daten im Voraus berechnet oder gespeichert oder werden sie in Echtzeit gemäß der eingehenden Anfrage berechnet?

Antwort

0

Allgemein: Da die Anzahl der Geräte (Millions) weniger relevant ist, verwende ich den Begriff tps (Transaktion pro Sekunde), um sich auf die Last zu beziehen.

An 1): Sie müssen an einer Stelle eingreifen. :-) In unserer IoT-Plattform tippen wir direkt nach der eingehenden Datenverarbeitung ein und leiten sie an unsere AE weiter. Stellen Sie in jedem Fall sicher, dass die eingehende AE-Kapazität (in Bezug auf tps) höher ist als die des "Servers".

IMHO ist es weniger eine Frage über die Kopplung. Es geht eher um die Verantwortung, d. H. Welche Komponente ist dafür verantwortlich, die Datenübertragung zu "quittieren", sie zuverlässig zu speichern usw.

On 2) Es kommt darauf an. Vor allem kommt es auf

  1. welche Algorithmen verwenden Sie in der Analytik
  2. das Echtzeitverhalten Sie Ihre Kunden erwarten (Zeige Ergebnis in Sekunden vs. zeigen die Ergebnisse jeder 24h)
  3. die Zuverlässigkeitsanforderungen (Sie sich leisten können einige Ergebnisse bei Serverausfällen verloren gehen)
  4. die Datenmengen (wie viele tps, auch auf einer Geräteebene?)
  5. sind die Analysealgorithmen "Gerät lokal" vs. Sie Daten von vielen Geräten mischen?

Je nach Antworten, möchten Sie vielleicht ein ein-Motoren t CEP suchen müssen (Complex Event Processing) als Grundlage für Ihre AE (Analytical Engine)