womble का जवाब बहुत ही बढ़िया है, भले ही अनुभवहीन को समझने और लागू करने के लिए थोड़ा कठिन हो। मैं कुछ अनुभवजन्य संख्याएँ देना चाहता हूँ, और "सरल सामग्री" बनाम "ई-कॉमर्स" अनुप्रयोग तुलना।
Mod_wsgi के उनके उपयुक्त कॉन्फ़िगरेशन के संबंध में विभिन्न उपयोग के मामलों को सेट करने के आसपास बहुत अधिक सामग्री नहीं है, इसलिए मुझे उम्मीद है कि यहां थोड़ा सा प्रोफ़ेसर का उपयोग करना ठीक है।
ए) सीएमएस साइटें और माइक्रोसाइट्स
हम कई ग्राहक वेबसाइट चलाते हैं, उनमें से ज्यादातर मुख्य रूप से सामग्री साइटें या माइक्रो साइटें हैं जो django CMS की मेजबानी करती हैं, कुछ कस्टम फॉर्म और कभी-कभी सेलेरी निर्धारित पृष्ठभूमि कार्यों के लिए। ये साइटें संसाधनों की भूखी नहीं हैं, उनमें से कई 32 जीबी रैम के साथ एक ही 4 कोर इंटेल एक्सोन पर समानांतर रूप से चलती हैं। यहाँ हम इस प्रकार की साइटों के लिए विन्यास का उपयोग करते हैं:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
मैं एक सर्वर पर लगभग 40 साइटों के बारे में बात कर रहा हूं, उनमें से अधिकांश अपने स्टैगिंग साइट के साथ स्टैंडबाय में चल रहे हैं। 2 प्रक्रियाओं के साथ (डिफ़ॉल्ट रूप से, प्रत्येक पर 15 धागे होते हैं) साइटें अच्छी तरह से बंद हैं, यद्यपि सर्वर संसाधनों को आवंटित करने की उनकी क्षमता में सीमित है। यह सेटअप पर्याप्त क्यों है (CMS) एप्लिकेशन की सरल प्रकृति के साथ उचित ठहराया जा सकता है: कोई भी अनुरोध कभी पूरा होने के लिए एक से अधिक मिलीसेकंड लेने की अपेक्षा नहीं करता है। अपाचे हमेशा आराम से रहेगा, और इसलिए सीपीयू लोड होगा।
बी) ई-कॉमर्स साइटें
हमारे द्वारा की जाने वाली अधिक जटिल साइटें अभी भी कम्प्यूटेशनल रूप से सस्ती स्थानीय संचालन की विशेषता हैं लेकिन बाहरी निर्भरताएं (उदाहरण के लिए बुकिंग डेटा प्रदान करने वाली वेब सेवाएं) जो लेनदेन के समय के मामले में महंगी हैं। बाहरी अनुरोधों के साथ संचालन लंबे समय तक थ्रेड्स पर कब्जा कर लेता है, इसलिए आपको समान उपयोगकर्ताओं की संख्या को पूरा करने के लिए अधिक थ्रेड्स की आवश्यकता होती है (ऊपर से एक साधारण सीएमएस साइट की तुलना में)। इससे भी बदतर, थ्रेड्स कभी-कभी अवरुद्ध होते हैं जब एक बाहरी सेवा तुरंत एक अनुरोध का जवाब नहीं दे सकती है, कभी-कभी कुछ सेकंड के लिए। यह अप्रिय साइड-इफेक्ट को जन्म दे सकता है जो थ्रेड्स एक ही सेवा कतार में अनुरोधों को रखते हैं, जब तक कि सभी उपलब्ध mod_wsgi थ्रेड्स का उपयोग किया जाता है और प्रतीक्षा को अवरुद्ध किया जाता है।
उन परिदृश्यों के लिए हमने 6
बहुत अंतर देखे बिना प्रक्रियाओं का उपयोग करने की कोशिश की है , और हम 12
प्रदर्शन और परिचालन स्थिरता में एक अतुलनीय बढ़ावा देखते हुए समाप्त हुए :
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
150 के साथ कुछ सरल भार परीक्षण, और 250 समानांतर उपयोगकर्ताओं को साइट को अच्छी तरह से उत्तरदायी रहते हुए नियंत्रित किया जाता है (जबकि 2
प्रक्रियाओं के साथ साइट समानांतर में 50 उपयोगकर्ताओं को अनुपयोगी है)। 32 GB रैम के साथ 2 CPU 6 कोर इंटेल Xeon उस लोड के तहत 25% CPU उपयोग से नीचे चलता है, RAM का उपयोग लगभग 25% से कम पर भी स्थिर रहता है। ध्यान दें कि हम केवल एक साइट के लिए एक समर्पित मशीन का उपयोग करते हैं, इसलिए हम उन संसाधनों को चोरी नहीं करेंगे जिनकी अन्य साइटों को आवश्यकता हो सकती है।
निष्कर्ष
उपलब्ध सिस्टम संसाधनों का उपयोग करने या न करने की अनुमति देने के बीच अधिक संख्या में प्रक्रियाओं का उपयोग करना एक व्यापार बंद है। यदि आप "हमले" की स्थिति के तहत एक स्थिर सर्वर सिस्टम (वेबसाइट नहीं!) रखना चाहते हैं तो संख्या कम रखें। यदि आप चाहते हैं कि अपाचे आपको उच्च संख्या चुनने पर सिस्टम संसाधनों (सीपीयू, रैम) का उपयोग करने में मदद करें। ऊपर दिए गए स्वीकृत उत्तर में आप कितनी ऊंची गणना कर सकते हैं और उपलब्ध सीपीयू शक्ति और रैम द्वारा अंततः विवश है।
(पुनश्च: मैं अपाचे की तरह पृष्ठभूमि पढ़ने के लिए अपने तकिए के नीचे modwsgi परियोजना विकी के कॉन्फ़िगरेशनडायरेक्टिव खंड को रखता हूं। अपने अपाचे सर्वर के खुले कनेक्शनों को समझना और उनकी निगरानी करना सुनिश्चित करें ।)