आप वेब साइटों के लिए लोड परीक्षण और क्षमता नियोजन कैसे करते हैं?


113

यह वेब साइटों के लिए क्षमता नियोजन के बारे में एक विहित प्रश्न है।

सम्बंधित:

वेब साइटों और वेब-अनुप्रयोगों के लिए कुछ अनुशंसित उपकरण और क्षमता योजना के तरीके क्या हैं?

कृपया अलग-अलग वेब-सर्वर, फ्रेमवर्क, आदि के लिए विभिन्न उपकरणों और तकनीकों का वर्णन करने के लिए स्वतंत्र महसूस करें, साथ ही साथ सर्वश्रेष्ठ-प्रथाएं जो सामान्य रूप से वेब सर्वर पर लागू होती हैं।

जवाबों:


127

संक्षिप्त उत्तर है: आपके अलावा कोई भी इस प्रश्न का उत्तर नहीं दे सकता है।

लंबा जवाब यह है कि आपके विशिष्ट कार्यभार को बेंचमार्किंग कुछ ऐसा है जिसे आपको स्वयं करने की आवश्यकता है, क्योंकि यह थोड़ा पूछने जैसा है "स्ट्रिंग का एक टुकड़ा कितना लंबा है?"।

एक साधारण एक-पृष्ठ स्थैतिक वेबसाइट को एक पेंटियम प्रो 150 पर होस्ट किया जा सकता है और अभी भी हर दिन हजारों छापों की सेवा कर सकता है।

बुनियादी दृष्टिकोण आप इस सवाल का जवाब देने की जरूरत है की कोशिश यह और देखो क्या होता। बहुत सारे उपकरण हैं जो आप कृत्रिम रूप से अपने सिस्टम को दबाव में डालकर देख सकते हैं कि वह कहाँ बकल है।

इसका संक्षिप्त विवरण यह है:

  • अपने परिदृश्य को जगह दें
  • निगरानी जोड़ें
  • ट्रैफ़िक जोड़ें
  • परिणामों का मूल्यांकन करें
  • परिणामों के आधार पर उपाय
  • कुल्ला, यथोचित रूप से खुश होने तक दोहराएं

अपने परिदृश्य को जगह दें

मूल रूप से, कुछ लोड का परीक्षण करने के लिए, आपको परीक्षण के लिए कुछ चाहिए। के खिलाफ परीक्षण करने के लिए एक वातावरण सेट करें। यदि संभव हो तो यह आपके उत्पादन हार्डवेयर के लिए काफी करीबी अनुमान होना चाहिए, अन्यथा आप अपने डेटा को एक्सट्रपलेशन करने से बचे रहेंगे।

अपने सर्वर, खाते, वेबसाइट, बैंडविड्थ, आदि सेट करें, भले ही आप वीएम पर ऐसा करते हैं जो ठीक है जब तक आप अपने परिणामों को स्केल करने के लिए तैयार हैं।

इसलिए, मैं एक मिड-संचालित वर्चुअल मशीन (दो कोर, 512 एमबी रैम, 4 जीबी एचडीडी) स्थापित करने जा रहा हूं और वीएम पर रेड हैट लिनक्स केhaproxy अंदर अपना पसंदीदा लोड बैलेंसर स्थापित कर रहा हूं ।

मैं लोड बैलेंसर के पीछे दो वेब सर्वर भी रखने जा रहा हूं जो मैं लोड बैलेंसर का परीक्षण करने के लिए उपयोग करने जा रहा हूं। ये दो वेब सर्वर मेरे लाइव सिस्टम के लिए समान रूप से स्थापित हैं।

निगरानी जोड़ें

आपको मॉनिटर करने के लिए कुछ मैट्रिक्स की आवश्यकता होगी, इसलिए मैं मापने जा रहा हूं कि मेरे वेब सर्वर के माध्यम से कितने अनुरोध प्राप्त होते हैं, और उपयोगकर्ताओं द्वारा दो सेकंड से अधिक की प्रतिक्रिया समय प्राप्त करने से पहले मैं कितने अनुरोधों को प्रति सेकंड के माध्यम से निचोड़ सकता हूं।

मैं यह सुनिश्चित करने के लिए RAM, CPU और डिस्क उपयोग की निगरानी करने जा रहा हूं haproxyताकि यह सुनिश्चित किया जा सके कि लोड बैलेंसर कनेक्शन को संभाल सकता है।

यह कैसे करना है यह आपके प्लेटफार्मों पर बहुत कुछ निर्भर करता है और इस उत्तर के दायरे से बाहर है। आपको वेब सर्वर लॉग फ़ाइलों की समीक्षा करने, प्रदर्शन काउंटर शुरू करने या अपने तनाव परीक्षण उपकरण की रिपोर्टिंग क्षमता पर भरोसा करने की आवश्यकता हो सकती है।

कुछ चीजें जिन्हें आप हमेशा मॉनिटर करना चाहते हैं:

  • सि पि यु का उपयोग
  • राम का उपयोग
  • डिस्क उपयोग
  • डिस्क विलंबता
  • नेटवर्क का उपयोग

आप विशेष रूप से परीक्षण कर रहे हैं, उसके आधार पर आप एसक्यूएल गतिरोधों को भी देख सकते हैं।

ट्रैफ़िक जोड़ें

यह वह जगह है जहाँ चीजें मज़ेदार होती हैं। अब आपको एक परीक्षण लोड अनुकरण करने की आवश्यकता है। ऐसे बहुत सारे उपकरण हैं जो यह कर सकते हैं, विन्यास योग्य विकल्पों के साथ:

एक संख्या, कोई भी संख्या चुनें। मान लीजिए कि आप यह देखने जा रहे हैं कि सिस्टम एक मिनट में 10,000 हिट्स कैसे देता है। इससे कोई फर्क नहीं पड़ता कि आप किस नंबर को चुनते हैं क्योंकि आप इस चरण को कई बार दोहराने जा रहे हैं, उस संख्या को ऊपर या नीचे समायोजित करके देखें कि सिस्टम कैसे प्रतिक्रिया करता है।

आदर्श रूप से, आपको इन 10,000 अनुरोधों को कई लोड परीक्षण ग्राहकों / नोड्स पर वितरित करना चाहिए ताकि एक भी ग्राहक अनुरोधों की अड़चन न बने। उदाहरण के लिए, JMeter की रिमोट टेस्टिंग एक केंद्रीय इंटरफ़ेस प्रदान करती है, जिसमें एक नियंत्रित Jmeter मशीन से कई क्लाइंट लॉन्च किए जाते हैं।

मैजिक गो बटन दबाएं और अपने वेब सर्वर को पिघल कर दुर्घटनाग्रस्त होते देखें।

परिणामों का मूल्यांकन करें

इसलिए, अब आपको चरण 2 में एकत्र किए गए अपने मैट्रिक्स पर वापस जाने की आवश्यकता है। आप देखते हैं कि 10,000 समवर्ती कनेक्शनों के साथ, आपका haproxyबॉक्स मुश्किल से एक पसीना तोड़ रहा है, लेकिन दो वेब सर्वरों के साथ प्रतिक्रिया समय पांच सेकंड से अधिक का स्पर्श है। यह अच्छा नहीं है - याद रखें, आपकी प्रतिक्रिया का समय दो सेकंड का लक्ष्य है। इसलिए, हमें कुछ बदलाव करने की जरूरत है।

remediate

अब, आपको अपनी वेबसाइट को दो बार से अधिक गति देने की आवश्यकता है। तो आप जानते हैं कि आपको या तो स्केल अप करने की जरूरत है, या स्केल आउट करने की।

बड़े पैमाने पर, बड़े वेब सर्वर, अधिक रैम, तेज डिस्क प्राप्त करें।

स्केल करने के लिए, अधिक सर्वर प्राप्त करें।

यह निर्णय लेने के लिए, चरण 2 और परीक्षण से अपने मैट्रिक्स का उपयोग करें। उदाहरण के लिए, यदि आपने देखा कि परीक्षण के दौरान डिस्क विलंबता बड़े पैमाने पर थी, तो आप जानते हैं कि आपको बड़े पैमाने पर और तेज़ हार्ड ड्राइव प्राप्त करने की आवश्यकता है।

यदि आपने देखा कि परीक्षण के दौरान प्रोसेसर 100% पर बैठा था, तो शायद आपको मौजूदा सर्वर पर दबाव को कम करने के लिए अतिरिक्त वेब सर्वर जोड़ने की आवश्यकता होगी।

कोई सामान्य सही या गलत उत्तर नहीं है, केवल वही है जो आपके लिए सही है। स्केलिंग की कोशिश करो, और अगर वह काम नहीं करता है, तो इसके बजाय बाहर पैमाने पर। या नहीं, यह आपके ऊपर है और बॉक्स के बाहर कुछ सोच रहा है।

मान लीजिए कि हम बड़े पैमाने पर जा रहे हैं। इसलिए मैं अपने दो वेब सर्वर (वे VMs) को क्लोन करने का फैसला करता हूं और अब मेरे पास चार वेब सर्वर हैं।

कुल्ला, दोहराना

चरण 3 से फिर से शुरू करें। यदि आप पाते हैं कि चीजें आपकी अपेक्षा के अनुसार नहीं चल रही हैं (उदाहरण के लिए, हमने वेब सर्वरों को दोगुना कर दिया है, लेकिन रिपीट टाइम अभी भी दो सेकंड से अधिक है), तो अन्य बाधाओं पर गौर करें। उदाहरण के लिए, आपने वेब सर्वर को दोगुना कर दिया है, लेकिन फिर भी एक भद्दा डेटाबेस सर्वर है। या, आपने अधिक VMs का क्लोन बनाया है, लेकिन क्योंकि वे एक ही भौतिक होस्ट पर हैं, तो आपने केवल सर्वर संसाधनों के लिए उच्च विवाद प्राप्त किया है।

फिर आप सिस्टम के अन्य भागों का परीक्षण करने के लिए इस प्रक्रिया का उपयोग कर सकते हैं। लोड बैलेंसर को हिट करने के बजाय, वेब सर्वर या SQL सर्वर को SQL बेंचमार्किंग टूल का उपयोग करके सीधे हिट करने का प्रयास करें ।


1
यह लोड परीक्षण के लिए उत्कृष्ट है, लेकिन क्षमता योजना के बारे में बहुत कम कहता है। Google के स्केलेबल आर्किटेक्चर के बारे में कौन लिख सकता है, जिसकी कल्पना जल्दी की गई थी, या कम और अधिक महंगे बक्से का उपयोग करने वाले विकल्प।
रेले

10

क्षमता योजना माप से शुरू होती है, इस मामले में प्रतिक्रिया समय बनाम लोड। एक बार जब आप उस डिग्री को जान लेते हैं जो प्रोग्राम लोड के साथ धीमा हो जाता है, जो कि रैखिक कार्य नहीं है, तो आप एक प्रतिक्रिया समय लक्ष्य का चयन कर सकते हैं, और फिर खोज सकते हैं कि लोड की दी गई राशि के लिए उस लक्ष्य को पूरा करने में क्या संसाधन लगेंगे।

प्रदर्शन माप हमेशा समय इकाइयों के साथ किया जाता है , जैसा कि

  • वे वही हैं जो उपयोगकर्ता परवाह करते हैं
  • उन्हें ऊपर-नीचे किया जा सकता है

% CPU और IOPS जैसी चीजें सिस्टम-विशिष्ट हैं, इसलिए आप उनका उपयोग केवल तब करते हैं जब आपने सिस्टम की योजना बनाई है और इसे पूर्व-उत्पादन में मापा है, जिस चीज की आप परवाह करते हैं, उसके लिए "सरोगेट" के रूप में कार्य करने के लिए।


8

क्षमता योजना एक परेशान जानवर है। यह कला के रूप में ज्यादा विज्ञान है (यदि निश्चित रूप से एक अंधेरा है)।

आपका सबसे अच्छा मामला यह है कि आप अच्छी तरह से अवगत निर्णय लेते हैं और भाग्य / भाग्य आपको अपनी मान्यताओं को पूरा करने के लिए अनुकूल बनाता है । यदि आपकी क्षमता को वास्तविकता से मेल खाने वाली धारणाओं की आवश्यकता है, तो आप एक रहस्यमय योगी की तरह दिखते हैं। दुर्भाग्य से, यदि आपकी धारणाएं वास्तविकता से अधिक हैं, तो आप ओवरशोट और ओवरसैप्ड दिखाई देंगे। अधिक दुर्भाग्य से, यदि आपकी धारणाएं अंतिम वास्तविकता से नीचे हैं (या अन्यथा गलत हैं), तो आपको उस क्षमता की कमी होगी जिसकी आपको आवश्यकता है, और अपने कराहने के बुनियादी ढांचे की विफलताओं को कम करने के लिए हाथापाई करना होगा, जिससे आप अपनी योग्यता की तरह दिखते हैं।

कोई दबाव नहीं...

दुर्भाग्य से, क्षमता नियोजन की काली कला एक सर्वर दोष उत्तर में यथोचित रूप से आसुत हो सकती है; वास्तव में, यह पुस्तकों के योग्य विषय है।

सौभाग्य से, ऐसी एक पुस्तक है: " द आर्ट ऑफ़ कैपेसिटी प्लानिंग "


5

मार्क हेंडरसन की पोस्ट पर विस्तार करने के लिए, मैं यह अपाचे के लिए विशिष्ट लिख रहा हूं। उन्होंने जो कहा, उसे दोहराने के लिए, "संक्षिप्त उत्तर है: इस प्रश्न का उत्तर आपके अलावा कोई नहीं दे सकता है।" इस उत्तर के पाठ को द्रुपल वेबसाइट के प्रदर्शन के बारे में इसी तरह के प्रश्न के मेरे उत्तर से बहुत अधिक उधार लिया गया है ।

Mod_Prefork के साथ अपाचे को कॉन्फ़िगर करना

अपाचे यकीनन सबसे लोकप्रिय वेब सर्वर में से एक है (यदि नहीं) उपलब्ध है। यह खुला स्रोत है और अभी भी सक्रिय रूप से बनाए रखा गया है। आप इसे लिनक्स और विंडोज दोनों ऑपरेटिंग सिस्टम पर चला सकते हैं, लेकिन लिनक्स / यूनिक्स दुनिया में अधिक लोकप्रिय है।

आपको कभी भी अपाचे विन्यास का उपयोग नहीं करना चाहिए । आपको हमेशा अपाचे को अपनी साइट पर ट्यून करना होगा। CentOS पर मुख्य Apache कॉन्फ़िगरेशन फ़ाइल में स्थित है /etc/httpd/conf/httpd.conf, और Ubuntu सिस्टम पर मुख्य Apache कॉन्फ़िगरेशन फ़ाइल आमतौर पर स्थित है /etc/apache2/apache2.confवर्चुअल होस्ट जैसी चीजों के लिए अतिरिक्त कॉन्फिग फाइल का इस्तेमाल किया जाता है ।

बहुत सारे सॉफ्टवेयर की तरह, अपाचे को एक विशिष्ट वेबसाइट की जरूरतों के अनुसार लचीला और अनुकूलित करने के लिए बनाया गया है। विभिन्न मल्टी-प्रोसेसिंग मॉड्यूल हैं जिन्हें अपाचे को नेटवर्क पोर्ट से बाँधने और अनुरोधों को स्वीकार करने और संसाधित करने के लिए उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है।

डिफ़ॉल्ट Apache इंस्टॉलेशन पर ज्यादातर समय जो CentOS और Ubuntu सर्वर के साथ आता है, MPM " mod_prefork " का उपयोग किया जाता है। मान लें कि आप mod_prefork का उपयोग कर रहे हैं (यदि आप निश्चित नहीं हैं, तो यह अधिक संभावना है, लेकिन केवल आप ही यह निर्धारित कर सकते हैं) यहां मूल बातें हैं कि इसे कैसे कॉन्फ़िगर किया जाए:

  • आप चाहते हैं कि अधिकतम मात्रा में मेमोरी का उपयोग करें।
  • भारी अपनी वेबसाइट का परीक्षण करें, और निर्धारित करें कि प्रत्येक अपाचे प्रक्रिया कितनी मेमोरी का उपयोग करती है (शीर्ष का उपयोग करके)।
  • ऊपर की अपाचे प्रक्रिया को लें जो सबसे अधिक मेमोरी का उपयोग करता है, अच्छे उपाय के लिए इसमें थोड़ा सा जोड़ें, और फिर इस नए नंबर से अपना पहला नंबर (अधिकतम मात्रा में मेमोरी जिसे आप अपाचे का उपयोग करना चाहते हैं) को विभाजित करें।
  • आपके द्वारा प्राप्त किया जाने वाला नंबर आपका MaxClientsऔर ServerLimitचर होना चाहिए ।

यह निश्चित रूप से अंत-सभी जवाब नहीं है। अपने अपाचे सर्वर को ट्यूनिंग में समय लगता है और बस सही होने के लिए अनुभव की आवश्यकता होती है।


1
पूरी तरह से शीर्ष पर आधारित मेमोरी का उपयोग थोड़ा त्रुटिपूर्ण है, कृपया fe stackoverflow.com/questions/7880784/ पर जांच करें। इसके अलावा आप मेमोरी उपयोग के लिए शीर्ष के बजाय अजगर स्क्रिप्ट "ps_mem.py" का उपयोग करना चाहते हैं, या यहां तक ​​कि मानों से जुड़े निर्देशों का उपयोग कर सकते हैं के तहत / खरीद के लिए प्रक्रिया
डेनिस नोल्टे

1
आपके द्वारा जोड़े गए नोट के कारण पूरा जवाब देने योग्य है: "आपको कभी भी आउट-ऑफ-द-बॉक्स अपाचे कॉन्फ़िगरेशन का उपयोग नहीं करना चाहिए"। हम कभी भी इस पर जोर नहीं दे सकते।
एज़रा-एस

0

इसके अलावा, मैं उन वास्तुकारों और इंजीनियरों से बात करने का सुझाव दूंगा जिन्होंने अड़चनों, असफलता के एकल बिंदुओं और लाइसेंसिंग सीमाओं की पहचान करने के लिए अनुप्रयोगों को डिज़ाइन / निर्माण किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.