SlideShare a Scribd company logo
1 of 40
Download to read offline
4 lata rewolucji mikrousługowej

czyli jak w 2017 roku tworzymy usługi w Allegro
Mateusz “Serafin” Gajewski (@wendigo)
4developers, 03.04.2017
Krótko o mnie
• w Allegro od 111b lat…
• w rolach programisty, Incident
Managera, architekta i lidera,
• twórca projektu nowej architektury
Allegro (a.k.a. Projekt Rubikon),
• @wendigo na Twitterze, Githubie,
Keybase
• Krótko o historii architektury w Allegro.
• Dlaczego weszliśmy w mikroserwisy?
• Jak dzisiaj wygląda budowanie nowych usług.
• Wnioski - słowem: “czy było warto”? 🤔
O czym dzisiaj
• Allegro powstaje w 1999 roku…
• a wraz z nim monolit zwany Qeppo (PHP),
• który w 2012 roku osiąga masę 12M LoC,
• próby jego ratowania zakończyły się porażką,
• rewolucja architektoniczna była nieunikniona…
Krótkie wprowadzenie do Qeppo
Architektura Allegro ~ 2012
• statyczna architektura - brak większych zmian,
• kilka repozytoriów i zależności do zainstalowania,
• prosty* sposób postawienia całego środowiska,
• prosta* integracja zmian do wdrożenia,
• prosty* do utrzymania na produkcji,
• proste* śledzenie interakcji w kodzie.
Praca programisty w monolicie
* w stosunku do architektury mikrousługowej
źródło: aukcjostat.pl
Jeff Dean: Right design at X may be very wrong at 10X or 100X
• potrzeba szybszego developmentu dla 50+ zespołów,
• potrzeba niezależnego skalowania poszczególnych części platformy,
• potrzeba większej odporności platformy na awarie,
• potrzeba przejścia na nowe technologie (JVM),
• potrzeba zoptymalizowania kosztów utrzymania,
• architektura na kolejne kilka(naście) lat rozwoju Allegro.
Dlaczego SOA?
Dzień z życia nowej mikrousługi
z perspektywy “nowego” developera Allegro…
• repozytorium git z kodem z zainicjalizowanego szablonu,
• plany CI/CD (testowanie, artefakty, wdrożenie),
• dashboardy z logami (Kibana)
• dashboardy z metrykami (Graphite + Grafana),
• “czujki” w systemach monitorujących,
• polityki eskalacji w PagerDuty,
• profil usługi w katalogu usług,
• wdrożenie na środowisko developerskie :)
Nowa usługa generuje
• 400+ mikrousług w katalogu usług i konsoli AppEngine,
• 7 tys. repozytoriów z kodem,
• 11 tys. planów CI/CD,
• 100 Gb kodu źródłowego,
• 2 mln artefaktów o łącznej wielkości 5 TB (po kompresji).
Wyzwania na tym etapie
Łatwiejsza część…

czyli kodowanie ;)
• jak inne usługi mnie mogą skonsumować?
• jak ja mogę skonsumować inne usługi?
• jak mogę wystawić swoje API na zewnątrz?
• jak mogę siebie zabezpieczyć przed innymi usługami?
• jak mnie później debuggować?
• jak być spójnym z całą resztą architektury?
Interakcja nowej usługi z innymi usługami
• Hermes (rozproszony pub/sub) w sercu platformy Allegro,
• każda usługa może opublikować zdarzenia,
• każda usługa może skonsumować dowolne inne zdarzenie,
• każde zdarzenie ma swój schemat,
• wszystkie zdarzenia dostępne są do analityki offline.
Orchiestracja usług
Wdróżmy coś produkcyjnie

co może pójść nie tak?
• prod: 3500 CPU, 6.5 TB pamięci, 1500 kontenerów,
• test: 512 CPU, 1 TB pamięci RAM, 500 kontenerów,
• dev: 1200 CPU, 2 TB pamięci RAM, 2200 kontenerów,
• wdrożenia produkcyjne w marcu:
• 1421 (prod),
• 3277 (test),
• 3218 (dev)
• 43 wdrożenia na godzinę (co 1min 20s)
Mesos/Marathon w liczbach
• ogromna zmienność środowiska:
• częsta zmiana lokalizacji usług,
• częsta zmiana wersji,
• integracja wszystkich usług ze sobą,
• wiele zintegrowanych ze sobą systemów,
• asynchroniczność wielu procesów (np. wpinanie do LB)
Wyzwania na tym etapie
A gdy pójdzie coś nie tak…

w końcu testujemy na produkcji ;)
• health checki (Marathon, Consul),
• statystyki kontenerów,
• metryki aplikacji (Graphite) + czujki na nich (Alamo),
• trace’y (Zipkin)*,
• logi aplikacji + czujki na nich (Sentry),
• monitoring frontendu (Appdex),
• automatyzacja obsługi incydentów (Pagerduty).
Monitoring mikrousług
* niestety jeszcze nie produkcyjne ze względu na ilość danych
• ~ 9.7 mln metryk na minutę,
• ~ 60 GB logów na minutę,
• aktualność parametrów czujek,
• usługi bez właścicielstwa,
• przekazywanie właścicielstwa usług (kto jest odpowiedzialny?),
• domeny awarii i efekt domina,
• testowanie HA (Chaos Monkey, Chaos Gorilla),
• integracja wielu źródeł danych o stanie usługi.
Wyzwania na tym etapie
Co dalej?

świat na produkcji się nie kończy
• bezpieczeństwo danych i przetwarzania (!!!),
• zarządzanie danymi (właścicielstwo, jakość, dostępność) oraz
analityka BigData,
• (de)duplikacja usług,
• mierzenie kosztów poszczególnych usług.
Dalsze wyzwania w świecie mikrousług
Podsumowując
nie ma lekko :)
• “żyjąca” architektura - wszystko ciągle się zmienia :)
• rozbudowany katalog usług, repozytoriów, planów i projektów,
• niemożliwość postawienia systemu w całości na laptopie,
• trudność w integracji całego systemu,
• trudność w zachowaniu spójności systemu,
• trudność w zrozumieniu interakcji między usługami.
Praca programisty w świecie mikrousługowym
• zmiana struktury organizacji,
• ogromna inwestycja w pozyskanie nowych technologii,
• automatyzacja większości procesów,
• zbudowanie szeregu wyspecjalizowanych systemów,
• chwilowe “spowolnienie” rozwoju funkcjonalności biznesowych,
• pozyskanie nowych, trudnych do zdobycia na rynku kompetencji,
• zmiana “mindsetu” inżyniera.
Koszt poniesiony przez Allegro
Czy warto? Oczywiście
ale nie każdą firmę na to stać
• nowa mikrousługa na środowisku produkcyjnym w niecałe 30 minut,
• szybsze realizowanie pomysłów biznesu,
• mniejsze niestabilności i awarie - większa dostępność,
• większa odpowiedzialność zespołów za to co wytwarzają,
• dokładne mierzenie kosztów usług,
• szybsza ewolucja nowej architektury i możliwa wymiany jej komponentów,
• nowy “mindset” inżyniera - “da się” - architektura nie jest ograniczeniem.
Co udało się osiągnąć w 4 lata?
Dziękuję za uwagę! :)
@wendigo
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej

More Related Content

Similar to Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej

Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wojciech Barczyński
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościKamil Grabowski
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Prawdziwi znajomi - prawdziwe rozmowy
Prawdziwi znajomi - prawdziwe rozmowyPrawdziwi znajomi - prawdziwe rozmowy
Prawdziwi znajomi - prawdziwe rozmowyIRCenter
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Mateusz Paprocki, PMP
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostinguDivante
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITamarekmisztal
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 
PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco
PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco
PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco PROIDEA
 
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
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1Piotr Pawlak
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe MicroservicesKonrad Król
 
Odśwież swoje Datacenter z Windows Server 2012
Odśwież swoje Datacenter z Windows Server 2012Odśwież swoje Datacenter z Windows Server 2012
Odśwież swoje Datacenter z Windows Server 2012Mariusz Kedziora
 

Similar to Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej (20)

Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodności
 
university day 1
university day 1university day 1
university day 1
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Robert Olejnik - Bezpieczeństwo w chmurach, czyli jak i dlaczego stworzyliśmy...
Robert Olejnik - Bezpieczeństwo w chmurach, czyli jak i dlaczego stworzyliśmy...Robert Olejnik - Bezpieczeństwo w chmurach, czyli jak i dlaczego stworzyliśmy...
Robert Olejnik - Bezpieczeństwo w chmurach, czyli jak i dlaczego stworzyliśmy...
 
GG.pl prezentacja nowego serwisu
GG.pl prezentacja nowego serwisuGG.pl prezentacja nowego serwisu
GG.pl prezentacja nowego serwisu
 
Prawdziwi znajomi - prawdziwe rozmowy
Prawdziwi znajomi - prawdziwe rozmowyPrawdziwi znajomi - prawdziwe rozmowy
Prawdziwi znajomi - prawdziwe rozmowy
 
Jaki framework wybrać
Jaki framework wybraćJaki framework wybrać
Jaki framework wybrać
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostingu
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
 
PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco
PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco
PLNOG 21: Tomasz Matuła - Droga_do_cyfrowej_rewolucji_na_rynku_telco
 
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
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
 
Odśwież swoje Datacenter z Windows Server 2012
Odśwież swoje Datacenter z Windows Server 2012Odśwież swoje Datacenter z Windows Server 2012
Odśwież swoje Datacenter z Windows Server 2012
 

Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej

  • 1. 4 lata rewolucji mikrousługowej
 czyli jak w 2017 roku tworzymy usługi w Allegro Mateusz “Serafin” Gajewski (@wendigo) 4developers, 03.04.2017
  • 2. Krótko o mnie • w Allegro od 111b lat… • w rolach programisty, Incident Managera, architekta i lidera, • twórca projektu nowej architektury Allegro (a.k.a. Projekt Rubikon), • @wendigo na Twitterze, Githubie, Keybase
  • 3. • Krótko o historii architektury w Allegro. • Dlaczego weszliśmy w mikroserwisy? • Jak dzisiaj wygląda budowanie nowych usług. • Wnioski - słowem: “czy było warto”? 🤔 O czym dzisiaj
  • 4. • Allegro powstaje w 1999 roku… • a wraz z nim monolit zwany Qeppo (PHP), • który w 2012 roku osiąga masę 12M LoC, • próby jego ratowania zakończyły się porażką, • rewolucja architektoniczna była nieunikniona… Krótkie wprowadzenie do Qeppo
  • 6. • statyczna architektura - brak większych zmian, • kilka repozytoriów i zależności do zainstalowania, • prosty* sposób postawienia całego środowiska, • prosta* integracja zmian do wdrożenia, • prosty* do utrzymania na produkcji, • proste* śledzenie interakcji w kodzie. Praca programisty w monolicie * w stosunku do architektury mikrousługowej
  • 7.
  • 8. źródło: aukcjostat.pl Jeff Dean: Right design at X may be very wrong at 10X or 100X
  • 9. • potrzeba szybszego developmentu dla 50+ zespołów, • potrzeba niezależnego skalowania poszczególnych części platformy, • potrzeba większej odporności platformy na awarie, • potrzeba przejścia na nowe technologie (JVM), • potrzeba zoptymalizowania kosztów utrzymania, • architektura na kolejne kilka(naście) lat rozwoju Allegro. Dlaczego SOA?
  • 10.
  • 11.
  • 12. Dzień z życia nowej mikrousługi z perspektywy “nowego” developera Allegro…
  • 13.
  • 14.
  • 15. • repozytorium git z kodem z zainicjalizowanego szablonu, • plany CI/CD (testowanie, artefakty, wdrożenie), • dashboardy z logami (Kibana) • dashboardy z metrykami (Graphite + Grafana), • “czujki” w systemach monitorujących, • polityki eskalacji w PagerDuty, • profil usługi w katalogu usług, • wdrożenie na środowisko developerskie :) Nowa usługa generuje
  • 16.
  • 17.
  • 18. • 400+ mikrousług w katalogu usług i konsoli AppEngine, • 7 tys. repozytoriów z kodem, • 11 tys. planów CI/CD, • 100 Gb kodu źródłowego, • 2 mln artefaktów o łącznej wielkości 5 TB (po kompresji). Wyzwania na tym etapie
  • 20. • jak inne usługi mnie mogą skonsumować? • jak ja mogę skonsumować inne usługi? • jak mogę wystawić swoje API na zewnątrz? • jak mogę siebie zabezpieczyć przed innymi usługami? • jak mnie później debuggować? • jak być spójnym z całą resztą architektury? Interakcja nowej usługi z innymi usługami
  • 21.
  • 22. • Hermes (rozproszony pub/sub) w sercu platformy Allegro, • każda usługa może opublikować zdarzenia, • każda usługa może skonsumować dowolne inne zdarzenie, • każde zdarzenie ma swój schemat, • wszystkie zdarzenia dostępne są do analityki offline. Orchiestracja usług
  • 23. Wdróżmy coś produkcyjnie
 co może pójść nie tak?
  • 24.
  • 25.
  • 26. • prod: 3500 CPU, 6.5 TB pamięci, 1500 kontenerów, • test: 512 CPU, 1 TB pamięci RAM, 500 kontenerów, • dev: 1200 CPU, 2 TB pamięci RAM, 2200 kontenerów, • wdrożenia produkcyjne w marcu: • 1421 (prod), • 3277 (test), • 3218 (dev) • 43 wdrożenia na godzinę (co 1min 20s) Mesos/Marathon w liczbach
  • 27. • ogromna zmienność środowiska: • częsta zmiana lokalizacji usług, • częsta zmiana wersji, • integracja wszystkich usług ze sobą, • wiele zintegrowanych ze sobą systemów, • asynchroniczność wielu procesów (np. wpinanie do LB) Wyzwania na tym etapie
  • 28. A gdy pójdzie coś nie tak…
 w końcu testujemy na produkcji ;)
  • 29.
  • 30. • health checki (Marathon, Consul), • statystyki kontenerów, • metryki aplikacji (Graphite) + czujki na nich (Alamo), • trace’y (Zipkin)*, • logi aplikacji + czujki na nich (Sentry), • monitoring frontendu (Appdex), • automatyzacja obsługi incydentów (Pagerduty). Monitoring mikrousług * niestety jeszcze nie produkcyjne ze względu na ilość danych
  • 31. • ~ 9.7 mln metryk na minutę, • ~ 60 GB logów na minutę, • aktualność parametrów czujek, • usługi bez właścicielstwa, • przekazywanie właścicielstwa usług (kto jest odpowiedzialny?), • domeny awarii i efekt domina, • testowanie HA (Chaos Monkey, Chaos Gorilla), • integracja wielu źródeł danych o stanie usługi. Wyzwania na tym etapie
  • 32. Co dalej?
 świat na produkcji się nie kończy
  • 33. • bezpieczeństwo danych i przetwarzania (!!!), • zarządzanie danymi (właścicielstwo, jakość, dostępność) oraz analityka BigData, • (de)duplikacja usług, • mierzenie kosztów poszczególnych usług. Dalsze wyzwania w świecie mikrousług
  • 35. • “żyjąca” architektura - wszystko ciągle się zmienia :) • rozbudowany katalog usług, repozytoriów, planów i projektów, • niemożliwość postawienia systemu w całości na laptopie, • trudność w integracji całego systemu, • trudność w zachowaniu spójności systemu, • trudność w zrozumieniu interakcji między usługami. Praca programisty w świecie mikrousługowym
  • 36. • zmiana struktury organizacji, • ogromna inwestycja w pozyskanie nowych technologii, • automatyzacja większości procesów, • zbudowanie szeregu wyspecjalizowanych systemów, • chwilowe “spowolnienie” rozwoju funkcjonalności biznesowych, • pozyskanie nowych, trudnych do zdobycia na rynku kompetencji, • zmiana “mindsetu” inżyniera. Koszt poniesiony przez Allegro
  • 37. Czy warto? Oczywiście ale nie każdą firmę na to stać
  • 38. • nowa mikrousługa na środowisku produkcyjnym w niecałe 30 minut, • szybsze realizowanie pomysłów biznesu, • mniejsze niestabilności i awarie - większa dostępność, • większa odpowiedzialność zespołów za to co wytwarzają, • dokładne mierzenie kosztów usług, • szybsza ewolucja nowej architektury i możliwa wymiany jej komponentów, • nowy “mindset” inżyniera - “da się” - architektura nie jest ograniczeniem. Co udało się osiągnąć w 4 lata?
  • 39. Dziękuję za uwagę! :) @wendigo