Top Banner
http://particular.net Jak połączyć frontend z backendem... ...za pomocą SignalR i kolejek Marcin Hoppe
26

Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Apr 13, 2017

Download

Software

Marcin Hoppe
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

http://particular.net

Jak połączyć frontend z backendem......za pomocą SignalR i kolejek

Marcin Hoppe

Page 2: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Komunikacja dwukierunkowaPołączenie backendu i frontendu może być trudne…

Page 3: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Synchroniczne RPC

•Klient• Korzysta z RPC• Jest zablokowany przez serwer

•Łatwo obsłużyć• Konwersacje• Błędy serwera

•Trudno skalować• Potrzebny jest load balancer

client server

request

response

przetwarzaniesynchroniczne

Page 4: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Asynchroniczne RPC

•Klient• Nadal korzysta z RPC• Jest zablokowany przez serwer

•Łatwo obsłużyć• Konwersacje• Błędy serwera

•Nieco łatwiej skalować• Lepsze zarządzanie zasobami serwera• Nadal potrzebny jest load balancer

client serverprzetwarzanie

asynchroniczne

request

response

async

await

Page 5: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

W pełni asynchronicznie• Klient

• Wysyła żądanie• Natychmiast otrzymuje ACK• Nie jest zablokowany przez serwer

• Serwer• Rozpoczyna przetwarzanie w tle

• Łatwo skalować• Wystarczy dołożyć więcej maszyn

• Trudniej obsłużyć• Konwersacje• Błędy serwera

client server

request

powiadomienie

start

report

ACK

inny procesi/lub

inna maszyna

przetwarzaniew tle

Page 6: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Ping / Pong: przykładowa aplikacja

SPAclient

webserver

Ping request

Powiadomienie Pong

Request ACK

Back-endserver

przetwarzaniew tle

Obsługa ping

Pong response

Page 7: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Azu

re Emu

lator

Back-endserver

Ping / Pong: technikalia

•Klient używa SignalR• Wysyła żądania• Obsługuje zdarzenia

•Serwer używa• NServiceBus• RabbitMQ

•Emulator Azure• “Full”• Load balancer

SPAclient

webserver

Ping request

Request ACK Rab

bitM

Q b

roker

Ping Message

Pong reply

SignalR

SignalR przetwarzaniew tle

Powiadomienie Pong

Page 8: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Demo #1

Page 9: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Demo #1 - Podsumowanie

Page 10: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Korelacja

Page 11: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

ABC korelacji• Dołączamy Correlation ID do wiadomości

• Correlation ID to “nić Ariadny”

• Correlation ID w każdej wiadomości• SignalR i NServiceBus

• Correlation ID powstaje po stronie klienta

Page 12: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Ping / Pong: Correlation ID

SPAclient

webserver

Ping + Correlation ID

Powiadomienie + Correlation ID

ACK

Back-endserver

przetwarzaniew tle

Pong + Correlation ID

Message + Correlation ID

Page 13: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Correlation ID na serwerze•Klient wysyła żądanie

•Serwer

• Generuje Correlation ID

• Odsyła ACK + Correlation ID

•Jeżeli ACK się “zgubi” (np. problem z połączeniem)

• Klient znajdzie się w stanie “nieustalonym”

Page 14: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Correlation ID na kliencie•Klient wysyła żądanie + Correlation ID

•Serwer odsyła ACK

•Jeżeli ACK się “zgubi” (np. problem z połączeniem)

• Klient może ponownie wysłać żądanie

• Serwer może wykonać de-duplikację

Page 15: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Demo #2

Page 16: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Demo #2 - Podsumowanie

Page 17: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Skalowanie

Page 18: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Skalowanie: co może się nie udać?•Klient może się podłączyć do innej instancji serwera

• Nie otrzyma odpowiedzi (“pong”)

•Instancja serwera może zostać “sprzątnięta”

• Klient połączy się z inną instancją

•Klient straci połączenie z serwerem

• Klient połączy się z inną instancją

Page 19: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Ping / Pong: Skalowanie

webserver #1

Ping request

Powiadomienie Pong

Request ACK

Back-end#1

Ping

Pong

webserver #2

webserver #n

Load

balan

cer

Web farm

Rab

bitM

Q b

roker

Back-end#n

Pong

Competing consumers

Competing consumers

SPAclient

SPAclient

Page 20: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

BackplanePodstawa skalowalności

Page 21: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Backplane i skalowanie

SPAclient

webserver #1

Ping request

Powiadomienie Pong

ACK

Back-end#1

Ping

Pong

webserver #2

webserver #n

Load

balan

cer

Web farm

Rab

bitM

Q b

roker

Back-end#n

Pong

Competing consumers

Competing consumers

Redis Backplane

Odebrano Pong

Odebrano Pong

Odebrano Pong

SPAclient

Page 22: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Demo #3

Page 23: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Demo #3 - Podsumowanie

Page 24: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Kod z prezentacji•https://github.com/Particular/Webinar.SignalR

•Demo #1..#3 na osobnych branchach

•Wymagania• Azure SDK• RabbitMQ• Redis

Page 25: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

Powering front-end apps with messagingby Elton Stoneman

http://tiny.cc/rabbitmq-signalr-webinar

Więcej na:

http://particular.net/videos-and-presentations

Page 26: Jak połączyć frontend z backendem za pomocą SignalR i kolejek

[email protected]

@marcin_hoppe