संचालन और → प्रबंधन सेवा निर्भरता
सेवा निर्भरता
1) आपको इसकी आवश्यकता क्यों है
कोई भी उत्पादन-मंच एक गिनती है: उपयोगकर्ता → एज/एपीआई → डोमेन सेवाएं → टर्न/स्ट्रीम → डीबी/कैश → बाहरी प्रदाता (भुगतान, केवाईसी, गेम के प्रदाता)। ग्राफ के एक किनारे पर एक त्रुटि अक्सर पूरे नेटवर्क में "चलती है": देरी बढ़ ती है, पीछे हटती है, कतारें बंद हो जाती हैं, कैस्केडिंग विफलताएं होती हैं। निर्भरता प्रबंधन "विस्फोट त्रिज्या" को कम करता है और रिलीज को अनुमानित बनाता है।
उद्देश्य:- कॉल का पूरा ग्राफ देखें और समझें कि कौन किस पर निर्भर करता है।
- कैस्केड विफलताओं और "रेट्रे तूफान" को रोकें।
- संगतता और एसएलओ प्रचार पर आधारित योजना रिलीज।
- MTTR उठाएँ: सही जड़ कारण को तेजी से खोजें.
2) निर्भरता के प्रकार
तुल्यकालिक (RPC: REST/gRPC/GraphQL): विलंबता/उपलब्धता द्वारा हार्ड कनेक्टिविटी। हमें टाइमआउट, ब्रेकर, रिट्रे बजट की आवश्यकता है।
अतुल्यकालिक (घटना/स्ट्रीम: काफ्का/खरगोश/पल्सर): अधिक स्थिर कनेक्टिविटी, लेकिन लैग/बैकलॉग और डिलीवरी शब्दार्थ (कम से कम-एक बार, पहचान) है।
भंडारण (DB/Cache/Object store): साझा संसाधन → सामग्री, कनेक्शन सीमा/IOPS, निष्कासन, प्रतिकृति।
बाहरी प्रदाता (PSP/KYC/गेम प्रदाता): कोटा, टोल कॉल, सेवा विंडो, कानूनी SLA।
ऑपरेटिंग (रिलीज़, फ़िचफ्लैग, कॉन्फ़िग्स): सेटिंग्स, रहस्य, स्कीमा रजिस्ट्री के माध्यम से अप्रत्यक्ष निर्भरता।
3) सेवा कैटलॉग और निर्भरता रेखांकन
हम निर्देशिका में क्या ठीक करते हैं (बैकस्टेज/सेवा कैटलॉग/सीएमडीबी):- मालिक (स्क्वाड/चैट/ऑन-कॉल रोटा), रेपो, पर्यावरण, कलाकृतियाँ।
- API अनुबंध (OpenAPI/AsyncAPI), संस्करण, संगतता (बैक/फॉरवर्ड)।
- इनबाउंड/आउटबाउंड निर्भरता (अपस्ट्रीम/डाउनस्ट्रीम) प्रकार (सिंक/एसिंक), आलोचना, एसएलओ अपेक्षाओं के साथ।
- टाइमआउट/रिट्रीट बजट, ब्रेकर, बल्कहेड पूल।
- कोटा और बाहरी एकीकरण की सीमाओं पर डेटा।
- 'सर्विस: पेमेंट-एपी'
- अपस्ट्रीम: 'उपयोगकर्ता-प्रोफ़ाइल' (सिंक), 'जोखिम-स्कोर' (async)।
- डाउनस्ट्रीम: 'PSP-X' (सिंक, квота 2k RPS), 'लेजर' (async)।
- SLO: p99 ≤ 300 ms, 99। 9% अपटाइम।
- टाइमआउट: 200 एमएस से 'पीएसपी-एक्स', 150 एमएस से 'यूजर-प्रोफाइल'।
- रेट्राई: 2 घातीय देरी के साथ, जिटर।
- ब्रेकर: 5% त्रुटियों/10 पर 30 के लिए खुला।
4) एसएलओ प्रचार और "विलंबता बजट"
तुल्यकालिक कॉल की एक श्रृंखला के साथ, कुल एसएलओ देरी और विफलता संभावनाओं के योग से बनता है।
सिद्धांत:- अनुरोध का बजट ऊपर से नीचे तक विभाजित है: फ्रंट-एंड SLO 500 ms → एज 50 ms → API 150 ms → डोमेन सेवाएं 200 ms → प्रदाता 100 ms।
- टाइमआउट "आउट से कम हैं": कॉलर के पास कुल आंतरिक समय की तुलना में कम समय है ताकि संसाधनों को अपडेट किया जा सके, और ज़ोंबी कॉल जमा न हो।
- रेट्राई केवल सुरक्षित कोड/अपवादों के लिए और जिटर के साथ; अड़ चन टाइमआउट (उर्फ "तूफान") के लिए कोई रिट्रे नहीं।
5) अनुबंध और इंटरऑपरेबिलिटी
एपीआई वर्शनिंग: अनुबंधों के लिए सेमवर; "वैकल्पिक" क्षेत्रों, स्कीमा एक्सटेंशन के माध्यम से पिछड़े-संगत परिवर्तन; विलोपन - केवल "पदावनत अवधि" के माध्यम से।
उपभोक्ता-संचालित अनुबंध (सीडीसी): उपभोक्ता परीक्षण (संधि जैसे) सीआई में प्रदाता के खिलाफ चलते हैं; असंगत होने पर रिलीज अवरुद्ध है।
रजिस्टर स्कीमा (Async): विषयों/घटनाओं का संस्करण, स्कीमा का विकास (Avro/JSON-Schema), कैन-रीड-ओल्ड/कैन-राइट-नई नीति।
6) इंजीनियरिंग स्थिरता पैटर्न
टाइमआउट: व्यापार एसएलए को तकनीकी अपेक्षाओं से अलग करना; प्रत्येक आउटगोइंग कनेक्शन एक स्पष्ट समय है।
रिट्रीज + बैकऑफ + जिटर: 2-3 से अधिक प्रयास नहीं, दिया गया पहचान।
सर्किट ब्रेकर: डाउनस्ट्रीम गिरावट में "तेजी से गिरावट"; आधा खुला परीक्षण।
बल्कहेड (पूल अलगाव): विभिन्न डाउनस्ट्रीम के लिए - धाराओं/फर्श/कनेक्शन के अलग-अलग पूल।
दर-सीमा/लीकी-बाल्टी: ताकि चोटियों पर नीचे की ओर नहीं मार सकें।
idempotency & deduplication: अनुरोध/संदेश स्तर पहचान कुंजी; दादा-चमड़ेऔर पीछे हटने वाली कतार।
कैशिंग और फॉलबैक: स्थानीय/वितरित कैश, बासी-जबकि-पुनर्नवीनीकरण स्थिति, सामग्री गिरावट।
स्यूडो-कॉन्फिग (विचार):
outbound:
psp-x:
timeout_ms: 200 retries: 2 retry_on: [5xx, connect_error]
backoff: exponential jitter: true circuit_breaker:
error_rate_threshold: 0. 05 window_s: 10 open_s: 30 pool: dedicated-psp (max_conns: 200)
7) निर्भरता की अवलोकन
वितरित निशान (TraceID, बैगेज): लिंक द्वारा अनुरोध का मार्ग देखें; 'सहकर्मी टैग के साथ आउटगोइंग कॉल तक फैला हुआ है। सेवा ',' रीट्री ',' टाइमआउट '।
Метрики प्रति-निर्भरता: 'आउटबाउंड _ लेटेंसी _ p99', 'आउटबाउंड _ एरर _ रेट', 'ओपन _ सर्किट', 'रेट्री _ काउंट', 'क्यू _ लैग'।
अपस्ट्रीम/डाउनस्ट्रीम डैशबोर्ड:- SLO और गलत किनारे रंग कोडित सेवा मानचित्र।
- पिछले सप्ताह के लिए "शीर्ष एन समस्या निर्भरता"।
- "ब्लास्ट त्रिज्या" - सेवाओं की एक सूची जो एक्स के पतन से प्रभावित होगी।
- सहसंबंध लॉग: लॉग में 'trace _ id '/' span _ id' शामिल करें.
8) निर्भरता-जागरूक रिलीज प्रबंधन
निर्भरता-जागरूक पाइपलाइनें: यदि उपभोक्ता सीडीसी परीक्षण लाल हैं तो प्रदाता की रिहाई अवरुद्ध है।
क्रमिक समावेशन (phicheflags): नए क्षेत्र/अंत - 1% उपभोक्ताओं के लिए 10% 100%।
कैनरी रिलीज़: हम ट्रैफ़िक की हिस्सेदारी पर प्रमुख निर्भरता और "विलंबता बजट" की जाँच करते हैं।
योजनाओं की संगतता: निर्माता 'vNe' लिखते हैं, उपभोक्ता 'vold/vNe' पढ़ ते हैं; संक्रमण के बाद - पुराने क्षेत्रों का "कचरा संग्रह"।
9) स्तंभ द्वारा घटनाएं और वृद्धि
हम "सच्चे अपराधी" को परिभाषित करते हैं: अलर्ट-सहसंबंध - यदि 'पीएसपी-एक्स' ने अपमानित किया है, तो हम पूरे "भुगतान बुश", लेकिन एकीकरण के मालिक को पेज नहीं करते हैं।
ऑटोडिग्रेडेशन: फिचफ्लैग "न्यूनतम मोड" (कम भारी समापन बिंदु, छंटनी बंडल, गैर-महत्वपूर्ण विशेषताओं को अक्षम करना)।
कैस्केड से गार्ड: समानतावाद को सीमित करें, एक गर्म शाखा पर रेट्रास बंद करें, अग्रिम में ब्रेकर खोलें (पूर्व-खुला)।
रनबुक टेम्पलेट:- निदान: क्या डैशबोर्ड/मैट्रिक्स, कोटा/सीमा की जांच कैसे करें।
- क्रियाएँ: आरपीएस को कम करें, एक बैकअप प्रदाता पर स्विच करें, अस्थायी रूप से कैश प्रतिक्रियाओं को सक्षम करें।
- रोलबैक और सत्यापन: रिटर्न पैरामीटर, सुनिश्चित करें कि मानक p95/p99 और त्रुटि-दर है।
10) निर्भरता आलोचना मैट्रिक्स
अक्षों के साथ प्रत्येक लिंक का मूल्यांकन करें: नियम:- "महत्वपूर्ण" के लिए - डबल प्रावधान, ब्रेकर, व्यक्तिगत पूल, अराजकता परीक्षण।
- "उच्च" के लिए - कम से कम गिरावट और सुविधा को बंद करने के लिए "ग्रीन बटन"।
- "मध्यम/कम" के लिए - रिट्रे सीमा और कतार बजट।
11) प्रक्रिया: इन्वेंट्री से ऑपरेशन तक
1. ग्राफ मैपिंग: निर्देशिका से वास्तविक कॉल (ट्रेस) + घोषणात्मक निर्भरता एकत्र करें।
2. मालिकों को असाइन करें: प्रत्येक सेवा और बाहरी एकीकरण के लिए - जिम्मेदार ऑन-कॉल।
3. SLO और बजट को परिभाषित करें: विलंबता/त्रुटियां, टाइमआउट/रिट्रे/पूल।
4. औपचारिक अनुबंध: OpenAPI/AsyncAPI, स्कीमा और CDC।
5. स्थिरता पैटर्न सक्षम करें: टाइमआउट/रिट्रीज/सर्किट/बल्कहेड।
6. डैशबोर्ड और अलर्ट प्रति-निर्भरता कॉन्फ़िगर करें।
7. रिलीज गेट स्थापित करें: सीडीसी/संगतता/कैनरी द्वारा ब्लॉक करें।
8. नियमित खेल के दिन: गिरने वाले प्रमुख किनारों पर अराजकता के प्रयोग
9. संचार पर ध्यान केंद्रित करने के साथ पोस्टमार्टम: कैस्केड को क्या मजबूत किया, त्रिज्या को कैसे संकीर्ण किया जाए।
12) लत पर अलर्ट (नियम विचार)
तुल्यकालिक डाउनस्ट्रीम:- ' outbound _ erry _ rate {to =" X"}> 10m' → चेतावनी के लिए 3%; '> 5% FOR 5m' → महत्वपूर्ण।
- 'outbound _ p99 _ latency {to = "X "}>। 3 के लिए 10 मी '→ चेतावनी।
- एकीकरण स्वामी के लिए' सर्किट _ open {to =" X "} = = 1 फॉर 1m 'पृष्ठ।
- ' retry _ rate {to =" X "}> baseline2 for 5m '+ 'outbound _ rps> 0' → तूफान जोखिम।
- ' consumer _ lag {topic =" Y"} वृद्धि> सीमा के लिए 10m' + 'hpa at अधिकतम'।
- ' उपयोग _ कोटा {प्रदाता =" PSP-X "} 90% विंडो 'चेतावनी, ऑटो-स्विच मार्ग।
13) एंटी-पैटर्न
"सभी बहाव के लिए एक सामान्य स्ट्रीम पूल। "कुल: हेड-ऑफ-लाइन ब्लॉकिंग। पूल विभाजित करें।
कोई टाइमआउट/अंतहीन रिट्रेस के साथ। तो एक तूफान पैदा होता है।
गैर-आइडेम्पोटेंट सर्जरी के अंधे रिट्रे। डुप्लिकेट राइट-ऑफ/दांव।
कनेक्टिविटी पॉइंट के रूप में छिपा हुआ "साझा डीबी"। मजबूत प्रतिस्पर्धा और रुकावटें।
एपीआई संस्करण सीडीसी और पदावनत योजना के बिना बदलता है। पकड़ द्रव्यमान गिरता
केवल सेवाओं द्वारा अवलोकन, कनेक्शन द्वारा नहीं। यह दिखाई नहीं देता है जहां श्रृंखला टूटती है।
14) डैशबोर्ड: न्यूनतम सेट
सर्विस मैप: एज मैट्रिक्स (विलंबता/त्रुटि/वॉल्यूम) के साथ सेवाओं का एक इंटरैक्टिव मानचित्र
अपस्ट्रीम/डाउनस्ट्रीम अवलोकन: सेवा के मालिक के लिए - आने वाली निर्भरता (जो कॉल कर रही है), आउटगोइंग (जो कॉल कर रही है), "शीर्ष समस्याएं।"
डिपेंडेंसी ड्रिलडाउन: लिंक विशिष्ट कार्ड: p50/p95/p99, क्लास त्रुटियां, ओपन ब्रेकर प्रतिशत, रिट्रे, कनेक्शन पूल, कोटा/लागत।
रिलीज़ संदर्भ: निर्भरता रेखांकन पर रिलीज ़/फ़िचफ्लैग की एनोटेशन।
15) कार्यान्वयन चेकलिस्ट
- मालिकों और अनुबंधों के साथ सेवाओं की निर्देशिका (OpenAPI/AsyncAPI)।
- निशान से निर्भरता का पूरा ग्राफ (दैनिक अद्यतन)।
- सेवा द्वारा SLO और श्रृंखला के नीचे "विलंबता बजट"।
- स्पष्ट टाइमआउट, जिटर रिट्रीट, ब्रेकर, बल्कहेड अलगाव।
- सीडीसी एक रिलीज गेट के रूप में सीआई में परीक्षण।
- डैशबोर्ड प्रति-निर्भरता और सेवा कार्ड।
- किनारों पर अलर्ट + मूल कारण से दमन।
- खेल-दिन: प्रदाता/क्लस्टर/विषय ड्रॉप और गिरावट की जाँच।
- क्षरण योजना: जिसमें हम बंद हो जाते हैं, जिसे हम चालू करते हैं।
- कनेक्टिविटी को कम करने के लिए कार्रवाई के साथ नियमित पोस्टमॉर्
16) निर्भरता प्रबंधन गुणवत्ता केपीआई
निर्भरता MTTR: औसत पसली वसूली।
ब्लास्ट रेडियस इंडेक्स: एक गिरने पर प्रभावित सेवाओं की औसत संख्या।
युग्मन स्कोर: सभी के बीच सिंक निर्भरता का अनुपात; नीचे की ओर प्रवृत्ति।
सीडीसी पास दर: अनुबंध उल्लंघन के बिना रिलीज का%।
पुनः प्रयास करें तूफान/माह लक्ष्य → 0।
बाहरी कॉल की लागत: प्रति 1k आरपीएस पर बाहरी कॉल की लागत (कैशिंग/फॉलबैक का प्रभाव देखें)।
17) तेज शुरुआत (डिफ़ॉल्ट)
टाइमआउट: लिंक बजट का 70-80%; ऊपरी समय समाप्ति <आंतरिक का योग निवेदन करें.
रिट्राई: अधिकतम 2, केवल आइडेम्पोटेंट 5xx/नेटवर्क पर, बैकऑफ + जिटर के साथ।
ब्रेकर: 10 एस में 5% त्रुटियों की दहलीज, खुला = 30 एस, आधा-खुला नमूने।
बल्कहेड: समर्पित पूल/कनेक्शन सीमा प्रति डाउनस्ट्रीम।
सीडीसी: सभी सार्वजनिक एपीआई और विषयों के लिए अनिवार्य।
Async-वरीयता: जहां संभव हो - घटनाओं/कतारों में स्विच करना (समय में decoupling)।
18) एफएक्यू
प्रश्न: अधिक महत्वपूर्ण क्या है: एक रिट्रीट या एक ब्रेकर?
A: दोनों। रेट्राई अल्पकालिक विफलताओं से बचाते हैं, ब्रेकर स्थायी गिरावट और तूफानों से बचाता है।
प्रश्न: आप कैसे जानते हैं कि कनेक्शन "बहुत नाजुक" है?
A: उच्च त्रुटि सहसंबंध, कम समय मार्जिन, लगातार रिट्रे, कोई फॉलबैक/कैश, तुल्यकालिक लंबी श्रृंखलाएं।
प्रश्न: अगर हमारे पास एकीकरण परीक्षण हैं तो सीडीसी क्यों?
A: CDC उपभोक्ता अपेक्षाओं को पकड़ ता है और असंगत होने पर प्रदाता की रिहाई को तोड़ ता है - कोड उत्पादन में आने से पहले।