पाठ 8 / 26

Canaries के लिए Weighted Traffic बँटवारा

Traffic का छोटा प्रतिशत नए version को भेजें और बढ़ाने से पहले देखें।

पहले कुछ को, फिर और को

Canary release असली traffic का छोटा हिस्सा (मान लें 1% से 10%) नए version को भेजता है जबकि बाक़ी stable पर रहता है। आप दोनों के बीच error दर और latency की तुलना करते हैं, और weights बदलकर बिना redeploy के बढ़ाते (10% → 50% → 100%) या तुरंत वापस ले लेते हैं। Weighted बँटवारा gateway या mesh की सुविधा है (nginx upstreams में weight, Envoy/Istio में weighted routes, Gateway API में HTTPRoute backend weights)। यदि user को लगातार एक version दिखना हो तो user या header से sticky routing के साथ, और मेट्रिक्स बिगड़ने पर rollout रोकने वाले स्वचालित विश्लेषण के साथ जोड़ें।

90/10 बँटवारा (config)

nginx upstream में weights 9 और 1 का अनुपात 9:1 देता है। Gateway config का अंश।

upstream orders_weighted {
  server orders-v1:8080 weight=9;
  server orders-v2:8080 weight=1;
}

Gateway से 100 अनुरोध, चलाकर

मैंने यह Docker में असली nginx 1.27 gateway पर चलाया, upstreams के रूप में छोटी Node.js services के साथ (पूरा setup केस स्टडी में)। 100 अनुरोधों में से ठीक 90 v1 ने और 10 v2 ने परोसे। nginx का weighted round robin निश्चित है; संभाव्य routers (random चुनाव) नमूना बढ़ने पर ही 90/10 के क़रीब आते हैं।

# 100 calls to /orders/x with a valid API key, counting the version in each response

Output:

{"v1":90,"v2":10}

ख़राब canary की क़ीमत, चलाकर

मैंने यह सादा-Python मॉडल चलाया। 1,000 अनुरोधों में 10% canary को 100 मिलते हैं। Canary अपने 5% अनुरोधों में विफल हो तो कुल traffic का सिर्फ़ 0.5% प्रभावित होता है, इसीलिए छोटा canary असली डेटा देते हुए भी नुक़सान सीमित रखता है।

import hashlib, bisect, math, random

w1, w2 = 90, 10
n = 1000; print("expected canary requests:", n * w2 // (w1 + w2), "| error budget burned if canary fails 5%:", round(w2 / (w1 + w2) * 5, 2), "% overall")

Output:

expected canary requests: 100 | error budget burned if canary fails 5%: 0.5 % overall

त्वरित जाँच: Canary release का मुख्य लाभ क्या है?

  • यह servers को तेज़ करता है
  • यह tests की ज़रूरत हटाता है
  • ख़राब release सिर्फ़ users के छोटे हिस्से को प्रभावित करती है और जल्दी वापस ली जा सकती है
  • यह errors छिपाता है
Answer

ख़राब release सिर्फ़ users के छोटे हिस्से को प्रभावित करती है और जल्दी वापस ली जा सकती है — क्रमिक एक्सपोज़र नुक़सान का दायरा सीमित करता है और असली-दुनिया के प्रमाण देता है।