Architekt systemówInżynier DevOps

Jak zrealizować poziome i pionowe skalowanie aplikacji oraz jakie kryteria wpływają na wybór podejścia?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

Poziome skalowanie polega na dodawaniu nowych instancji aplikacji (np. nowych serwerów lub kontenerów), aby rozłożyć obciążenie pomiędzy nimi. Pionowe skalowanie to zwiększanie zasobów na jednym serwerze (dodawanie CPU, RAM, dysków).

Przy wyborze podejścia bierze się pod uwagę następujące kryteria:

  • Możliwości aplikacji (aplikacje stateless łatwo skalować poziomo);
  • Ograniczenia infrastruktury (czy możliwość szybkiego dodawania serwerów jest dostępna);
  • Ekonomiczne (poziome – droższe przy dużej liczbie węzłów, pionowe – napotyka limity sprzętowe).

Przykład poziomego skalowania przez Kubernetes:

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 5 # liczba podów – poziome skalowanie selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: myimage:v1

Kluczowe cechy:

  • Poziome skalowanie zapewnia odporność na awarie i elastyczność
  • Pionowe skalowanie jest łatwiejsze do zrealizowania, ale jest ograniczone przez limity sprzętowe
  • Często realizuje się hybrydę: krytyczne komponenty skalują poziomo, stateful – pionowo

Pytania z podstępem.

Poziome skalowanie jest zawsze lepsze niż pionowe?

Nie. Dla określonych zadań (np. dla monolitycznych lub stateful serwisów) pionowe skalowanie może być prostsze i bardziej efektywne.

Czy do poziomego skalowania aplikacja nie wymaga żadnych poprawek?

Nie. Aplikacja musi być stateless, wspierać dzielenie sesji (np. przy użyciu zewnętrznego cache'u) i poprawnie reagować na skalowanie.

Czy skalowanie bazy danych zawsze odbywa się poziomo?

Nie. Nie wszystkie bazy danych łatwo skalują się poziomo. Klasyczne relacyjne bazy danych często skalują się pionowo (scale-up), albo stosują sharding/replikację.