SlideShare a Scribd company logo
1 of 135
Download to read offline
Protocol Rollercoaster



da HTTP a AMQP,

passando per CoAP e MQTT
@stefanovalle



Lavoro per...
https://www.eclipse.org/smarthome/

MQTT
 CoAP
 AMQP
 HTTP

TCP

...

UDP

IPv4 a IPv6 / 6LoWPAN

IEEE
802.3

IEEE
802.11

IEEE
802.16

...
IEEE
802.15

Adapted from Choice of Effective Messaging Protocols for IoT Systems: MQTT, CoAP, AMQP and HTTP - Nitin Naik

MQTT
 CoAP
 AMQP
 HTTP

TCP

...

UDP

IPv4 a IPv6 / 6LoWPAN

IEEE
802.3

IEEE
802.11

IEEE
802.16

...
IEEE
802.15

Adapted from Choice of Effective Messaging Protocols for IoT Systems: MQTT, CoAP, AMQP and HTTP - Nitin Naik

From Flickr - The Conmunity - Pop Culture Geek - the dash from Paul Nigh's Time Car Delorean from Back to the Future II

Posizione, velocità,
decelerazioni improvvise

Posizione, velocità,
decelerazioni improvvise

https://www.eclipse.org/smarthome/

Posizione, velocità,
decelerazioni improvvise

Posizione, velocità,
decelerazioni improvvise

?
 ?

HTTP

HTTP

client
 server

GET http://www.mysite.com/bikes
200 OK
client
 server
{["vendor": "...",
"model": "..."],
[...]}
Richiesta HTTP

(+headers +body)
Verbo
 URL

GET http://www.mysite.com/bikes
200 OK
client
 server
{["vendor": "...",
"model": "..."],
[...]}
Risposta HTTP

(+headers)

Status code

Body

GET http://www.mysite.com/bikes
200 OK
POST
/bikes/myBike/position
POST
/bikes/myBike/speed
200 OK
200 OK
{"position": [25.1212, 55.1535],
"time": 2018-06-15T14:22:13.421Z}
{"speed": 4.5,
"time": 2018-06-15T14:22:13.421Z}
https://martinfowler.com/articles/richardsonMaturityModel.html

POST
/bikes/myBike/position
POST
/bikes/myBike/speed
200 OK
200 OK
{"position": [25.1212, 55.1535],
"time": 2018-06-15T14:22:13.421Z}
{"speed": 4.5,
"time": 2018-06-15T14:22:13.421Z}
RMM 

Level 2

HTTP

HTTP

HTTP

HTTP

Attivazione freno

Entità

Comando Evento
Richiede
cambiamento di
stato

Notifica
cambiamento di
stato

HTTP

HTTP

HTTP

HTTP

HTTP

Come raggiungere
l’host?

CoAP

Introduction to Resource-Oriented Applications in Constrained Networks - Zach Shelby

Internet
 Constrained Environments

URI

coap://www.abcd.com:5683/sensors/temperature

nuovo schema
 host
 porta

(default 5683)

risorsa

Metodi

GET

POST

PUT

DELETE

Stessa semantica di
HTTP

Understanding Constrained Application Protocol - Vishnu Sharma

CON - Confirmable message

Richiede una risposta (positiva / negativa)

Tipi di messaggi

CON - Confirmable message

NON - Non-confirmable message

Non richiede una risposta, per i casi in cui
la perdita di un messaggio non è un
problema

Tipi di messaggi

CON - Confirmable message

NON - Non-confirmable message

ACK - Acknowledgement

Conferma ricezione di messaggio CON



Tipi di messaggi

CON - Confirmable message

NON - Non-confirmable message

ACK - Acknowledgement

RST - Negative acknowledgment

Indica un problema nella ricezione / lettura
dei dati

Tipi di messaggi

Understanding Constrained Application Protocol - Vishnu Sharma

Response codes

(0) 2.00 OK

(1) 2.01 Created

(14) 3.04 Not Modified

(20) 4.00 Bad Request

(21) 4.01 Unauthorized

…

(40) 5.00 Internal Server Error

Understanding Constrained Application Protocol - Vishnu Sharma

Understanding Constrained Application Protocol - Vishnu Sharma

Client
 Server

GET /speed - Token 0x11 - Observe: empty
Observe Option

Client
 Server

GET /speed - Token 0x11 - Observe: empty
2.05 Content - Token 0x11 - Observe: 1
Payload: 32
2.05 Content - Token 0x11 - Observe: 2
Payload: 21
2.05 Content - Token 0x11 - Observe: 23
Payload: 8
HTTP vs CoAP

Per tutti i dispositivi in grado
di connettersi a Internet



TCP



Non supporta multicast



Modello client / server





Richiede comunicazione
sincrona



Pacchetti di maggiore
dimensione



Per dispositivi con risorse
limitate



UDP



Supporta multicast



Modello client / server e
pub/sub



Comunicazione sincrona e
asincrona



Pacchetti di minore
dimensione



CoAP in sintesi...

• HTTP-like e interoperabile con HTTP

• UDP per il livello di trasporto

• Più snello di HTTP (richiede meno risorse)

From Flickr - Alessandro Grussu - 100° Giro d'Italia - 02

MQTT

broker

client A

client B

subscribe

consegna

client C

subscribe

pubblica

consegna

Modello pub / sub

broker

client A

client B

client C

topic A

topic B

topic ...

pubblica

topic A

sub
 topic A

sub
 topic B

https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment/

https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe/

https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe/

Temperatura della stanza

temperatura-aulaS8

topic valido?

topic comodo da usare?

SI

NO

Topics best practices

uniPN/edificioS/aulaS8/temperatura

gerarchia
generico
 specifico

Topics best practices

uniPN/edificioS/aulaS8/temperatura

separatore

Le temperature di

tutte le aule dell’edificio S?

uniPN/edificioS/+/temperatura

wildcard +

Tutti i dati di tutte le aule
dell’edificio S?

uniPN/edificioS/#

wildcard #

?
 ?

broker

MQTT

MQTT

broker

bk99/bike1/position

{"position": [25.1212, 55.1535],
"time": 2018-06-15T14:22:13.421Z}
broker

subscribe

messaggio

Entità

Comando Evento
QoS

QoS 0 - al massimo uno

QoS 1 - almeno uno

QoS 2 - esattamente uno

QoS

QoS 0 - al massimo uno

QoS 1 - almeno uno

QoS 2 - esattamente uno

broker
client A
 client B

subscribe

Qos Y

publish

QoS X

broker

come sapere se 

client va offline?

https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment/

broker

come possiamo 

non perdere messaggi
se rimaniamo offline
per un po’?

https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment/

broker

quali dati visualizzati
allo startup?

broker

https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe/

broker

(retainFlag = true)

broker

(retainFlag = true)

ws

• Protocollo di messaggistica

• Necessario un broker

• TCP per il livello di trasporto

• Semplice, adatto a reti lente /
dispositivi con capacità limitate

MQTT 5

(non retrocompatibile con v. 3.1.1)

• scadenza messaggi e sessioni

• shared subscriptions: load balancing dei
clients

• flow control (limita numero di messaggi
in attesa di consegna)

• estensibile via user properties

AMQP

queue

enqueue

sender

receiver

dequeue

queue A
sender
A

recv B

recv C
sender
E

recv D

Casi d’uso più comuni

• operazioni batch

• scambio messaggi asincrono /
sincronizzazione processi

• suddivisione carico di lavoro

queue A
sender
A

recv B

Server

sender
A

recv B

Virtual host

Exchange

Queue
Binding

Exchange

Fanout
Direct
 Topic
 Headers

Exchange

Fanout
Direct
 Topic
 Headers

(unicast) routing key == binding key

ex

queue B

queue A
BK = A
RK = A

BK = B

Exchange

Fanout
Direct
 Topic
 Headers

(broadcast) messaggio pubblicato su tutte le code

ex

queue B

queue A

Exchange

Fanout
Direct
 Topic
 Headers

instradamento via pattern matching

ex

queue B

queue A
BK = 1.*.3
RK = 1.2.3

BK = 3.#

Exchange

Fanout
Direct
 Topic
 Headers

routing via attributi espressi sugli header dei msg

ex

queue B

queue A
headers match?

Server

sender
A

recv B

Virtual host

Exchange

Queue
Binding

AMQP
0.9.1 

!=

AMQP 

1.0 

via plugin

Container
Container

Container
Container

Connection

Container
Container

Connection

Session

Container
Container

Connection

Session

Channel

Container
Container

Connection

Session

Channel

Node
 Node

Container
Container

Connection

Session

Channel

Node
 Node

Casi d’uso

Exchange >> Nodes + Links

Nodo

consumer A

link

Producer

consumer N

consumer B

filter:

field = 1.*.3

Topic exchange

?
 ?

broker

AMQP

AMQP

Entità

Comando Evento
Rispetto ad MQTT

• acknowledgment dei messaggi

• supporto per transazioni

• code a priorità

• controllo di flusso

• routing avanzato

HTTP
 CoAP

MQTT
 AMQP

Prestazioni
 M2M vs IoT

Controllo di
flusso avanzato

Limitazioni hw

Routing flessibile

Message overhead
basso
 alto

Messagesize
basso
alto

HTTP

CoAP

MQTT

AMQP

Adapted from Choice of Effective Messaging Protocols for IoT Systems: MQTT, CoAP, AMQP and HTTP - Nitin Naik

Resource Requirement
basso
 alto

PowerConsumption
basso
alto

HTTP

CoAP

MQTT

AMQP

Adapted from Choice of Effective Messaging Protocols for IoT Systems: MQTT, CoAP, AMQP and HTTP - Nitin Naik

Latency
basso
 alto

Bandwidth
basso
alto

HTTP

CoAP

MQTT

AMQP

Adapted from Choice of Effective Messaging Protocols for IoT Systems: MQTT, CoAP, AMQP and HTTP - Nitin Naik

orientato al Web;
contesti richiesta /
risposta

HTTP

dispositivi limitati;
contesti richiesta /
risposta

CoAP

pub / sub; 

dispositivi limitati

MQTT

code di messaggi;
gestione evoluta del
routing

AMQP

broker
MQTT

MQTT

HTTP +
Web
Socket

queue

queue

Polyglot programming

Neal Ford, 2006

applications should be written in a 

mix of languages to take advantage
of the fact that different languages
are suitable for tackling different
problems

Martin Fowler

Polyglot programming

Neal Ford, 2006

Polyglot persistence

Scott Leberknight, 2008

Polyglot messaging

no official definition

From Flickr - Bre Pettis - Dave's Bike Tools

Grazie per l’attenzione

Domande?

Per saperne di più...

● http://mqtt.org/

● https://www.hivemq.com/mqtt-essentials/

● https://coap.technology/

● https://www.amqp.org/

● https://martinfowler.com/articles/richardson
MaturityModel.html

@stefanovalle

s.valle@mvlabs.it





mvlabs.it




More Related Content

Similar to Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT

5 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte35 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte3Majong DevJfu
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasportoacapone
 
2 Protocolli Applicativi
2 Protocolli Applicativi2 Protocolli Applicativi
2 Protocolli Applicativiacapone
 
Corso live streaming sett 2013 lesson 4
Corso live streaming sett 2013 lesson 4Corso live streaming sett 2013 lesson 4
Corso live streaming sett 2013 lesson 4InSide Training
 
Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Giuseppe Vizzari
 
SignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancavaSignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancavaAndrea Tosato
 
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...TiborRacman
 
11 Evoluzione
11 Evoluzione11 Evoluzione
11 Evoluzioneacapone
 
5 Protocolli Trasporto Parte1
5 Protocolli Trasporto Parte15 Protocolli Trasporto Parte1
5 Protocolli Trasporto Parte1Majong DevJfu
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network ComandiMauro Ferrigno
 
02 - Introduzione a Internet (I)
02 - Introduzione a Internet (I)02 - Introduzione a Internet (I)
02 - Introduzione a Internet (I)Giuseppe Vizzari
 
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...Codemotion
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure FunctionLuca Congiu
 
2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)Giuseppe Vizzari
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su LinuxMajong DevJfu
 
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...TiborRacman
 

Similar to Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT (20)

5 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte35 Protocolli Trasporto Parte3
5 Protocolli Trasporto Parte3
 
3 Livello Trasporto
3 Livello Trasporto3 Livello Trasporto
3 Livello Trasporto
 
2 Protocolli Applicativi
2 Protocolli Applicativi2 Protocolli Applicativi
2 Protocolli Applicativi
 
Corso live streaming sett 2013 lesson 4
Corso live streaming sett 2013 lesson 4Corso live streaming sett 2013 lesson 4
Corso live streaming sett 2013 lesson 4
 
Socket python
Socket pythonSocket python
Socket python
 
Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19
 
SignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancavaSignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancava
 
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
 
11 Evoluzione
11 Evoluzione11 Evoluzione
11 Evoluzione
 
5 Protocolli Trasporto Parte1
5 Protocolli Trasporto Parte15 Protocolli Trasporto Parte1
5 Protocolli Trasporto Parte1
 
13 Linux Network Comandi
13 Linux Network Comandi13 Linux Network Comandi
13 Linux Network Comandi
 
02 - Introduzione a Internet (I)
02 - Introduzione a Internet (I)02 - Introduzione a Internet (I)
02 - Introduzione a Internet (I)
 
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
DomusDotNet, DotNetCode & dotNET{podcast} Meetup - Serverless Computing - Gio...
 
ASP.NET AND Azure Function
ASP.NET AND Azure FunctionASP.NET AND Azure Function
ASP.NET AND Azure Function
 
TCP IP
TCP IPTCP IP
TCP IP
 
Gnutella
GnutellaGnutella
Gnutella
 
2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
Analisi e prototipazione di un sistema di streaming per la localizzazione in ...
 
Iperf
IperfIperf
Iperf
 

More from Stefano Valle

Instant ACLs with Zend Framework 2
Instant ACLs with Zend Framework 2Instant ACLs with Zend Framework 2
Instant ACLs with Zend Framework 2Stefano Valle
 
NoSQL Containers get Rich
NoSQL Containers get RichNoSQL Containers get Rich
NoSQL Containers get RichStefano Valle
 
Asset management with Zend Framework 2
Asset management with Zend Framework 2Asset management with Zend Framework 2
Asset management with Zend Framework 2Stefano Valle
 
Moduli su Zend Framework 2: come sfruttarli
Moduli su Zend Framework 2: come sfruttarliModuli su Zend Framework 2: come sfruttarli
Moduli su Zend Framework 2: come sfruttarliStefano Valle
 
Stime e preventivi in un contesto di sviluppo agile
Stime e preventivi in un contesto di sviluppo agileStime e preventivi in un contesto di sviluppo agile
Stime e preventivi in un contesto di sviluppo agileStefano Valle
 
Introduzione alle metodologie di sviluppo agile
Introduzione alle metodologie di sviluppo agileIntroduzione alle metodologie di sviluppo agile
Introduzione alle metodologie di sviluppo agileStefano Valle
 

More from Stefano Valle (7)

Instant ACLs with Zend Framework 2
Instant ACLs with Zend Framework 2Instant ACLs with Zend Framework 2
Instant ACLs with Zend Framework 2
 
NoSQL Containers get Rich
NoSQL Containers get RichNoSQL Containers get Rich
NoSQL Containers get Rich
 
Asset management with Zend Framework 2
Asset management with Zend Framework 2Asset management with Zend Framework 2
Asset management with Zend Framework 2
 
Moduli su Zend Framework 2: come sfruttarli
Moduli su Zend Framework 2: come sfruttarliModuli su Zend Framework 2: come sfruttarli
Moduli su Zend Framework 2: come sfruttarli
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
Stime e preventivi in un contesto di sviluppo agile
Stime e preventivi in un contesto di sviluppo agileStime e preventivi in un contesto di sviluppo agile
Stime e preventivi in un contesto di sviluppo agile
 
Introduzione alle metodologie di sviluppo agile
Introduzione alle metodologie di sviluppo agileIntroduzione alle metodologie di sviluppo agile
Introduzione alle metodologie di sviluppo agile
 

Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT