लोड और तनाव परीक्षण
1) शर्तें और उद्देश्य
SLO (उदाहरण के लिए, p95 <200 ms, त्रुटि दर <0) के खिलाफ कार्य सीमा (लक्ष्य RPS/प्रतियोगिता) में परीक्षण परीक्षण लोड करें। 5%).
तनाव परीक्षण - परे जा रहा है (सीपीयू/डीबी/नेटवर्क के संतृप्ति से पहले/अधिक), गिरावट और वसूली यांत्रिकी का अवलोकन।
स्पाइक परीक्षण - लोड के तेज फटने (× N मिनट के लिए)।
सोक/धीरज - लीक, जीसी बहाव, विखंडन, कतार विकास को खोजने के लिए लंबे समय तक (घंटे/दिन)।
क्षमता परीक्षण - थ्रूपुट (संतृप्ति बिंदु) और भंडार के पठार की गणना।
उद्देश्य: एसएलओ की पुष्टि करें, पठार को ठीक करें, अड़ चनों को समझें, ऑटो-स्केलिंग और सीमाओं को कैलिब्रेट करें।
2) ट्रैफिक मॉडल: खुला बनाम बंद
बंद मॉडल (संगामिति-चालित): आभासी उपयोगकर्ताओं (वीयू) की एक निश्चित संख्या, प्रत्येक के बाद उत्तर सोचने का समय बनाता है।
ओपन मॉडल (आगमन-दर): प्रतिक्रियाओं की परवाह किए बिना अनुरोधों की निश्चित दर (आरपीएस)।
लिटिल का नियम: 'L = ć W'
'ल' एक साथ सेवित अनुरोधों की औसत संख्या है,
'é' - तीव्रता (RPS),
'डब्ल्यू' औसत प्रतिक्रिया समय है।
इसलिए जनरेटर की आवश्यक प्रतिस्पर्धा का मूल्यांकन: 'संगामिति ≈ target_RPS p95_latency'।
3) मेट्रिक्स: हम क्या मापते हैं
देरी SLI: p50/p90/p95/p99 और p99 पूंछ। 9; "गर्म" और "ठंडे" रास्तों के लिए अलग।
त्रुटि: '5xx', '4xx' (वैध/अमान्य), टाइमआउट, छोड़ा गया.
थ्रूपुट: निरंतर आरपीएस, थ्रूपुट स्ट्रीम/बाइट्स।
संसाधन: CPU, RAM/ढेर, GC ठहराव, डिस्क IOPS/lat, नेटवर्क बैंडविड्थ, कनेक्शन/FD की संख्या।
कतारें और बैकप्रेशर: गहराई, प्रतीक्षा समय, शेड/सीमित अनुरोधों की संख्या।
कैश दक्षता: हिट/मिस, वार्म-अप तूफान।
डीबी/कैश/कतारें: p95 अनुरोध, ताले, संघर्ष, पूल उपयोग।
4) स्टैंड और डेटा
कॉन्फ़िगरेशन समकक्ष: सॉफ़्टवेयर संस्करण, सीमाएँ (uLimite, conntrack), JVM/GC कॉन्फ़िग, पूल।
टोपोलॉजी: एलबी, सीडीएन, डब्ल्यूएएफ, टीएलएस, एक ही नेटवर्क "हॉप्स"।
डेटा: यथार्थवादी वितरण (वस्तुओं के आकार, "गर्म "/" ठंडी "कुंजी, क्षेत्रीयता)।
ठंडी/गर्म/गर्म शुरुआत: व्यक्तिगत रन; "ठंडे" कैश का परीक्षण करना सुनिश्चित करें।
पृष्ठभूमि अलगाव: अप्रासंगिक नौकरियों/क्रोनोम या उनके प्रभाव के लिए खाता अक्षम करें।
5) परिदृश्य (लोड प्रोफाइल)
1. बेसलाइन: आरपीएस को लक्षित करने के लिए कदम त्वरण, 10-30 मिनट रखें।
2. रैंप एंड होल्ड: लक्ष्य से ऊपर एक्स% तक चिकनी वृद्धि, प्रतिधारण - पूंछ विश्लेषण।
3. स्पाइक: तत्काल × 2- × 5 1-5 मिनट के लिए छप, फिर वापस।
4. विफलता के लिए तनाव: विफलताओं के कदम; पहले एसएलओ विफलता बिंदु और "ब्रेक" बिंदु को ठीक करें।
5. भिगोना: यातायात की परिवर्तनशीलता (दिन/रात) के साथ 6-24 घंटे, चेहरे/बहाव के लिए देखें।
6. मिश्रित: वास्तविक वितरण (जिपफ/पेरेटो) द्वारा समापन बिंदुओं का मिश्रण, विभिन्न वजन।
6) चरण दर चरण प्रक्रिया
SLO को परिभाषित करें और ट्रैफिक प्रोफाइल को लक्षि
लोड मॉडल (ओपन/बंद) चुनें, आगमन दर या वीयू सेट करें.
डेटा और "हॉट "/" कोल्ड "मोड तैयार करें।
टेलीमेट्री सेट अप करें (ट्रेल्स/मेट्रिक्स/लॉग्स), टेस्ट रन के साथ सहसंबंध।
वार्मिंग अप और रनिंग, कलाकृतियों (CPU/ढेर प्रोफाइल, लौ रेखांकन, समझाएं/धीमी गति से लॉग डीबी) एकत्र करना।
अड़ चन विश्लेषण, कार्रवाई वस्तुओं का गठन।
फिक्स, बेसलाइन अपडेट और क्षमता प्लेबुक के बाद रिप्रोगन।
7) अड़ चनें और विशिष्ट सुधार
सीपीयू-बाउंड सेवा: प्रोफाइलिंग - गर्म कार्यों, आवंटन, शाखाओं का उन्मूलन; वेक्टोराइजेशन, कैश-फ्रेंडली संरचना।
नेटवर्क/टीएलएस: कनेक्शन पूलिंग, सही टाइमआउट, कम चैटिंग।
डीबी: इंडेक्स, बैचिंग, तैयार प्रश्न, कनेक्शन पूल, आर/डब्ल्यू पृथक्करण, परिणाम कैशिंग, क्वेरी डिडुप्लिकेशन।
कैश: आकार, टीटीएल, कोलसिंग, तूफान सुरक्षा, वार्मिंग, क्षेत्रीय गेंदों का अनुरोध करते हैं।
कतारें/दलाल: स्वीकृति सीमा/समानता, बैचों का आकार, अज्ञात उपभोक्ता, डीएलक्यू छत।
कचरा/ठहराव: जीसी ट्यूनिंग, बफर किराए, उचित सीमा के भीतर ऑब्जेक्ट पूलिंग।
I/O/disk: अतुल्यकालिक I/O, संपीड़न, उचित स्तर के साथ प्रतिक्रियाओं का संपीड़न।
8) सीमा और सुरक्षा
बजट समय: कैस्केड से बचने के लिए ऊपर से नीचे तक।
दर सीमा/टोकन बाल्टी: "लंबी मृत्यु" के बजाय पूर्वानुमानित गिरावट।
सर्किट ब्रेकर और कम प्राथमिकता संतृप्ति छायांकन।
Backpressure: संकेत और विवशता श्रृंखला में गहरी संगति।
Bulkheads: महत्वपूर्ण समापन बिंदुओं के लिए पूल को अलग करना।
पहचान: पुनरावृत्ति के तहत सुरक्षित पुनरावृत्ति के लिए कुंजी।
9) उपकरण और उन्हें कब चुनना है
k6 - लैकोनिक जेएस, आगमन-दर, एकीकरण और रेखांकन के लिए उत्कृष्ट समर्थन।
गैटलिंग - स्काला डीएसएल, उच्च-प्रदर्शन जनरेटर।
जेमेटर - लचीला, समृद्ध पारिस्थितिकी तंत्र; प्रोटोकॉल/प्लगइन के लिए सुविधाजनक।
टिड्डी - अजगर स्क्रिप्ट, जटिल उपयोक्ता प्रवाह तर्क के लिए सुविधाजनक।
वनस्पति/हे/wrk - microbenchies और बिंदु HTTP पर चलता है।
tc/netem, toxiproxy - नेटवर्क क्षरण इंजेक्शन।
फ्लेमिग्राफ/प्रोफाइलर - सीपीयू/ढेर गर्म स्थानों के लिए खोज।
10) उदाहरण (रेखाचित्र)
k6 (खुला मॉडल, समापन बिंदु मिलाएं)
javascript import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'constant-arrival-rate',
rate: 800, timeUnit: '1s', duration: '20m',
preAllocatedVUs: 500, maxVUs: 2000
}
},
thresholds: {
'http_req_duration{kind:hot}': ['p(95)<200'],
'http_req_failed': ['rate<0. 005']
}
};
export default function () {
const r = Math. random();
let res;
if (r < 0. 6) {
res = http. get('https://svc/api/hot', { tags: { kind: 'hot' }});
} else if (r < 0. 9) {
res = http. get('https://svc/api/warm', { tags: { kind: 'warm' }});
} else {
res = http. post('https://svc/api/heavy', JSON. stringify({ n: 1000 }), { headers: { 'Content-Type': 'application/json' }});
}
check(res, { 'status is 2xx': (r) => r. status >= 200 && r. status < 300 });
sleep(0. 2);
}
गैटलिंग (चरण और स्पाइक)
scala setUp(
scn. inject(
rampUsersPerSec(50) to 500 during (10 minutes),
constantUsersPerSec(500) during (20 minutes),
spikeUsers(2000). during(30. seconds)
)
). protocols(http. baseUrl("https://svc"))
लोड प्लान (YAML कंकाल)
yaml profile: "mix-traffic"
targets:
- endpoint: GET /api/hot weight: 0. 6
- endpoint: GET /api/warm weight: 0. 3
- endpoint: POST /api/heavy weight: 0. 1 schedule:
- step: { rps: 300, hold: 10m }
- step: { rps: 600, hold: 10m }
- step: { rps: 900, hold: 10m }
guardrails:
slo:
p95_ms: 200 error_rate: 0. 5%
abort_if:
- metric: error_rate op: ">"
value: 2%
window: 2m
11) स्वचालन और जीवनचक्र
प्रत्येक पीआर में पर्फ-धुआं (प्रमुख समापन बिंदुओं का छोटा रन)।
रात की "क्षमता" रिपोर्ट और प्रोफ़ाइल कलाकृतियों के साथ मंच पर चलती है।
CI/CD में गेट्स: p95/p99> एक्स% बेसलाइन या त्रुटि दर वृद्धि को पुनः प्राप्त करते समय फ़ाइल का निर्माण करें।
कलाकृतियों के रूप में प्रोफाइल/फ्लेमीग्राफ के बेसलाइन और भंडारण का संश्लेषण।
प्रासंगिकता टैग: कौन सी सेवा/समापन बिंदु कवर की गई है, कौन सी यातायात प्रोफ़ाइल का उपयोग किया जाता है।
12) एंटी-पैटर्न
एक ही मशीन पर जनरेटर और परीक्षण सेवा - विकृत परिणाम।
एपीआईबैक के लिए केवल बंद मॉडल (वीयू) - अंडरशूटिंग और गलतफहमी।
ठंडे आरंभ के बिना एक खाली डाटाबेस/कैश पर चलता है।
कोई यथार्थवादी वितरण (सभी प्रश्न समान हैं)।
कोई टेलीमेट्री नहीं (आरपीएस/विलंबता केवल जनरेटर साइड पर)।
स्थिर बेसलाइन और पर्यावरण नियंत्रण के बिना तुलना।
कारण को सही करने के बजाय एक बढ़े हुए समय के माध्यम से "अनुकूलन"।
13) आर्किटेक्ट चेकलिस्ट
1. एसएलओ और ठेठ/पीक लोड परिभाषित?
2. क्या सही मॉडल (खुला/बंद) चुना गया है और यातायात प्रोफ़ाइल वर्णित है?
3. स्टैंड कॉन्फ़िगरेशन और टोपोलॉजी में बराबर है, क्या एक ठंडा/गर्म मोड है?
4. टेलीमेट्री और प्रोफाइल सक्षम, परीक्षण घाव टैग?
5. रन: बेसलाइन/रैंप/स्पाइक/स्ट्रेस/सोक - कवर?
6. क्या संतृप्ति बिंदु तय किए गए हैं और सुरक्षा मार्जिन की योजना बनाई गई है?
7. कॉन्फ़िगर की गई सीमा, ब्रेकर, बैकप्रेशर, पहचान, छायांकन नीतियां?
8. क्या p95/p99 प्रतिगमन और त्रुटि दर के लिए सीआई गेट हैं, क्या आधारभूत रेखाएं हैं?
9. फिक्सेस - रिप्रोगन और प्लेबुक पावर अपडेट के बाद?
10. ऑटो जूम और आपातकालीन योजना प्रलेखित?
निष्कर्ष
लोड और स्ट्रेस टेस्टिंग वन-टाइम "रेस" नहीं है, बल्कि निरंतर इंजीनियरिंग अभ्यास है। एक यथार्थवादी ट्रैफ़िक मॉडल, सही स्टैंड, टेलीमेट्री और CI/CD में स्वचालन "गुप्त जादू" से मीट्रिक-चालित क्षमता में प्रदर्शन को बदल देता है: आप जानते हैं कि आपकी छत कहाँ है, स्टॉक कितथा।