Prípadová štúdia
IoT platforma pre správu zariadení viacerých klientov
Kompletná IoT platforma postavená od nuly: pripojenie zariadení cez mobilné a LPWAN siete, ich správa, zber a vizualizácia dát, posielanie príkazov späť do zariadení a riadenie prístupov – pre desiatky tisíc zariadení viacerých klientov na OpenShifte.
- MQTT
- Protobuf
- LoRaWAN
- NB-IoT / LTE-M
- OPA
- Kafka
- Redis
- RabbitMQ
- Prometheus
- Zabbix
- OpenShift
Kontext
Projekt od nuly s cieľom postaviť jednu platformu pre všetko medzi zariadením v teréne a grafom na obrazovke operátora: pripojenie, registráciu zariadení, zber a ukladanie dát, vizualizáciu a nad tým model identít a oprávnení – pre mnoho zákazníckych organizácií na jednom spoločnom nasadení.
Výzva
Každá časť tejto cesty je samostatný systém a každá obmedzuje tú ďalšiu. Správa zariadení určuje, ktorým prichádzajúcim dátam sa dá veriť. Oddelenie klientov určuje, ako musí byť ohraničený každý dopyt, upozornenie aj notifikácia. Príkazy späť do zariadení znamenajú, že platforma mení stav fyzických zariadení, takže identita a oprávnenia musia platiť v momente zápisu, nie až v používateľskom rozhraní. Keby sa časti stavali oddelene a prepájali až neskôr, tieto hranice by skončili na nesprávnych miestach.
Obmedzenia
- desiatky tisíc zariadení hlásiacich nepretržite, pri stovkách správ za sekundu
- zariadenia pripojené cez 2G, 4G, NB-IoT, LTE-M a LoRaWAN, pričom každá sieť má iný limit na veľkosť správy a inú spoľahlivosť
- zariadenia rozdelené podľa protokolu: MQTT tam, kde ho linka zvládla, vlastné UDP tam, kde nie
- oddelenie klientov vynútené pri každom čítaní, zápise aj notifikácii
- príkazy do zariadení, ktoré menia ich fyzický stav
- autentifikácia a autorizácia, ktoré sa museli správať rovnako v každej službe
- operátori potrebovali vidieť stav platformy aj zariadení v nástrojoch, ktoré už používali
Prístup
- Platformu som rozdelil na samostatné služby pre správu zariadení, zber dát, vizualizáciu a identitu. Klient (tenant) je súčasťou každého dátového modelu od začiatku, nie filtrom doplneným dodatočne.
- Pripojenie som riešil cez 2G, 4G, NB-IoT, LTE-M aj LoRaWAN: MQTT tam, kde linka zvládla jeho réžiu, a vlastné UDP protokoly so správami v Protobufe na úzkopásmových sieťach, kde sa platí každý bajt.
- Kafka prenáša udalosti medzi službami a RabbitMQ spracúva úlohy vo fronte a notifikácie – namiesto toho, aby jeden broker robil oboje.
- Oddelil som overenie identity od oprávnení: identita sa overí raz, keď požiadavka vstúpi do platformy, a o tom, čo smie, potom rozhoduje Open Policy Agent. Služby sa teda pýtajú na rozhodnutie a nemusí mať každá vlastnú kópiu pravidiel.
- Najčastejšie čítané dáta – stav zariadení a číselníky – obsluhuje Redis, takže časté čítanie vôbec nezaťažuje hlavné databázy.
- Služby posielajú metriky do Promethea a stav zariadení aj infraštruktúry do Zabbixu, takže zariadenia aj platforma pod nimi sa dajú sledovať spolu.
- Každý príkaz do zariadenia sa sleduje až po potvrdenie zo zariadenia, pretože správu, ktorá niečím fyzicky pohne, nemožno len odoslať a zabudnúť na ňu.
Architektúra
Zariadenia sa pripájajú cez 2G, 4G, NB-IoT, LTE-M a LoRaWAN – cez MQTT tam, kde to linka dovolí, inak cez vlastné UDP protokoly so správami v Protobufe. Služby bežia na OpenShifte; Kafka medzi nimi prenáša udalosti a RabbitMQ spracúva úlohy vo fronte a notifikácie. Redis obsluhuje najčastejšie čítané dáta a Open Policy Agent po overení identity rozhoduje, čo smie každá požiadavka v rámci daného klienta. Platformu aj zariadenia monitorujú Prometheus a Zabbix. Správa zariadení, príkazy do zariadení aj vizualizácia sú dostupné cez API, ktoré zdieľajú jeden model oddelenia klientov.
V skratke: Systém sa skladá z jasných častí, aby mohol rásť a meniť sa bez toho, aby jedna oprava pokazila niečo iné.
- Čo potrebujeteZačíname od biznisového cieľa a jeho obmedzení.
- Jasné stavebné blokySystém sa rozdelí na časti, každá má jednu úlohu.
- Ako časti komunikujúDohodnuté prepojenia, aby sa jedna časť mohla meniť bez rozbitia ostatných.
- Kto vlastní ktoré dátaKaždý údaj má jeden domov, ktorému všetci veria.
- Spustené naostroBeží na spoľahlivých serveroch, nastavených vždy rovnako.
- Udržiavané v kondíciiMonitoring odhalí problém skôr, než ho zbadajú používatelia.
Kľúčové rozhodnutia
- oddelenie klientov zabudované do návrhu od prvej služby, nie doplnené dodatočne
- overenie identity a oprávnenia držané oddelene, pravidlá prístupu vyčlenené do OPA
- MQTT, Kafka a RabbitMQ – každý na úlohu, ktorej zodpovedajú jeho záruky doručenia
- Protobuf cez vlastné UDP na úzkopásmových sieťach, kde by bola réžia MQTT príliš veľká
- každý príkaz do zariadenia je vybavený až po jeho potvrdení
Detaily sú anonymizované. Ďalší kontext je dostupný pod NDA.
Súvisiaca expertíza
Zaujíma vás, čo by AI dokázala vo vašej firme?
Prineste otázky – aj tie, ktoré vám pripadajú príliš základné. Za 30 minút si prejdeme, ako dnes pracujete, vyberieme úlohu s najväčším prínosom a načrtneme, čo by jej otestovanie obnášalo. Žiadne presviedčanie, žiadny záväzok.
Radšej email? hello@nxtinno.com