Ключевое преимущество микросервисов — возможность масштабировать каждый сервис независимо в соответствии с его нагрузкой, а не масштабировать все приложение целиком. Поиск узких мест — это вопрос измерения на уровне сервисов и отдельных переходов.
Ключевое преимущество микросервисов — возможность масштабировать каждый сервис независимо в соответствии с его нагрузкой, а не масштабировать все приложение целиком. Поиск узких мест — это вопрос измерения на уровне сервисов и отдельных переходов.
# Kubernetes HPA: scale orders on CPU
minReplicas: 3
maxReplicas: 20
metric: cpu
targetUtilization: 70 # add pods when avg CPU > 70%
1. Metrics: which service has high latency / saturation? (RED/USE)
2. Traces: which SPAN in the request is slow?
3. Drill in: DB query? lock? N+1 calls? GC pause?
Gateway ──┤ Orders ──┤ Payments ████████████ ← 80% of latency here
Inventory ─┤
⚠️ Chatty synchronous calls (fan-out per request)
⚠️ Shared/overloaded database
⚠️ Missing or cold cache
⚠️ Unbounded retries amplifying load
Масштабирование сервиса, чьим узким местом является общая база данных, просто перемещает больше нагрузки на БД — масштабируйте реальное ограничение, а не симптом.
Независимое масштабирование позволяет вам размещать мощность ровно там, где находится нагрузка, что намного дешевле, чем масштабировать монолит целиком.
Но слепое масштабирование впустую тратит деньги и может усугубить ситуацию; измерение метрик на уровне сервисов и трассировка каждого перехода подскажут вам, какое реальное ограничение нужно устранить.