स्थिरता परीक्षण
1) बुनियादी अवधारणाएं और लक्ष्य
विश्वसनीयता - प्रदर्शन की संभावना; लचीलापन-एक विफलता के दौरान और बाद में व्यवहार।
SLO/गलत बजट: गिरावट "स्वीकार्यता" मानदंड।
स्थिर-राज्य परिकल्पना: स्थिर मैट्रिक्स की औपचारिक उम्मीद (उदा। p95 <200 ms, त्रुटि दर <0। 5%). यदि परिकल्पना कायम है तो प्रयोग को सफल माना जाता है।
विफलताओं के प्रकार: नेटवर्क (विलंबता, हानि/डुप्लिकेट, ब्रेक्स), कम्प्यूटेशनल (सीपीयू, मेमोरी), स्टोरेज (I/O, डिस्क थकावट), निर्भरता (5xx, टाइमआउट, रेट-लिमिट), तार्स (आंशियल (आंशिफ्स्स्स्स), "रिलीज्स्स्स्स्स्स्ट्ट्ट्ट्ट्ट)" डार ") (विभाजन-मस्तिष्क, घंटे की पाली)।
2) स्थिरता का पिरामिड
1. तर्क विफलताओं की इकाई परीक्षण (रिट्रेज़, आइडेम्पोटेंसी, टाइमआउट)।
2. गलती-इंजेक्ट (testconteners/tc-netem) के साथ घटक एडेप्टर।
3. नेटवर्क/डेटाबेस/कैश और वास्तविक दुनिया के प्रोफाइल के साथ एकीकरण/प्रणाली।
4. रनबुक पर प्री-प्रोड (और फिर प्रोड में सीमित) में अराजकता के प्रयोग।
5. खेल दिवस - टीम का परिदृश्य अभ्यास (लोग + उपकरण)।
3) आधार के रूप में अवलोकन
SLI: p50/p95/p99 विलंबता, त्रुटि दर, संतृप्ति (CPU/ढेर/FD/IOPS), ड्रॉप/टाइमआउट, कतार गहराई।
निशान: विफलता के तहत अड़ चनें खोजने के लिए।
सिमेंटिक लचीलापन मेट्रिक्स: सुंदर-अपमानित सफलता दर, शेड अनुरोध दर, स्व-उपचार दर (MTTR)।
लेबलिंग प्रयोग: 'अराजकता। experiment_id', 'चरण = इंजेक्ट/रिकवर' घटनाओं/लॉग में।
4) दोष इंजेक्शन कैटलॉग
नेटवर्क: देरी/जिटर, नुकसान/डुप्लिकेट/पुन: आदेश, बैंडविड्थ सीमा, फट तूफान, टीएलएस टूट जाता है।
मेजबान: सीपीयू सीमा, मेमोरी लीक/लिमिट, जीसी ठहराव, विवरणकर्ता थकावट, "घड़ीतिरछा।"
भंडारण: बढ़ ती विलंबता, EROFS, ENOSPC, प्रतिकृति गिरावट, नेता का नुकसान।
निर्भरता: 5xx/429, मंदी, डीएनएस फ्लैपिंग, पुराने प्रमाण पत्र, दर-सीमा, "आंशिक प्रतिक्रियाएं।"
डेटा: भ्रष्टाचार, धाराओं में "छेद" लिखें, घटना डुप्लिकेट, संस्करण संघर्ष।
ऑपरेशन: असफल रिलीज, फ़ीचर फ्लैग, कॉन्फ़िग बहाव, मैनुअल त्रुटि (सिमुलेशन के हिस्से के रूप में)।
5) स्थिरता पैटर्न (क्या जांचना है)
प्रत्येक आरपीसी पर जिटर रेट्रेस और टाइमआउट।
सर्किट ब्रेकर (उद्घाटन/अर्ध-उद्घाटन, घातीय वसूली)।
Bulkheads (महत्वपूर्ण डोमेन के लिए पूल/कतारों का अलगाव)।
शेडिंग लोड करें (संतृप्त होने पर कम-प्राथमिकता निवेदन रीसेट करें)।
Backpressure (श्रृंखला को संकेत देता है, संगति सीमा)।
पहचान ("साइड इफेक्ट्स" पर पहचान कुंजी)।
स्रोत गिरावट के मामले में कैचिंग और ढेर।
सुंदर गिरावट (हल्के प्रतिक्रियाएं, बासी डेटा, अक्षम सुविधाएँ)।
टाइमआउट-बजट।
परमाणुता/मुआवजा (सागा/आउटबॉक्स/लेन-देन इनबॉक्स)।
कोरम और प्रतिकृति (आर/डब्ल्यू कोरम, उपलब्धता के लिए स्थिरता गिरावट)।
एंटी-एन्ट्रापी/रीप्ले (इवेंट होल से रिकवरी)।
6) इंजेक्शन और अपेक्षाओं के लिए नुस्खे (स्यूडोकोड)
जिटर और ब्रेकर के साथ रिट्रे
for attempt in 1..N:
if breaker. open(): return fallback()
res = call(dep, timeout = base 0. 8)
if res. ok: return res sleep(exp_backoff(attempt) jitter(0. 5..1. 5))
if attempt == N: breaker. trip()
return fallback()
शेडिंग और बैकप्रेशर
if queue. depth() > HIGH cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency
पहचान
key = hash("payout:"+external_id)
if store. exists(key): return store. get(key)
result = do_side_effect()
store. put(key, result, ttl=30d)
return result
7) प्रयोग: परिदृश्य और परिकल्पना
7. 1 "धीमी निर्भरता"
इंजेक्शन: + 400 ms p95 से बाहरी API।
प्रतीक्षा: टाइमआउट ग्रोथ ≤ एक्स%, ब्रेकर ओपनिंग, फॉलबैक प्रतिक्रियाएं, p99 सेवा की बचत 7. 2 "आंशिक कैश नुकसान" इंजेक्शन: Redis/Cache shard नोड्स के 50% की विफलता। प्रतीक्षा: बढ़ी हुई मिस, लेकिन स्रोत के लिए हिमस्खलन के बिना (अनुरोध करना/अपरिवर्तनीय टीटीएल), ऑटो-वार्म अप और वसूली। 7. 3 "डेटाबेस में मस्तिष्क को विभाजित करें" इंजेक्शन: नेता का नुकसान, प्रतिकृति पर स्विच करें। प्रतीक्षा: रिकॉर्ड का अल्पकालिक इनकार, कोरम से पढ़ें, कोई डेटा हानि नहीं, आउटबॉक्स संदेश नहीं खोता है। 7. 4 "ENOSPC/डिस्क पूर्ण" इंजेक्शन: 95-100% डिस्क। प्रतीक्षा: लॉग का आपातकालीन रोटेशन, गैर-अवरोधक सुविधाओं की विफलता, महत्वपूर्ण लॉग की सुरक्षा (WAL), अलर्ट और ऑटोलिकिड्स। 7. 5 "ट्रैफिक फट" इंजेक्शन: × 3 आरपीएस से हॉट एंडपॉइंट 10 मिनट। उम्मीद: कम प्राथमिकता वाले छायांकन, "परमाणु" रास्तों के लिए स्थिर p95, सीमा के भीतर कतार वृद्धि, कोई डीएलक्यू तूफान नहीं। 7. 6 "घड़ीतिरछा" इंजेक्शन: नोड समय की शिफ्ट +/ − 2 मिनट। प्रतीक्षा: सही TTL/हस्ताक्षर (लेवे), रीट्रे में मोनोटोनिक टाइमर, स्वीकार्य बहाव के साथ वैध टोकन। 8) प्रयोगों का वातावरण और सुरक्षा प्री-प्रोड, सिंथेटिक डेटा, कॉन्फ़िग/टोपोलॉजी के साथ शुरू करें जितना संभव हो उतना उत्पाद के करीब। बिक्री में - केवल नियंत्रित खिड़कियां, सुविधा झंडे, चरण-दर-चरण आयाम, ऑटो-रोलबैक, "लाल बटन"। रेलिंग: आरपीएस/बग सीमा, एसएलओ गार्ड, महत्वपूर्ण घटनाओं के दौरान रिलीज को अवरुद्ध करना। एक रनबुक की आवश्यकता होती है: कैसे रोल करें, किसे कॉल करें, कहां देखें। 9) स्वचालन और सीआई/सीडी कोड (YAML/DSL) के रूप में प्रयोगों की सूची: लक्ष्य, इंजेक्शन, मैट्रिक्स, थ्रेसहोल्ड, रोलबैक "बटन"। प्रत्येक रिलीज में धूम्रपान-अराजकता: लघु इंजेक्शन (जैसे) मंच में 2 मिनट + 200 एमएस की लत)। मैट्रिक्स नाइट रन - सेवाएं × विफलता मोड रिलीज़ गेट: यदि स्थिरता सीमा से नीचे है, तो तैनाती का निषेध (उदाहरण के लिए, "धीमी निर्भरता" के तहत 'फॉलबैक कवरेज <95%')। 10) डेटा और स्थिरता मुआवजा (सागा) की जाँच करें: आंशिक रूप से किए गए संचालन को एक सहमत राज्य में लाया जाना चाहिए। टेस्ट रिप्ले/इवेंट डुप्लिकेट, आउट-ऑफ-ऑर्डर डिलीवरी, छेद और रिप्ले। असफलताओं के बाद डोमेन आक्रमणकारियों को सत्यापित करें: शेष नकारात्मक नहीं है, लेनदेन अटक नहीं जाते हैं, सीमाओं का उल्लंघन नहीं होता है। 11) एंटी-पैटर्न केवल खुश-पथ का परीक्षण करें और विफलताओं के बिना लोड करें। रेट्राई बिना जिटर के - गिरावट के तहत एक तूफान। कोई वैश्विक समय समाप्ति बजट नहीं - कैस्केडिंग टाइमआउट। सभी कार्यों के लिए एक एकल पूल - कोई अलगाव (bulkheads)। "अनंत" कतारें - विलंबता/पीडीई में वृद्धि। प्रयोगों की शून्य टेलीमेट्री - "अंधा" अराजकता प्रथाओं। रोलबैक/लिमिट/जिम्मेदार मालिक के बिना बिक्री में अराजकता। 12) आर्किटेक्ट चेकलिस्ट 1. स्थिर-राज्य परिकल्पना और एसएलओ परिभाषित? 13) मिनी टूल्स और सैंपल परिदृश्य (YAML स्केच) नेटवर्क (tc/netem) लचीलापन परीक्षण एक "अराजकता चाल" नहीं है, लेकिन एक अनुशासन जो सिस्टम को ग्लिच के तहत अनुमानित करता है। स्पष्ट परिकल्पना, टेलीमेट्री, नियंत्रित प्रयोगों की एक सूची और वास्तुकला में एम्बेडेड पैटर्न (टाइमआउट, ब्रेकर्स, अलगाव, आइडेन) संभावित घटनाओं को नियंत्रित परिदृश्यों में बदल देते हैं। टीम को रिलीज में विश्वास हो जाता है, और उपयोगकर्ताओं को विफलताओं की स्थिति में भी एक स्थिर सेवा मिलती है।
2. प्रत्येक आरपीसी में टाइमआउट, जिटर रिट्रीट, ब्रेकर हैं?
3. लागू किए गए बल्कहेड्स, लिमिटर, बैकप्रेशर, लोड-शेडिंग?
4. कैश स्थिर: कोलसिंग, कैश तूफान सुरक्षा, वार्मिंग?
5. साइड इफेक्ट्स, आइडेम्पोटेंट कुंजी के लिए आउटबॉक्स/सागा?
6. कोरम/प्रतिकृति/feilover परीक्षण?
7. क्या सीआई/सीडी में प्रयोगों, रात की अराजकता और द्वार की एक सूची है?
8. मेट्रिक्स/ट्रेस मार्क प्रयोग, क्या डैशबोर्ड हैं?
9. रनबुक 'और "लाल बटन" तैयार, जिम्मेदारी सौंपी गई?
10. देव/एसआरई/समर्थन की विशेषता वाले नियमित खेल दिवस?yaml experiment: add-latency target: svc:payments inject:
netem:
delay_ms: 300 jitter_ms: 50 loss: 2%
duration: 10m guardrails:
error_rate: "< 1%"
p95_latency: "< 400ms"सीपीयू/ढेर
yaml inject:
cpu_burn: { cores: 2, duration: 5m }
heap_fill: { mb: 512 }निर्भरता
yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"निष्कर्ष