[pl] komunikacja asynchroniczna

45
Asynchroniczna architektura w praktyce (na przykładzie BlaBlaCar) Mirosław Karczmarczyk

Upload: miroslaw-karczmarczyk

Post on 17-Feb-2017

130 views

Category:

Technology


0 download

TRANSCRIPT

Asynchroniczna architektura w praktyce

(na przykładzie BlaBlaCar)

Mirosław Karczmarczyk

Tytułem wstępu

Tytułem wstępu

Connecting people

BlaBlaCar w liczbach

30mln użytkowników

20 Instancji Frontu

87 Programistów i architektow

11 Nodów bazy danych

200 Serwerów

Mobilnych użytkowników18mln

Co się dzieje po rezerwacji miejsca?

Czas

Wysyłamy maila do rezerwującego

Wysyłamy SMS’a do kierowcy

Indeksujemy

Zapisujemy w bazie

Zbieramy statystyki

Odpowiedź

Efekt ?

A gdyby tak…

Czas

Wysyłamy SMS’a do kierowcy

Wysyłamy maila

Indeksujemy

Zapisujemy w bazie

Zbieramy statystyki

Klik…

Asynchroniczność…Mikroserwisy!!!

• łatwość wdrożenia zmian• niezależność• osobne repozytoria

• skalowalność

Cechy mikroserwisu

Skalowalność aplikacji

Komunikacja pomiędzy mikroserwisami

Synchroniczna Asynchroniczna

Kolejkowanie wiadomości

Publisher - Subscriber

REST API

MAILERSerwis A MAILERSerwis B

WorkeryFRONTFront

Load balancer

Monitoring / LogiBaza Danych IndekserCache

API

Load balancer

Serwer kolejkowania wiadomości

Konsumer

Konsumer

KolejkaPublisher Konsumer

Fanout Exchange

konsumer A

konsumer A

konsumer B

konsumer C

ExchangePublisher

Kolejka 1

Kolejka 2

Kolejka 3

Fanout Exchange

Routing keys

Publisher

konsumer A

konsumer A

konsumer B

konsumer C

Exchange

Kolejka 1

Kolejka 2

Kolejka 3

route_1

route_2

route_3

route_1

route_2

Routing keys

Konsumer / worker

Konsumer / worker c.d.

Konsumer / worker c.d.

Pimple - Dependency Injection

Pimple - Dependency Injection c.d.

Pimple - Dependency Injection c.d.

Symfony 2 - RabbitMQBundle

Symfony 2 - RabbitMQBundle c.d.

Symfony 2 - RabbitMQBundle c.d.

Symfony 2 - RabbitMQBundle c.d.

$ ./app/console rabbitmq:consumer -m 50 -w testConsumer

A co jeśli…

…masz 100 (1000 instancji) workerów?

… przetwarzasz 2500 do 7500 wiadomości na sekundę w Rabbicie?

Długo działające procesy!!!

Swarrot - consume them all!!

Swarrot - consume them all!!

Swarrot - consume them all!!

Potrzebujemy czegoś więcej…

Swarrot - consume them all!!

Swarrot - consume them all!!

Enkapsulacja

Swarrot - consume them all!!

Swarrot - consume them all!!

Stack technologiczny BlaBlaCar

BlaBlaCar.com/dreamjobs@BlaBlaCarTech

Backend Engineers

Frontend Engineers

iOS Engineers

Android Engineers

WARSZAWA PARYŻ

Źródła:• http://queues.io/• https://www.rabbitmq.com

Przydatne pakiety:• swarrot/swarrot• pimple/pimple• silex/silex• php-amqplib/RabbitMqBundle

Podziękowania dla Olivier’a Dolbeau :)