परीक्षण और तनाव लोड करें
तनाव परीक्षण और तनाव
1) आपको इसकी आवश्यकता क्यों है
उद्देश्य:- क्षमता की पुष्टि करें (प्रणाली कितने आरपीएस/प्रतिस्पर्धी सत्र दिए गए एसएलओ का सामना करेगी)।
- अड़ चनें खोजें (CPU/IO/DB/network/locks/pool)।
- CI/CD में प्रदर्शन बजट और गेट सेट करें।
- रिलीज के जोखिम को कम करें (p95/p99 प्रतिगमन, पीक त्रुटि वृद्धि)।
- योजना क्षमता/लागत (स्केल आउट और रिजर्व)।
2) पर्फ परीक्षण के प्रकार
लोड: चोटियों के करीब यथार्थवादी यातायात; एसएलओ सत्यापन।
तनाव: सीमा से ऊपर/ऊपर वृद्धि - गिरावट व्यवहार जहां यह टूटता है।
स्पाइक: फास्ट लोड जंप → लोच/ऑटोस्केल।
भिगोना/धीरज: घंटे/दिन - लीक, विखंडन, विलंबता बहाव।
क्षमता/स्केलेबिलिटी: स्केल-आउट के साथ थ थ्रूपुट/विलंबता कैसे बदलती है; अमदल/गुस्ताफसन कानून।
स्मोक पर्फ: प्रत्येक रिलीज़ (प्रदर्शन गरिमा) पर एक छोटा "धुआं" चलता है।
3) यातायात पीढ़ी के मॉडल
फिक्स्ड VU/concurrency: 'N' उपयोगकर्ता, प्रत्येक क्लाइंट पर कतार → करने के लिए अनुरोध कर रहा है। अधिभार छिपाने का जोखिम।
आगमन की दर: वास्तविक जीवन की तरह, तीव्रता (req/s) के साथ अनुप्रयोगों का प्रवाह। सार्वजनिक एपीआई के लिए अधिक सही।
लिटिल का नियम: 'L = ć × W'।
पूल/सेवा के लिए, न्यूनतम समानता ≈ '× × W' (इन्वेंट्री का 20-50% जोड़ें)।
जहां 'é' थ्रूपुट है, 'W' औसत सेवा समय है।
4) लोड प्रोफाइल और परिदृश्य
उपयोगकर्ता यात्रा मिश्रण: स्क्रिप्ट के शेयर (लॉगिन, ब्राउज़, डिपॉजिट, चेकआउट...)।
थिंक-टाइम: उपयोगकर्ता रुकता है (वितरण: घातीय/लॉगनॉर्मल)।
डेटा प्रोफ़ाइल: प्रतिक्रियाओं का आकार, पेलोड, मापदंडों की परिवर्तनशीलता।
सहसंबंध: वास्तविक प्रवाह के रूप में लिंक चरण (कुकीज ़/टोकन/आईडी)।
ठंडा/गर्म/गर्म कैश: व्यक्तिगत रन।
पढ़ें बनाम लिखें: रीड/रिकॉर्ड का संतुलन, रिट्रेज़के लिए पहचान।
बहु-क्षेत्र: RTT, POP/ASN द्वारा वितरण।
5) परीक्षण वातावरण
अलगाव: स्टैंड टोपोलॉजी/सेटिंग्स में उत्पाद के करीब है (लेकिन उत्पाद को "हरा" नहीं करते हैं)।
डेटा: पीआईआई मास्किंग, वॉल्यूम, सूचकांक बिक्री के रूप में।
जनरेटर लोड करें: सीपीयू/नेटवर्क के खिलाफ आराम न करें; वितरित धावक, समय तुल्यकालन।
अवलोकन: मैट्रिक्स/ट्रेल्स/लॉग, परिधि पर सिंथेटिक्स, सीपीयू/ढेर प्रोफाइल का निर्यात।
6) मेट्रिक्स और एसएलआई
थ्रूपुट: आरपीएस/लेनदेन/सेकंड
लेटेंसी: p50/p95/p99, TTFB, सर्वर टाइम बनाम नेटवर्क।
त्रुटि: 5xx/4xx/डोमेन त्रुटियों का हिस्सा।
संतृप्ति: सीपीयू, लोड एवीजी, जीसी, डिस्क आईओपी/विलंबता, नेटवर्क, पूल प्रतीक्षा।
व्यापार SLI: ≤ 5s जमा सफलता, ≤ 2s आदेश की पुष्टि।
SLO से थ्रेसहोल्ड लें (उदाहरण के लिए, "99। 95% ≤ 300 ms"), रन के दौरान बर्न-रेट की निगरानी करें।
7) अड़ चनें ढूंढना (तकनीक)
1. लक्ष्य लोड के 60-80% तक सिस्टम को लगातार गर्म करें।
2. चरणों में वृद्धि (रैंप) → ठीक करें जहां p95/p99 और त्रुटि-दर बढ़ ती है।
3. p99 स्पाइक्स से मिलान करें:- पूल में कतारें (DB/HTTP),
- WENT/ताले (DB) की वृद्धि,
- जीसी-ठहराव/ढेर,
- नेटवर्क retransmitts/पैकेट हानि,
- डिस्क विलंबता/कैश याद आता है।
- 4. स्थानीयकरण: क्वेरी पथ द्वारा द्विआधारी खोज, प्रोफाइलर (CPU/alloc/lock-profile).
- 5. रन को दोहराते हुए "बोतल" ट्यूनिंग को ठीक करें।
8) तनाव में व्यवहार
सुंदर गिरावट: सीमा, सर्किट-ब्रेकर्स, बैकप्रेशर कतारें, प्रसंस्करण के लिए स्वीकार की जाती हैं।
रिट्रेज़: अधिकतम 1, केवल पहचान; जिटर; रिट्रे बजट ≤ आरपीएस का 10%।
फेल-ओपन/फेल-बंद: गैर-महत्वपूर्ण निर्भरता के लिए, फेल-ओपन (कैश/स्टब्स) की अनुमति दें।
कैस्केडिंग विफलता: पूल/कोटा (बल्कहेड) का अलगाव, तेज समय, कार्यों की "चिकनी" अक्षम (फीचर झंडे)।
9) उपकरण (कार्य के लिए चयन)
k6 (जावास्क्रिप्ट, ओपन/ओपन-मॉडल, फास्ट, सीआई में सुविधाजनक)।
JMeter (पारिस्थितिकी तंत्र, GUI/CLI, प्लगइन, लेकिन भारी) में समृद्ध।
गैटलिंग (स्काला डीएसएल, उच्च प्रदर्शन)।
टिड्डी (अजगर, स्क्रिप्टिंग लचीलापन)।
वनस्पति/हे/wrk (माइक्रो-बेंच और त्वरित जांच)।
नियम: पीआर में स्मोक पेन के लिए एक "मुख्य" उपकरण + हल्का सीएलआई।
10) उदाहरण (स्निपेट्स)
10. 1 k6 (आगमन दर के साथ खुला मॉडल)
js import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' }, // до 500 rps
{target: 800, duration: '5m'} ,//stress
{ target: 0, duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0. 005'],
},
};
export default function () {
const res = http. get(`${__ENV. BASE_URL}/api/catalog? limit=20`);
sleep(Math. random() 2); // think-time
}
10. 2 JMeter (प्रोफाइल विचार)
थ्रेड ग्रुप + स्टेपिंग थ्रेड или कॉन्सुरेंसी थ्रेड (ओपन-लाइक)।
HTTP अनुरोध मूलभूत, कुकी प्रबंधक, CSV डेटा सेट।
बैकेंड श्रोता → InfluxDB/Grafana; समय/कोड द्वारा दावा।
10. 3 टिड्डी (अजगर)
python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0. 2, 2. 0)
@task(5)
def browse(self): self. client. get("/api/catalog? limit=20")
@task(1)
def buy(self): self. client. post("/api/checkout", json={"sku":"A1","qty":1})
11) डेटा, सहसंबंध, तैयारी
बीज डेटा: निर्देशिका, उपयोगकर्ता, संतुलन, टोकन - बिक्री में।
पीआईआई मास्किंग/गुमनामी; वास्तविक वितरण के शीर्ष पर सिंथेटिक्स पैदा करना।
सहसंबंध: प्रतिक्रियाओं (RegExp/JSONPath) से आईडी/टोकन निकालें और बाद के चरणों में उपयोग करें।
12) रन के दौरान अवलोकन
मार्गों के साथ लाल डैशबोर्ड (दर, त्रुटियां, अवधि)।
अनुकरणीय - मैट्रिक्स से निशान में संक्रमण (trace_id)।
त्रुटि लॉग: नमूना + एकत्रीकरण, डुप्लिकेट/पहचान।
तंत्र: सीपीयू/जीसी/ढेर, डिस्क/नेटवर्क, पूल प्रतीक्षा.
DB: शीर्ष प्रश्न, ताले, सूचकांक स्कैन, ब्लोट।
13) स्वचालन और प्रदर्शन द्वार
सीआई: विलय पर छोटे रन (उदा। थ्रेसहोल्ड के साथ k6 2-3 मिनट)।
रात/साप्ताहिक: एक अलग माध्यम में लंबे सोख/तनाव; रिपोर्ट और रुझान।
कैनरी रिलीज़: प्रचार के "गेट" के रूप में SLO (त्रुटि-दर, p95) का विश्लेषण।
Regression: बेसलाइन बनाम वर्तमान बिल्ड; बिगड़ ने पर सतर्क> एक्स%।
14) क्षमता योजना और लागत
घटता throughput→latency: घुटने के बिंदु को परिभाषित करें - इसके बाद p99 तेजी से बढ़ ता है।
स्केल-आउट: स्केलिंग दक्षता को मापना (आरपीएस डेल्टा/नोड डेल्टा)।
लागत: "आरपीएस प्रति $/घंटा", शिखर घटनाओं + डीआर-रिजर्व के लिए आरक्षित।
15) एंटी-पैटर्न
"खाली" वातावरण में बिना नियंत्रण या परीक्षण के प्रॉड में हराएं, न कि प्रॉड की तरह।
ओवरलोड छिपाने के लिए निश्चित VUs के साथ बंद मॉडल।
थिंक-टाइम/डेटा की कमी - अवास्तविक कैश हिट, या इसके विपरीत - स्रोत के लिए तूफान।
कस्टम फ्लो के बजाय एक "/पिंग "स्क्रिप्ट।
अवलोकन की कमी: "हम केवल आरपीएस और औसत देरी देखते हैं।"
अनियंत्रित रिट्रेज़ → सेल्फ-डीडीओएस।
परिकल्पना/परिवर्तन को ठीक किए बिना परीक्षण और अनुकूलन को मिलाना।
16) चेकलिस्ट (0-30 दिन)
0-7 दिन
SLI/SLO को परिभाषित करें और ट्रैफिक प्रोफाइल (मिक्स, थिंक-टाइम, डेटा) को लक्षित करें।
उपकरण (के 6/जेमेटर/टिड्डी) चुनें, लाल डैशबोर्ड उठाएँ.
स्टैंड और बीज डेटा तैयार करें, तृतीय-पक्ष सीमा/कैप्चा अक्षम करें।
8-20 दिन
परिदृश्य बनाएं: ओपन-मॉडल (आगमन दर), ठंडा/गर्म/गर्म कैश।
भार चलाएँ → तनाव → स्पाइक; घुटने के बिंदु और बाधाओं को ठीक करें।
सीआई (माइक्रो-रन) में प्रदर्शन द्वार लागू करें।
21-30 दिन
भिगोना परीक्षण 4-24h: जीसी लीक/बहाव, स्थिरीकरण।
दस्तावेज़ सीमा, क्षमता योजना, "RPS→p95/oshibki" चित्र।
रनबुक तैयार करें "सीमा/पैमाने को कैसे बढ़ाएं" और "कैसे नीचा दिखाएं।"
17) परिपक्वता मैट्रिक्स
यथार्थवादी प्रोफाइल (मिश्रण, थिंक-टाइम, डेटा) हैं जो ≥ 80% यातायात को कवर करते हैं।
RED डैशबोर्ड + ट्रेसिंग सभी परीक्षणों के लिए जुड़े हुए हैं।
P95/त्रुटियों को पुनः प्राप्त करते समय प्रदर्शन द्वार ब्लॉक जारी करता है।
क्षमता और घुटने के बिंदु प्रमुख सेवाओं द्वारा प्रलेखित हैं।
मासिक सोख/तनाव चलता है और प्रगति रिपोर्ट।
"स्पाइक" के प्रतिरोध की पुष्टि ऑटोस्केल और कैस्केड-विफल की अनुपस्थिति से होती है।
18) निष्कर्ष
लोड परीक्षण एक नियमित इंजीनियरिंग अभ्यास है, न कि एक बार "माप। "मॉडल वास्तविक उपयोगकर्ता (ओपन-मॉडल), मापते हैं कि क्लाइंट के अनुभव (SLI/SLO) को क्या दर्शाता है, CI/CD में अवलोकन और द्वार रखते हैं, तनाव/स्पाइक/सोख रन और फिक्स करते हैं। फिर चोटी की घटनाएं और काले हंस प्रबंधनीय परिदृश्यों में बदल जाते हैं, और प्रदर्शन आपके मंच के एक पूर्वानुमानित और औसत दर्जे के पैरामीटर में बदल जाता है।