w rolach programisty, Incident Managera (ITILv3), architekta i lidera, • twórca projektu nowej architektury Allegro (a.k.a. Projekt Rubikon), • @wendigo na Twitterze, Githubie, Keybase
nim monolityczna aplikacja Qeppo (PHP + Oracle), • która w 2012 roku osiąga krytyczną masę 12M LoC, • próby jej ratowania zakończyły się porażką, • rewolucja była nieunikniona… Krótkie wprowadzenie do Qeppo
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
niezależnego skalowania poszczególnych części platformy, • potrzeba większej odporności platformy na awarie, • potrzeba przejścia na nowocześniejsze technologie (JVM), • potrzeba zoptymalizowania kosztów utrzymania i rozwoju, • architektura na kolejne kilka(naście) lat rozwoju Allegro. Dlaczego SOA?
uruchomiona w dedykowanych i izolowanych zasobach, • z niezależnym, izolowanym źródłem danych, • ukrywająca swoją implementację za wystawionym API. Definicja mikrousługi w Allegro 12
CI/CD (testowanie, wersjonowanie i wdrażanie usługi), • dashboardy z logami aplikacyjnymi (Kibana) • dashboardy z metrykami technicznymi i biznesowymi (Graphite + Grafana), • “czujki” w systemach monitorujących, • polityki dyżurowania i eskalacji w PagerDuty, • profil usługi w katalogu usług, • wdrożenie na środowisko developerskie :) Nowa usługa generuje
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
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
usługa może opublikować zdarzenie, • każda usługa może skonsumować dowolne inne zdarzenie, • każde zdarzenie ma swój wersjonowany schemat, • wszystkie zdarzenia dostępne są do analityki offline. Orchiestracja usług
częsta zmiana wersji, • integracja wszystkich usług ze sobą, • wiele zintegrowanych ze sobą, zależnych systemów, • asynchroniczność wielu procesów (np. wpinanie do LB) Wyzwania na tym etapie
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
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
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
w pozyskanie nowych technologii, • automatyzacja większości procesów, • koszt zbudowania 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
• szybsze wdrażanie 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?