http://particular.net
Jak połączyć frontend z backendem......za pomocą SignalR i kolejek
Marcin Hoppe
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
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ę
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
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
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