Architektura mikro usług metodą naukową
W każdym projekcie, tym bardzo daleko, ale też tych zupełnie blisko (w sumie nawet w tych w pokoju obok) ktoś próbuje rozproszyć istniejący system informatyczny… albo napisać nowy – już rozproszony. Przybiera to wiele różnych nazw, wiele postaci: mikroserwisy, współdzielona baza danych, rozproszona baza danych, asynchroniczne kolejki.
Ok. Decyzja jak decyzja, spróbujmy na początek jej nie oceniać, ale przeanalizujmy jej skutki. Co zyskamy? Co tracimy? Co może się nie udać? Czy powinniśmy się spodziewać nieoczekiwanych problemów? Czy możemy im zapobiec? I czy te problemy naprawdę są takie nieoczekiwane?
Nie są! Ale nie dostrzegamy ich dopóki nie zejdziemy z naszej wieży z kości słoniowej i spojrzymy na system nie z wysokości 30 tysięcy stóp, ale przyjrzymy się pojedynczym śrubkom i nitom, gdzieś blisko metalu. Okazuje się że jest wiele reguł i praw które regulują jak nasz system będzie się zachowywał. Przyglądnijmy się co to może być:
- Czy latencja jest problematyczna? Zacznijmy od prostych rzeczy
- Jeżeli to jest problem, to czy zawsze powinienem się odwoływać do najbliższego węzła? Jak to zrobić? Czy są jakieś reguły – może, skoro CDNy jakoś działają
- A skoro już rozproszyliśmy nasz system, to jaka liczba węzłów to „wystarczająco”? Z punktu widzenia dostępności? Z punktu widzenia spójności danych? Czy to w ogóle powinno mieć znaczenia?
Na każde z tak stawianych pytań bardzo łatwo jest znaleźć odpowiedź w google. 3, 7, 42 – jest wiele odpowiedzi, ale spróbujemy pójść poziom głębiej. Bo za każda wartością podaną na stackoveflow powinna stać metoda naukowa, eksperyment, czasem wręcz wzór matematyczny – i takich właśnie odpowiedzi będziemy poszukiwać podczas tej sesji.
powrótProgramista od kilkunastu lat, architekt od kilku, analityk czasami, konsultant jak trzeba, manager z wyboru, trener z zamiłowania, wannabe entrepreneur z marzeń, lider Java User Group w Gdańsku. Jest spora szansa, że nic z tego nie robię dobrze, ale próbuję… i wyciągam wnioski z porażek. Złośliwi mówią, że nie umie programować, ale miewa niezłe pomysły.