10 listopada 2015

Protokoły w świecie internetu rzeczy - IoT protocols - (część 1 z 2)

Wstęp - czym są protokoły w branży IT ?

Dla niewtajemniczonych, zgodnie z definicją Protokół komunikacyjny to zbiór ścisłych regół oraz kroków postępowania, które stosują urządzenia w celu wymiany danych i łączności.
Z powodzeniem protokołem możemy nazwać formalny język komunikacji nie tylko pomiędzy maszynami, ale również pomiędzy ludźmi. Oczywiście zakładając, że jest to nietypowy przypadek, kiedy ludzie komunikują się zawężając swoje możliwości poznawcze oraz intelektualne w kontakcie z innym człowiekiem. To oznacza, że stosowaliby taki sposób wymiany informacji, że komunikacja byłaby jednoznaczna dla każdej ze stron :-)

Protokół to też systemem regulacji oraz zasad, które umożliwiają dwóm lub więcej jednostkom systemu wymieniejącego komunikaty do przesyłania informacji różnego typu, w tym również weryfikacje poprawności tej komunikacji (sumy kontrolne, bity parzystości, znaczniki czasu, unikalne identyfikatory, itp).


We współczesnym świecie IT do niedawna protokoły dzieliły się na klasyczne, internetowe, transmisji multimediów, automatyki przemysłowej, lecz od kiedy Internet rzeczy (ang. Internet of Things) stał się realną wizją przyszłości powstała nowa kategoria protokołów, którą stanowią protokoły IoT.

Spośród znanych i używanych w internetcie protokołów nalezy wymienić:


Automatyka przemysłowa i jej znane protokoły:

Internet przedmiotów zyskuje popularność i najważniejsi gracze inwestują w Internet rzeczy potężne pieniądze. Internet rzeczy zapowiada jak szacują firmy analityczne rewolucje technologiczną. Już dzisiaj wiele firm z różnych branż zainwestowało w IoT. Dotyczy to dość szerokiego kręgu: przemysłowego, transportu, energii, życia codziennego, opieki zdrowotnej, rolnictwa, ruchu drogowego, oszczędzania energii.
istnieje wiele rozwiązań do realizacji projektów IoT, które umożliwiają implementacje kilku protokołów IoT, o których chciałbym tutaj wspomnieć.

Jak wiadomo świat SOA i mikrousług sieciowych w internecie bazuje na protokole HTTP oraz często formatach danych typu YAML, XML, JSON. Jest to dość uniwersalna metoda, ale w IoT zupełnie niewygodna. Chodzi o podstawowy fakt - w internecie rzeczy zakładamy, że usługi będą realizowane poprzez wzmożoną komunikacje maszyn z maszynami. Ludzie będą otrzymywali raporty, które bazują na zautomatyzowanych i rozproszonych zbiorach danych online.
Wielu projektantów IoT założyło, że do tego celu protokoł HTTP nie jest wystarczający, stąd narodziny kilku istotnych dla IoT protokołów wymienionych poniżej.

Protokoły IoT

Poniżej znajduje się lista najbardziej popularnych protokołów IoT używanych w znanych mi obecnie ekosystemach Internatu Rzeczy.

Koncept brokera IoT w występujący w większosći prezentowaych protokołach IoT:

Protokół MQTT

MQTT (ang. Message Queuing Telemetry Transport) to protokół - wg. OASIS powinien w przyszłości zarządzać środowiskiem sieciowym Internet of Things - dzięki któremu stworzymy wiele aplikacji wysyłających sobie nawzajem komunikaty, czy też zdarzenia. MQTT pozwala na wysyłanie zdarzeń i nasłuchiwanie na nie między odległymi aplikacjami.
Z protokołu MQTT korzysta min. Facebook Messenger. Dzięki zastosowaniu tego protokołu w łatwy sposób możemy przenosić się podczas rozmowy z jednego urządzenia na drugie i kontynuować konwersację.

Protokół zakłada pojęcie brokera, czyli bramki, która zapewnia propagację komunikatów na kanały komunikacyjne. Najbardziej popularną implementacją brokera MQTT jest mosquitto.
Broker w MQTT pełni rolę serwera albo centralnego huba lub switcha przesyłającego komunikaty.
Z brokerem łączą się klienty aby nasłuchiwać lub wysyłać wiadomości. Każda wiadomość musi mieć odpowiedni temat (topic) oraz treść. Nasłuchiwanie zawsze dotyczy konkretnych tematów.



Pierwszą wersję protokołu MQTT opracowały firmy IBM i Eurotech. Jest on do dzisiaj używany w medycynie (gdzie jest wykorzystywany np. do komunikowania się drogą radiową z rozrusznikami serca) oraz przez firmy eksploatujące złoża ropy naftowej i gazu.

Protokół CoAP

CoAP jest promowany jako "well designed", gdyż bazuje na RFC 7252 Constrained Application Protocol. Analogicznie jako HTTP, CoAP bazuje na sukcesie modela REST implementowanego w współcześnie w modnym świecie mikrousług / SOA na HTTP. Używa lekkiego UDP zamiast cięzkiego TCP/IP.
Protokół CoAPI zakłada użycie formatów XML, JSON ale wnosi również binarny format JSONa zwany CBOR opisany w RFC 7049 Concise Binary Object Representation.
CoAP posiada zaimplementowane rozpoznawanie urządzeń oraz właściwości spośród nodów, które działają w sieci IoT. Jest to dość praktyczna wzmianka, biorąc pod uwagę sporą liczbą urządzeń IoT, która ewolucyjnie powinna podzielić się na grupy specjalizacji w przyszłości. Discovery w CoAP może tylko wesprzeć ten podział logicznych grup urządzeń IoT.




Dla potrzeb implementacji protokołu IP w niewielkich urządzeniach (małe czujniki, elementy wykonawcze, jednoukładowe sterowniki czy moduły monitorujące) opracowano protokół aplikacji CoAP (ang. Constrained Application Protocol), dedykowany do aplikacji z węzłami sieciowymi o ograniczonych zasobach pamięci i mocy obliczeniowej, realizujących proste zdania i funkcjonalności, ale wymagających komunikacji za pośrednictwem sieci Ethernet lub Internet. Protokół CoAP umożliwia implementację funkcji protokołu HTTP i obsługi stron WWW w prostych konstrukcyjnie modułach i węzłach sieciowych.

Protokół AMQP

AMQP (Advanced Message Queueing Protocol) to zaawansowany protokół kolejkowania komunikatów.
Najpopularniejsza implementacja protokołu AMQP to system RabbitMQ. Jest on czymś w rodzaju firmy pocztowej, która jest organizacją złożoną nie tylko z placówek pocztowych, ale i całej infrastruktury służącej do przekazywania wiadomości z jednego miejsca na drugie, od nadawcy do odbiorcy.
AMQP posiada wiele integracji w gotowych frameworkach w wielu popularnych językach programowania. Śmiało można uznać go za standard w branży IT.

Protokół XMPP

XMPP (ang. Extensible Messaging and Presence Protocol Read) znany kiedyś protokół jako Jabber. Pozwala enkapsulować inne protokoły komunikacji tekstowej w komunikatorach internetowych. To było kiedyś, bo współcześnie jest to uznany protokół bazujący na XML do komunikacji w czasie rzeczywistym. Umożliwia zarówno wymianę komunikatów jak i statusów.


Protokół XMPP zasadniczo używany jest do błyskawicznej komunikacji między użytkownikami, ale nie ma przeszkód by używać go jak poczty elektronicznej tj. uruchamiać pobieranie wiadomości co pewien czas.

Protokół STOMP

STOMP to tekstowy protokół komunikacji z ramkami oparty na HTTP. Protokół STOMP został zaprojektowany jako bardzo prosty w implementacji, co może być korzystne w kontekście działania na urządzeniach wbudowanych.
Najpopularniejszym użyciem protokołu jest STOMP na Web Socket co daje nam nieograniczone możliwości implementacji protokołu z WebSockets, które są już wybudowane we wszystkie współczesne przeglądarki internetowe. Praktycznie oznacza to, że nasz system IoT implementujący STOMP poprzez Web Socket może zachodzić w interakcje z przeglądarką każdego klienta i w czasie rzeczywistym utrzymywać wymieniać komunikaty.

Dodatkowe informacje o protokołach IoT

Oto prezentacja pokazująca nowe trendy w protokołach IoT:



Prezentacja uzupełniająca wiedzę o protokołach IoT:

Tabela ze szczegółami dla wymienionych protokołów:

Linki:
Wybór protokołu IoTL AMQP, MQTT, or STOMP
REDHAT używa protokołu STOMP do testowania serwera komunikatów qiot containers