Un vantaggio chiave dei microservizi è scalare ogni servizio indipendentemente per adattarsi al proprio carico, invece di scalare l'intera app. Trovare i colli di bottiglia è quindi una questione di misurazione per-servizio e per-hop.
Un vantaggio chiave dei microservizi è scalare ogni servizio indipendentemente per adattarsi al proprio carico, invece di scalare l'intera app. Trovare i colli di bottiglia è quindi una questione di misurazione per-servizio e per-hop.
# 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
Scalare un servizio il cui collo di bottiglia è un database condiviso sposta semplicemente più carico sul DB — scala il vincolo reale, non il sintomo.
Lo scaling indipendente ti consente di spendere capacità precisamente dove si trova il carico, il che è molto più economico che scalare un monolite nel suo insieme.
Ma scalare alla cieca spreca denaro e può peggiorare le cose; misurare le metriche per-servizio e le tracce per-hop è ciò che ti dice il vero vincolo da risolvere.