Microservices کا ایک کلیدی فائدہ یہ ہے کہ ہر سروس کو آزادانہ طور پر Scale کیا جا سکتا ہے اپنے سوچے ہوئے Load سے ملانے کے لیے، بجائے پوری ایپلیکیشن کو Scale کرنے کے۔ Bottlenecks تلاش کرنا پھر ہر سروس اور ہر hop کی پیمائش کا معاملہ ہے۔
Microservices کا ایک کلیدی فائدہ یہ ہے کہ ہر سروس کو آزادانہ طور پر Scale کیا جا سکتا ہے اپنے سوچے ہوئے Load سے ملانے کے لیے، بجائے پوری ایپلیکیشن کو Scale کرنے کے۔ Bottlenecks تلاش کرنا پھر ہر سروس اور ہر 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
ایک سروس کو Scale کرنا جس کی bottleneck ایک مشترکہ database ہے صرف ڈیٹا بیس پر مزید load منتقل کرتا ہے — اصل قید کو Scale کریں، نہ کہ علامت کو۔
آزادانہ Scaling آپ کو صلاحیت کو بالکل وہاں خرچ کرنے دیتا ہے جہاں load ہے، جو ایک monolith کو مجموعی طور پر Scale کرنے سے بہت سستا ہے۔
لیکن بغیر سوچ سمجھے Scaling رقم ضائع کرتا ہے اور چیزوں کو خراب ہو سکتا ہے؛ ہر سروس کی metrics اور ہر hop کی traces کی پیمائش کرنا ہی بتاتا ہے کہ اصل قید کیا ہے جسے ٹھیک کرنا ہے۔