18
Pub/Sub basics

Pub/Sub Basics

Embed Size (px)

Citation preview

Page 1: Pub/Sub Basics

Pub/Subbasics

Page 2: Pub/Sub Basics

Mauro ServientiArchitetto @ Particular [email protected]

@mauroservienti//github.com/mauroservienti

Page 3: Pub/Sub Basics

Evoluzione della specie• Piccolo software (o POC)• Successo, crescita e aggiunta di funzionalità• Il team scala e diventa più grande o distribuito• Il mantenimento diventa un incubo• Con sonseguenti alti rischi

Va a finire che parte sempre bene e finisce sempre...

Page 4: Pub/Sub Basics
Page 5: Pub/Sub Basics

...solve the problem you want?

Page 6: Pub/Sub Basics

SOA your solution

Coupling your problem is

Page 7: Pub/Sub Basics

SOA Tenets1. «Boundaries Are Explicit»2. «Services Are Autonomous»3. «Services Share Schema and Contract, Not Class»4. «Service Compatibility Is Based Upon Policy»

Page 8: Pub/Sub Basics

Boundaries Are Explicit• I servizi* interagiscono grazie al passaggio esplicito

di «messaggi» che possono attraversare i confini.• Attraversare i confini di un servizio può essere costoso.

• Un confine rappresenta la netta separazione tra l’API pubblica di un servizio e la sua implementazione interna e privata.

* Nel mondo SOA i servizi sono semplici componenti software non servizi intesi come Servizi per Windows o Demoni

Page 9: Pub/Sub Basics

...coupling your problem is

Page 10: Pub/Sub Basics

Accoppiamento• Afferente: relativo a, che conduce verso di se• Altri componenti dipendono da noi

• Efferente: che porta fuori• Noi dipendiamo da altri componenti

• Temporale• Ad esempio RPC

• Spaziale• deployment, indirizzi, topologia di rete

• Tecnologico• Protocolli (es. .Net Remoting)

Page 11: Pub/Sub Basics

E quindi?Come disaccoppiare?

Page 12: Pub/Sub Basics
Page 13: Pub/Sub Basics

Messaggi, Comandi ed Eventi• Messaggi:• un pezzo di informazione atomica;• Utilizzati per portare il sistema ad un nuovo stato

consistente;

• Comandi:• messaggi imperativi;• diretti verso un destinatario ben preciso;

• Eventi:• una rappresentazione immutabile del passato;• Diretti a chiunque sia interessato;

Page 14: Pub/Sub Basics

Messaging patterns

Page 15: Pub/Sub Basics

Request / Response• Un messaggio viene inviato ad un destinatario;• Il destinatario può rispondere;• Il mittente conosce perfettamente il destinatario:

• Sa dove è;• Sa cosa mandare;

• Il destinatario:• Non è tenuto a sapere dove sia il mittente;• Sa cosa il mittente si aspetta come risposta;

• Abbiamo accoppiamento tra mittente e destinatario;• Esiste anche Request/Reply

Page 16: Pub/Sub Basics

Publish / Subscribe• Un attore nel sistema agisce su qualche cosa:

• L’attore può pubblicare un evento verso l’intero sistema;• Colui che pubblica non ha nessun interesse nei confronti di chi

sottoscrive;

• Un altro attore può essere interessato ad uno o più eventi:• L`attore sottoscriverà gli eventi di suo interesse;

• Tutta l`intenzione è dal lato di chi sottoscrive:• Chi sottoscrive conosce chi pubblica, non il contrario;

• Chi pubblica manderà in maniera asincrona una copia dell’evento a tutti i sottoscrittori;• C’è meno accoppiamento tra chi pubblica e chi sottoscrive;

Page 17: Pub/Sub Basics

Accoppiamento: il problema?• In una parola sola: versioning;

• Request / Response: al cambio di uno degli attori è quasi certamente necessario aggiornare anche l’altro;

• Publish / Subscribe: chi pubblica può molto facilmente garantire la retro-compatibilità;

Page 18: Pub/Sub Basics

Possiamo declinare tutto ciò su una UI?Un esempio con AngularJS