← Wszystkie antywzorce
Antywzorzec architektoniczny

Rozproszony monolit — jak zdobyć wszystkie wady mikroserwisów i żadnej zalety

Opracowanie: ArchitectMentor

Modelowy scenariusz złożony z typowych błędów przy podziale monolitu: wspólna baza, synchroniczne łańcuchy i wdrożenia wymagające koordynacji.

Scenariusz dydaktyczny złożony z typowych błędów. Nie opisuje jednej konkretnej organizacji ani potwierdzonego incydentu.

Punkt wyjścia

Dojrzały monolit obsługiwał e-commerce średniej wielkości. Działał, ale zespół czuł, że „urósł” — wdrożenia były stresujące, a modne konferencje mówiły jedno: mikroserwisy. Padła decyzja: rozbijamy na kilkanaście serwisów, bo „mikroserwisy się skalują i pozwalają zespołom pracować niezależnie”.

Co zrobili

  • Podzielili system wg warstw i encji technicznych: osobny serwis do użytkowników, osobny do zamówień, do koszyka, do cen, do powiadomień… kilkanaście sztuk.
  • Serwisy wołały się synchronicznie, w łańcuchu: jedno żądanie użytkownika przechodziło przez A → B → C → D, każdy czekał na następny.
  • Wszystkie serwisy współdzieliły jedną bazę danych — „przecież dane i tak są wspólne”.
  • Zmiana w jednym serwisie zwykle wymuszała skoordynowaną zmianę w kilku innych, więc i tak deployowali wszystko razem.

Dlaczego taki układ może się posypać

  • Latencja się sumowała. Żądanie, które w monolicie było jednym wywołaniem w pamięci, teraz przechodziło przez cztery skoki sieciowe. Wolniej i mniej przewidywalnie.
  • Zero izolacji awarii. Gdy jeden serwis w łańcuchu zwalniał albo padał, kładł całe żądanie. Zamiast „jedna funkcja niedostępna” mieli „sklep nie działa”. Do tego kaskadowe awarie: przeciążony serwis pociągał za sobą tych, którzy na niego czekali.
  • Współdzielona baza = ukryte sprzężenie. Każda zmiana schematu mogła niepostrzeżenie zepsuć inny serwis. Niezależność była pozorna.
  • Brak niezależnego wdrażania. Skoro zmiany i tak trzeba było koordynować, stracili największą obiecywaną zaletę mikroserwisów — a zostały im wszystkie koszty: sieć, obserwowalność, złożoność operacyjna, debugging rozłażący się przez kilkanaście usług.

Krótko: dostali wady monolitu (sprzężenie) plus wady rozproszenia (sieć i złożoność). Najgorszy z obu światów.

Jak to było widać z wyprzedzeniem

Podczas przeglądu warto zadać pytania:

  • Czy te serwisy mogą się zmieniać i wdrażać niezależnie? (Jeśli nie — to nie są osobne serwisy, tylko jeden system pocięty na kawałki.)
  • Co się stanie, gdy jeden z nich padnie? (Jeśli odpowiedź brzmi „padnie całość” — nie ma izolacji, czyli nie ma korzyści.)
  • Dlaczego dzielą jedną bazę? (Współdzielona baza to najczęstszy objaw fałszywych granic.)
  • Wg czego wytyczono granice — wg domeny i własności danych, czy wg warstw technicznych?

Granice wyznaczono technicznie (użytkownicy, zamówienia, ceny jako osobne pudełka), a nie wg domeny i własności danych. To jest źródło całego nieszczęścia.

Lekcja (przenośna reguła)

Mikroserwisy to strategia organizacyjna, nie techniczna moda. Ich sens to niezależne zespoły, niezależne wdrożenia i izolacja awarii. Jeśli serwisy muszą się zmieniać razem i dzielą dane, to jest jeden system pocięty na kawałki — gorszy niż monolit, bo do sprzężenia dokłada sieć.

Co z tego wynika w praktyce:

  • Zacznij od modularnego monolitu. Wydzielaj serwis dopiero, gdy masz realny powód: niezależne skalowanie albo osobny zespół z własnym cyklem wdrożeń.
  • Granice wg domeny i własności danych, nie wg warstw. Jeden serwis = jedna baza; nikt inny do niej nie sięga.
  • Komunikacja asynchroniczna tam, gdzie chcesz izolacji awarii — żeby padnięcie jednego nie kładło całego łańcucha.

Rozbicie na serwisy to nie cel. Celem jest niezależność. Jeśli jej nie zyskujesz — nie rozbijaj.

Porozmawiajmy o tym artykule

Podziel się uwagą lub zanonimizowanym przykładem. Komentarze sprawdza AI przed publikacją. Niejednoznaczne przypadki trafiają do moderatora.

Oceniaj pomysły, nie osoby. Nie podawaj informacji poufnych ani danych innych osób. Przed wysłaniem przeczytaj informację o danych.