10
126 9 9 . . PROTOKOLI APLIKATIVNOG SLOJA U IOT 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.

99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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.

Page 2: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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

Page 3: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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.

Page 4: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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

Page 5: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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.

Page 6: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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

Page 7: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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

Page 8: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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

Page 9: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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

Page 10: 99.. PROTOK KOOLLII SAAPPLLIIKAATTIIVVNNOOGG … · 9.2. AMQP (Advanced Message Queuing Protocol) protocol Za razliku od MQTT protokola, koji je koristan kada treba istu poruku isporučiti

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