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

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

Transcript of 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

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

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

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

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

Ping / Pong: przykładowa aplikacja

SPAclient

webserver

Ping request

Powiadomienie Pong

Request ACK

Back-endserver

przetwarzaniew tle

Obsługa ping

Pong response

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

Demo #1

Demo #1 - Podsumowanie

Korelacja

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

Ping / Pong: Correlation ID

SPAclient

webserver

Ping + Correlation ID

Powiadomienie + Correlation ID

ACK

Back-endserver

przetwarzaniew tle

Pong + Correlation ID

Message + Correlation ID

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”

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ę

Demo #2

Demo #2 - Podsumowanie

Skalowanie

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ą

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

BackplanePodstawa skalowalności

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

Demo #3

Demo #3 - Podsumowanie

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

•Demo #1..#3 na osobnych branchach

•Wymagania• Azure SDK• RabbitMQ• Redis

Powering front-end apps with messagingby Elton Stoneman

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

Więcej na:

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

[email protected]

@marcin_hoppe