Post on 18-Feb-2020
transcript
126
99.. PPRROOTTOOKKOOLLII AAPPLLIIKKAATTIIVVNNOOGG SSLLOOJJAA UU IIOOTT
Do sada proučavane tehnologije omogućavaju povezivanje pametnih uređaja u PAN ili LAN
mrežu. Na aplikativnom sloju, Zigbee, Z-Wave i BLE modeluju osnovne funkcionalnosti pametnih
uređaja (kontrola svetla, temperature, merenje temperature i vlažnosti vazduha i sl.), putem Zigbee
modela uređaja, Z-Wave klasa uređaja, i BLE profila uređaja. Aplikativni sloj svake od ovih
tehnologija omogućava međusobnu komunikaciju istorodnih uređaja, i kreiranje logike za kontrolu i
nadgledanje uspostavljene mreže.
Međutim, lokalna mreža istorodnih pametnih uređaja obično nije izolovan sistem, već je
najčešće u sprezi sa drugim mrežama, kao i IoT sistemom u oblaku. Komunikacija između
različitih, potencijalno udaljenih komponenti sistema, takođe je zadatak aplikativnog sloja. Za
potrebe IoT rešenja, HTTP/REST API nije optimalno rešenje za komunikaciju na aplikativnom
sloju, jer ne omogućava da se ista poruka na jednostavan način distribuira većem broju komponenti
sistema. Takođe, tipično su podaci koji se šalju u IoT sistemu kratki, tako da je višak protokola koji
HTTP unosi značajan. Stoga je za potrebe IoT rešenja razvijen veći broj protokola aplikativnog
sloja koji su bazirani na razmeni kratkih poruka, poput MQTT, AMQP, CoAP, WAMP, STOMP,
XMPP i sl. Zajedničko svim tim protokolima je da omogućavaju rad sa minimalnim veličinama
paketa (mali je višak protokola), zahtevaju mali propusni opseg i malu potrošnju energije. U tekstu
koji sledi, obradićemo osnovne karakteristike MQTT i AMQP protokola.
9.1. MQTT (Message Queuing Telemetry Transport) protokol
MQTT protokol je jednostavan protokol baziran na sistemu pretplate i objave, koji je
namenjen prenosu kratkih poruka. U pitanju je protokol aplikativnog sloja, koji koristi TCP/IP stek
- Slika 212.
Slika 212. MQTT koristi TCP/IP
9.1.1. Mehanizam pretplate i objave
MQTT koristi mehanizam pretplate i objave (publish-subscribe). Kako bi se izvršilo
usmeravanje poruke ka korisnicima kojima je namenjena definišu se teme (topic). Uređaj koji šalje
objavljuje poruku na određenu temu. Uređaj koji želi da prima poruke pretplaćuje se na određenu
temu. Broker raspoređuje poruke između uređaja, u skladu sa temama na koje su pretplaćeni i na
koje objavljuju.
127
Slika 213. Mehanizam pretplate i objave
Na slici Slika 213 prikazan je mehanizam pretplate i objave. Temperaturni senzor objavljuje
poruke na temu temperature, a mobilni i laptop uređaji su pretplaćeni na tu istu temu. Poruka o
promeni temperature objavljuje se prvo do brokera, a broker je zatim šalje do krajnjih pretplatnika.
Prednost ovog pristupa leži u činjenici da se omogućava jednostavno distribuiranje iste poruke do
svih zainteresovanih korisnika. Pri tome, nije potrebno da uređaj koji objavljuje poruku zna detalje
o pretplatnicima (njihovu adresu, stanje veze i sl.).
9.1.2. Format poruke
Format MQTT poruke predstavljen je na slici Slika 214. Sve poruke sadrže informaciju o
tipu poruke, QoS nivou koji poruka zahteva (QoS se u MQTT protokolu odnosi na garanciju
isporuke poruke, i o njemu će biti reči u poglavljima koja slede), kao i informaciju da li se zahteva
od brokera da poruku sačuva i isporuči naknadno konektovanim klijentima (retain polje). Opciono,
poruka može imati i zaglavlje i podatke.
Slika 214. Format MQTT poruke
128
9.1.3. Povezivanje i prekid veze sa brokerom
MQTT klijent se povezuje sa brokerom slanjem CONNECT poruke, na koju broker
odgovara CONNACK porukom - Slika 215. CONNECT poruka sadrži identifikaciju klijenta,
informaciju o tome da li je potrebno započeti novu sesiju, kao i vreme života konekcije (keepAlive).
Vreme života predstavlja vremenski interval tokom kog se očekuje da klijent i broker razmene neku
poruku, obnavlja se pri svakoj uspešnoj komunikaciji, a ako istekne predstavlja signal problema u
sistemu. Opciono, moće sadržati informacije za autorizaciju klijenta (korisničko ime i šifru), kao i
informacije o oproštajnoj poruci koju broker treba da pošalje zainteresovanim korisnicima, u
slučaju da dođe do neplaniranog prekida konekcije sa klijentom. Odgovor na zahtev za konekcijom
je CONNACK poruka, koja sadrži informaciju o tome da li je već postojala sesija za datog klijenta
na brokeru, i kod koji signalizira uspeh ili neuspeh operacije konektovanja.
Slika 215. Povezivanje sa brokerom
Slika 216. Sadržaj CONNECT i CONNACK poruka
Kontrolisan prekid veze ostvaruje se slanjem DISCONNECT poruke (prazna poruka) od
klijenta ka brokeru – Slika 217.
Slika 217. DISCONNECT poruka
Međutim, moguće je da do prekida veze između klijenta i brokera dođe usled nekih
spoljašnjih faktora, zbog prekida TCP/IP konekcije na primer. U tom slučaju, po isteku vremena
života konekcije, broker će poslati oproštajnu LWT poruku (Last Will and Testament), na temu i sa
sadržajem koje je klijent specificirao pri konektovanju na broker, u okviru CONNECT poruke.
129
9.1.4. Objavljivanje
Klijent koji želi da pošalje sadržaj na neku temu koristi PUBLISH poruku za slanje. U
okviru ove poruke specificirani su identifikator paketa, tema na koju se objavljuje, željeni kvalitet
servisa, da li se želi isporuka naknadno konektovanim klijentima, da li je u pitanju duplikat već
poslate poruke i sl. Sadržaj poruke može biti slika, tekst, enkriptovani podaci, binarni podaci i sl.
Slika 218. Mehanizam objave
Slika 219. PUBLISH poruka
9.1.5. Pretplata
Klijent koji želi da se pretplati na neku temu šalje SUBSCRIBE poruku brokeru. Ova poruka
sadrži listu tema na koje klijent želi da se pretplati, kao i željeni kvalitet servisa. Na zahtev za
pretplatom broker odgovara SUBACK porukom, koja sadrži povratnu informaciju o statusu svake
zahtevane pretplate. Nakon ostvarene pretplate, broker će usmeravati objavljene poruke na
određenu temu do pretplaćenog klijenta koristeći PUBLISH poruku.
Slika 220. Mehanizam pretplate
130
Slika 221. Format SUBSCRIBE i SUBACK poruka
Kljent koji želi da ukine pretplatu na neku temu šalje poruku UNSUBSCRIBE brokeru. I ova
poruka sadrži listu tema sa kojih klijent želi da ukine pretplatu. Prijem zahteva za prekid pretplate
broker potvrđuje slanjem UNSUBACK poruke.
Slika 222. Ukidanje pretplate
Slika 223. Format UNSUBSCRIBE i UNSUBACK poruka
9.1.6. Tema
MQTT tema (topic) je UTF-8 enkodovani string. Teme su hijerarhijski organizovane, tj.
podržavaju više nivoa koji su međusobno razdvojeni kosom crtom - Slika 224
Slika 224. MQTT tema
Prilikom pretplaćivanja na neku temu, podržani su specijalni znaci + i #. Znak + menja jedan
nivo u temi, dok # menja više nivoa.
131
9.1.7. Kvalitet servisa (QoS)
Kvalitet servisa odnosi se na garanciju isporuke poruke. QoS 0 garantuje da će poruka biti
isporučena najviše jednom. Klijent koji je poslao poruku sa QoS 0 nema nikakvu povratnu
informaciju o isporuci poruke, i može se dogoditi da ona ne bude isporučena. Broker će pokušati
jedanput da je pošalje ka pretplatnicima, ali ukoliko u tome ne uspe, ne postoji mehanizam za
ponovno slanje - Slika 225.
Slika 225. QoS nivo 0
Kod kvaliteta servisa QoS 1, očekuje se potvrda isporuke poruke, PUBACK. Ako ta poruka
ne stigne u određenom vremenskom intervalu, klijent će ponovo objaviti početnu poruku. Međutim,
to može rezultovati višestrukom isporukom pretplaćenim klijentima. Zato se kaže da QoS 1
garantuje barem jednu isporuku.
Slika 226. QoS nivo 1
Kod kvaliteta servisa QoS 2 garantuje se da će poruka biti isporučena tačno jednom. Klijent
koji je poslao poruku sa QoS 2 očekuje potvrdu u vidu PUBREC poruke (publish received).
Primalac poruke čuva informaciju o identifikatoru primljenog paketa sve dok ne dobije PUBREL
(publish released) poruku od pošiljaoca. Ovom porukom potvrđuje se da pošiljalac zna da je poruka
isporučena i neće slati duplikate. Eventualni duplikati koji u međuvremenu dospeju do odredišta se
odbacuju. Prijem PUBREL poruke primalac potvrđuje slanjem PUBCOMP (publish completed)
poruke. Po prijemu PUBCOMP poruke pošiljalac je siguran da je poruka isporučena tačno jednom.
Slika 227. QoS nivo 2
132
9.2. AMQP (Advanced Message Queuing Protocol) protocol
Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti velikom
broju pretplatnika, AMQP je dizajniran pre svega kako bi se omogućila skalabilnost sistema.
Poruke koje se razmenjuju putem AMQP protokola nose informaciju o nekim zadacima koje treba
obaviti. One se čuvaju u redovima za obradu, odakle ih preuzimaju pretplatnici. Pretplatnici dele
teret obrade poruka, tj. jednom obrađena poruka uklanja se iz reda i ne stiže do ostalih pretplatnika.
Slika 228. Skalabilnost sistema korišćenjem redova
Komponente AMQP modela prikazane su na slici Slika 229. Generator poruka (producer,
publisher) je aplikacija koja generiše poruke (zadatke). Primalac poruka (consumer, worker,
subscriber) je aplikacija koja obrađuje poruku na željeni način. Poruke između generatora i
primaoca distribuira broker.
Slika 229. Komponente AMQP modela
133
Broker sadrži centralu (exchange) koja je zadužena da prima poruke od generatora poruka i
usmerava ih ka odgovarajućem izlaznom redu. Poruka u izlaznom redu (queue) ostaje dok je ne
preuzme neki primalac poruke. Centrala vrši usmeravanje poruka na osnovu veze (binding) koja se
definiše od strane aplikacije. Postoji nekoliko tipova veze: direktna, razgranata, na osnovu teme, ili
na osnovu zaglavlja poruke.
Svaka poruka sastoji se iz tela, zaglavlja i atributa - Slika 230. Ključ za usmeravanje (routing
key) je atribut svake poruke koja dolazi do centrale. Zaglavlje poruke sadrži niz uređenih parova
ključ-vrednost, kojima se prenose neke dodatne informacije o poruci i može se koristiti za
usmeravanje poruke u centrali.
Slika 230. Format AMQP poruke
9.2.1. Usmeravanje poruka
i) Direktno usmeravanje (direct routing)
Direktno usmeravanje vrši se na osnovu ključa za usmeravanje u poruci. Pri formiranju
redova, definiše se željeni ključ kao veza između reda i centrale.
Slika 231. Direktno usmeravanje
134
ii) Razgranato usmeravanje (fanout routing)
U slučaju razgranatog usmeravanja, svaka poruka koja dođe do centrale usmerava se ka svim
redovima. Da bi se koristilo razgranato usmeravanje, centrala mora biti konfigurisana tako da radi u
tom režimu (ne uspostavlja se veza reda i centrale). Razgranato usmeravanje omogućava da se ista
poruka obradi na različite načine.
Slika 232. Razgranato usmeravanje
iii) Usmeravanje prema temi (topic routing)
Ovaj način usmeravanja je u suštini ekvivalentan mehanizmu objave i pretplate. Veza
specificira teme na koje se red pretplaćuje. Teme su hijerarhijski organizovane, nivoi su razdvojeni
tačkom. Postoji i mogućnost korišćenja karaktera * da se zameni jedan nivo u temi, ili # da se
zameni više njih, prilikom uspostavljanja veze.
Slika 233. Usmeravanje prema temi
135
iv) Usmeravanje prema zaglavlju poruke (header routing)
Podaci iz zaglavlja se koriste za usmeravanje poruke. Veza definiše filtar na osnovu
vrednosti polja u zaglavlju, a polje x-match određuje da li je potrebno da sva polja iz zaglavlja
odgovaraju filteru, ili je dovoljno da jedno polje zadovolji uslov iz filtera.
Slika 234. Usmeravanje prema zaglavlju poruke