architecture

Monolit vs Mikroserwisy: Kiedy (nie) warto dzielić?

Michał Ż.Michał Ż.
|
Mar 15, 2024
|
8 min read
Monolit vs Mikroserwisy: Kiedy (nie) warto dzielić?
img_src: unsplash_repo

$ cat executive_summary.txt

"Mikroserwisy nie są domyślnym rozwiązaniem. Są rozwiązaniem problemu, którego (prawdopodobnie) jeszcze nie masz. W tym artykule rozbieramy na czynniki pierwsze koszty infrastruktury vs korzyści ze skalowania."

W świecie IT panuje moda na dzielenie wszystkiego. Jeśli Twoja aplikacja nie składa się z 50 kontenerów Dockera zarządzanych przez Kubernetesa, to czy w ogóle "robisz IT"? Cóż, rzeczywistość biznesowa (i budżetowa) jest nieco bardziej skomplikowana.

Jako software house specjalizujący się w systemach FinTech, często spotykamy klientów, którzy chcą mikroserwisów "bo Netflix tak robi". Zapominają jednak, że Netflix ma nieco inny budżet na DevOpsów niż startup w fazie Seed.

01. Problem Skali (The Monolith Trap)

Monolit nie jest zły. Monolit jest prosty. Wrzucasz kod na jeden serwer, podpinasz jedną bazę danych i idziesz spać. Problemy zaczynają się, gdy:

  • Zespół rośnie powyżej 20 developerów i wchodzą sobie w drogę (Merge Conflicts).
  • Jeden wadliwy moduł (np. generowanie PDF) wywala całą aplikację.
  • Technologia starzeje się, a przepisanie całości trwa lata.

02. Kiedy Mikroserwisy?

Decyzja o podziale powinna być podyktowana Domain Driven Design (DDD), a nie hypem.

Architektura Systemu

Monolit
DB (Shared)
Mikroserwisy
DB
DB
DB

Zobaczmy przykład w kodzie - jak wygląda komunikacja w monolicie vs mikroserwisach.

OrderService.ts
// MONOLITH APPROACH
import { Inventory } from './Inventory';

async function createOrder(order) {
  await Inventory.reserveStock(order.items);
  await Database.save(order);
}

// ---------------------------------------------------

// MICROSERVICES APPROACH
import { Broker } from './MessageBroker';

async function createOrder(order) {
  await Broker.publish('order_created', {
    orderId: order.id,
    items: order.items,
  });

  await Database.save({ ...order, status: 'PENDING' });
}
  
[ COPY ]

03. Koszty Ukryte (The Tax)

Wchodząc w mikroserwisy, zamieniasz złożoność kodu na złożoność infrastruktury. Zamiast jednego wdrożenia, masz ich dziesięć. Potrzebujesz Service Discovery, Distributed Tracing i Circuit Breakers.

04. Werdykt Architekta

Dla 90% projektów startujących od zera: Modularny Monolit to złoty środek. Budujesz w jednym repozytorium, ale z zachowaniem ścisłych granic modułów.

Masz system legacy?

Nie wiesz czy przepisywać, czy refaktoryzować? Nie zgaduj. Umów się na darmową konsultację.

[ REZERWUJ AUDYT 1:1 ]
Michał Ż.

O Autorze

Michał Ż. - CTO @ Nullstack

Architekt systemowy z 10-letnim doświadczeniem w FinTech i Cloud Native. Specjalizuje się w transformacji monolitów na mikroserwisy.

NEWSLETTER_V1.0

Nie przegap technologicznej rewolucji

Dołącz do subskrybentów Nullstack Insider. Co tydzień wysyłamy analizy trendów, snippety kodu i case studies. Zero spamu.