SlideShare a Scribd company logo
1 of 40
Krzysztof Sobczak, Software Engineer - Gwent Webservices
Przetwarzanie rozproszone z wykorzystaniem
komunikacji asynchronicznej w grze online
Gwent webservices – GOG.com
POKRYWAJĄ M.IN.:
• NAGRODY I OSIĄGNIĘCIA
• MIKROTRANSAKCJE
• ELEMENTY MULTIPLAYER
• PROFILE GRACZY
• KOLEKCJE KART
Matchmaking
Matchmaking – iteracja #1
Matchmaking - iteracja #2
Matchmaking - iteracja #3
Matchmaking - microservices
Spoils of war
Spoils of war
Synchroniczna komunikacja HTTP
Synchroniczna komunikacja HTTP
Asynchroniczna komunikacja
Zakończenie rozgrywki
Zakończenie rozgrywki - powiadomienia
Na które powiadomienia czekać?
Łańcuch powiadomień
Łańcuch powiadomień
Trwałe powiadomienia
A JEŚLI NIE DOSTARCZYMY POWIADOMIENIA OD
RAZU?
• Http API dla niedostarczonych powiadomień
• Stanowią mechanizm zastępczy dla usługi
socket’owej
• Kopia powiadomień w trwałym miejscu
Technologie
System kolejkowy
KLUCZOWE
ASPEKTY
• Potwierdzanie produkcji / konsumpcji wiadomości
• Wystarczająca wydajność
• Trwałość wiadomości
• Skalowalność
Rozszerzenie AMQP
/php-amqplib/php-amqplib /pdezwart/php-amqp
• Biblioteka implementująca
protokół AMQP
• Interfejs PHP dla
rozszerzenia librabbitmq
Napotkane problemy:
• Brak pełnego potwierdzania
wiadomości
• Słaba kontrola w przypadku
problemów z RabbitMq
Napotkane problemy:
• Brak pełnego potwierdzania
wiadomości
• Słaba kontrola w przypadku
problemów z RabbitMq
Potwierdzanie / wydajność
TEST NA KLASTRZE 3 NODE’ÓW
BEZ POTWIERDZANIA
KLIENT W LOKALNEJ SIECI
11000 / s
Z POTWIERDZANIEM
750 / s
// w trakcie badania
możliwych optymalizacji
Duplikacja wiadomości
Duplikacja wiadomości
Ponawianie wiadomości
Kolejki w mikroserwisach
Kolejki w mikroserwisach
Federation
OFICJALNE ROZSZERZENIE
RABBITMQ
• Umożliwia przenoszenie wiadomości pomiędzy usługami (klastry, vhosty)
• Wymaga tej samej nazwy exchange zdalnego i lokalnego
• Mapowanie exchange’y poprzez wyrażenie regularne
• Konfiguracja poprzez panel RabbitMq lub API
• Automatyczne odbudowywanie powiązań w przypadku awarii
Jak testujemy?
Testy – dev
Testy – integracyjne
KILKA ŚRODOWISK TESTOWYCH
TESTY API POPRZEZ KLIENTA
HTTP
KLIENT POWIADOMIEŃ
Odizolowane, umożliwiające weryfikację
poprawnej integracji systemów
Niezależny klient odpytujący non-stop
wszystkie usługi i według scenariuszy
Niezależny klient powiązany z klientem
HTTP weryfikujący poprawność
otrzymywanych powiadomień
Czy to wystarczy?
>NIE<
Testy – symulacyjne
• Analogiczny klient, ale pozbawiony UI
• Nie można uruchomić ich zbyt wiele z racji na wymagane zasoby
• Klient gry wyposażony w UI realizuje określone scenariusze
raportując błędne odpowiedzi webservices
• Można uruchomić ich dużo (bardzo) generując więcej
losowych, trudnych do przewidzenia sytuacji
BOTY – BEZ UI
BOTY – Z UI
Monitoring operacji asynchronicznych
CO MOŻEMY
SPRAWDZAĆ
• Wyniki działania botów na produkcji
• Wypełnienie kolejek wiadomości
• Czas ostatniej przetworzonej wiadomości (per consumer)
• Metryki serwerowe (load, pamięć, zużycie dysk, IOPS)
• Metryki biznesowe np. Ilość przyznanych nagród w ciągu ostatniej doby
Pytania?
Dołącz do nas!

More Related Content

Similar to Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze online

4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...PROIDEA
 
Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.
Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.
Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.Piotr Grabski-Gradziński
 
Architektura serwera gier online
Architektura serwera gier onlineArchitektura serwera gier online
Architektura serwera gier onlineMaciej Mróz
 
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPROIDEA
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1Piotr Pawlak
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
PLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert Rosiak
PLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert RosiakPLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert Rosiak
PLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert RosiakPROIDEA
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
PLNOG 3: Łukasz Bromirski - Budowa sieci multicast
PLNOG 3: Łukasz Bromirski - Budowa sieci multicastPLNOG 3: Łukasz Bromirski - Budowa sieci multicast
PLNOG 3: Łukasz Bromirski - Budowa sieci multicastPROIDEA
 
Przetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowychPrzetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowychleafnode
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Bartlomiej Zass
 
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXKamil Grabowski
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftBiznes 2.0
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureWebhosting.pl
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w InternecieDivante
 
Halokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys SoftswitchHalokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys Softswitchmichalpodoski
 
Noc informatyka
Noc informatykaNoc informatyka
Noc informatykaOnetIT
 
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?Konrad Sagala
 
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VODPLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VODPROIDEA
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 

Similar to Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze online (20)

4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...
 
Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.
Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.
Jak łączyć mobile i desktop? Node.js w aplikacjach czasu rzeczywistego.
 
Architektura serwera gier online
Architektura serwera gier onlineArchitektura serwera gier online
Architektura serwera gier online
 
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFXPLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
PLNOG 17 - Sławomir Janukowicz - NFV – using Juniper vMX, vSRX and NFX
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
PLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert Rosiak
PLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert RosiakPLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert Rosiak
PLNOG16: Pion Systemów Sieciowych i Bezpieczeństwa, Robert Rosiak
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
PLNOG 3: Łukasz Bromirski - Budowa sieci multicast
PLNOG 3: Łukasz Bromirski - Budowa sieci multicastPLNOG 3: Łukasz Bromirski - Budowa sieci multicast
PLNOG 3: Łukasz Bromirski - Budowa sieci multicast
 
Przetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowychPrzetwarzanie asynchroniczne w zastosowaniach webowych
Przetwarzanie asynchroniczne w zastosowaniach webowych
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?
 
Jak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIXJak wyglada monitoring w PLIX
Jak wyglada monitoring w PLIX
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows Azure
 
TV i video w Internecie
TV i video w InternecieTV i video w Internecie
TV i video w Internecie
 
Halokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys SoftswitchHalokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys Softswitch
 
Noc informatyka
Noc informatykaNoc informatyka
Noc informatyka
 
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
 
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VODPLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
PLNOG 6: Marcin Kaptur, Tomasz Charewicz - Onet VOD
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 

More from GOG.com dev team

In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019GOG.com dev team
 
Always up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPIAlways up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPIGOG.com dev team
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the frameworkGOG.com dev team
 
Versioning challenges in micro services of Gwent
Versioning challenges in micro services of GwentVersioning challenges in micro services of Gwent
Versioning challenges in micro services of GwentGOG.com dev team
 
Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)GOG.com dev team
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITGOG.com dev team
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...GOG.com dev team
 
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)GOG.com dev team
 
Design Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User ExperienceDesign Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User ExperienceGOG.com dev team
 
Lean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User ExperienceLean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User ExperienceGOG.com dev team
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?GOG.com dev team
 
Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )GOG.com dev team
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )GOG.com dev team
 
The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )GOG.com dev team
 

More from GOG.com dev team (15)

In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019In-depth caching in Varnish - GOG Varnish Meetup, march 2019
In-depth caching in Varnish - GOG Varnish Meetup, march 2019
 
Always up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPIAlways up to date, testable and maintainable documentation with OpenAPI
Always up to date, testable and maintainable documentation with OpenAPI
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the framework
 
Versioning challenges in micro services of Gwent
Versioning challenges in micro services of GwentVersioning challenges in micro services of Gwent
Versioning challenges in micro services of Gwent
 
Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)Event sourcing w PHP (by Piotr Kacała)
Event sourcing w PHP (by Piotr Kacała)
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com IT
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
 
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
 
Design Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User ExperienceDesign Thinking Workshop: Empathy in the User Experience
Design Thinking Workshop: Empathy in the User Experience
 
Lean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User ExperienceLean UX - How to start with Lean Startup in User Experience
Lean UX - How to start with Lean Startup in User Experience
 
Varnish cache
Varnish cacheVarnish cache
Varnish cache
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?
 
Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )Intro do Domain Driven Design. ( PL )
Intro do Domain Driven Design. ( PL )
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )
 
The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )
 

Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze online

Editor's Notes

  1. Jako GOG.com jesteśmy firmą działającą w przemyśle growym
  2. Ogólny model komunikacji asynchronicznej
  3. Ogólny model komunikacji asynchronicznej
  4. Ogólny model komunikacji asynchronicznej
  5. Ogólny model komunikacji asynchronicznej
  6. Ogólny model komunikacji asynchronicznej
  7. Ogólny model komunikacji asynchronicznej
  8. Ogólny model komunikacji asynchronicznej
  9. Przykład złego zastosowania. Server gry chce zgłosić koniec rozgrywki do pewnej usługi. Przetwarzamy żądanie, a potem chcemy spowodować: 1) aktualizację profilu użytkownika pod kątem zmiany doświadczenia, levelu itd. 2) Zdecydować o ewentualnych przynależnych nagrodach i dostarczyć je Jakie mogą być problemy? Jeśli dowolna z usług 2 i 3 nie działa to nie możemy poprawnie zakończyć gry Możliwe, że niesprawność usługi 2 powoduje złe decyzje ze strony usługi 3 Request jest długi, bo zawiera dużo logiki, co zajmuje procesy PHP i tym samym blokuje kolejne zapytania + może powodować timeouty Rezultaty zapytań są potrzebne do pokazania kolejnego ekranu gry.
  10. Przykład złego zastosowania. Server gry chce zgłosić koniec rozgrywki do pewnej usługi. Przetwarzamy żądanie, a potem chcemy spowodować: 1) aktualizację profilu użytkownika pod kątem zmiany doświadczenia, levelu itd. 2) Zdecydować o ewentualnych przynależnych nagrodach i dostarczyć je Jakie mogą być problemy? Jeśli dowolna z usług 2 i 3 nie działa to nie możemy poprawnie zakończyć gry Możliwe, że niesprawność usługi 2 powoduje złe decyzje ze strony usługi 3 Request jest długi, bo zawiera dużo logiki, co zajmuje procesy PHP i tym samym blokuje kolejne zapytania + może powodować timeouty Rezultaty zapytań są potrzebne do pokazania kolejnego ekranu gry.
  11. Ogólny model komunikacji asynchronicznej
  12. Ogólny model komunikacji asynchronicznej
  13. Ogólny model komunikacji asynchronicznej
  14. Ogólny model komunikacji asynchronicznej
  15. Promisy itd..
  16. Promisy itd..
  17. Ogólny model komunikacji asynchronicznej
  18. Głównie Symfony + PHP7 (nie HHVM), Korzystaliśmy z HHVM i było szybko ale: warmup aplikacji był dużym problemem – był w trakcie deploy, ale nie rozgrzewał wszystkiego, dużo timeout’ów (powyżej 5sek) Problem ze wsparciem dla dodatkowych kompilowanych bibliotek
  19. Głównie Symfony + PHP7 (nie HHVM), Korzystaliśmy z HHVM i było szybko ale: warmup aplikacji był dużym problemem – był w trakcie deploy, ale nie rozgrzewał wszystkiego, dużo timeout’ów (powyżej 5sek) Problem ze wsparciem dla dodatkowych kompilowanych bibliotek
  20. Trwałość – zapis na dysku, na zreplikowane na node’ach klastra Potwierdzanie Skalowalność – wiele node’ów w klastrze Wystarczająca wydajność – wyniki testów async? (Kafka być może szybsza, ale mniej niezawodna)
  21. With use_socket set to false producing messages (to rabbit that does not respond) will cause destructor to hang infinitely. With use_socket set to true consumers will not be blocking (they will crash after 1s of being idle) producers will work and use timeout, but they will simply ignore all errors (there's no way to tell that the message wasn't delivered) This bundle doesn't use confirm channels nor transactions, so basically rabbit does not guarantee that the message was delivered anyway. php-amqplib is poorly written and poorly maintained. It's incoherent, there's no way to tell which behavior was intended, and it often introduces regressions. I think original authors did not understand how sockets work. We could probably fix those two problems (timeouts and lack of confirmation), but I still think it's unwise to use php-amqplib, plus I wouldn't bother with pull request since it's better to not trust their commits. PHP extension ( http://php.net/manual/pl/book.amqp.php ) has outdated documentation and isn't available for hhvm. TBH I think we should look into "Pattern: reliable queue" here: http://redis.io/commands/rpoplpush, or write our own amqp lib and fork rabbitmq bundle.
  22. Możiiwy także crash w trakcie przetwarzania Co w sytuacji gdy nie działa Redis? (jest tylko dodatkową warstwą zabezpieczenia przed błędem RabbitMq, więc jak nie działa to ok)
  23. Motywacja dla takiego a nie innego flow Limit ponowień Dynamiczny delay -> 5, 100, 600, 3600 sek. Deadletter bez consumera Deadletter dla malformed messages Delay – natywny mechanizm RabbitMq poprzez TTL
  24. Odseparowanie usług Zachowana logika zarządzania – klient pyta o login, hasło i nazwę exchange i potem sam sobie ogarnia Czemu nie Shovel? Bo jego funkcje zawierają się Federation, Shovel nie ma API
  25. Dlaczego nie, dlaczego nadal coś może pójść nie tak
  26. Ogólny model komunikacji asynchronicznej
  27. Ogólny model komunikacji asynchronicznej
  28. Dlaczego nie, dlaczego nadal coś może pójść nie tak
  29. Ogólny model komunikacji asynchronicznej