चलो व्यावहारिक दृष्टिकोण लेते हैं।
ये सभी सीमाएं ऐसी चीजें हैं जो पिछली शताब्दी में हार्डकोड और डिज़ाइन की गई थीं जब हार्डवेयर धीमा और महंगा था। अब हम 2016 में हैं, एक औसत वॉल-मार्ट टोस्टर डिफ़ॉल्ट मानों की तुलना में अधिक अनुरोधों को संसाधित कर सकता है।
डिफ़ॉल्ट सेटिंग्स वास्तव में खतरनाक हैं। एक वेबसाइट पर सैकड़ों उपयोगकर्ता होना प्रभावशाली नहीं है।
worker_process
संबंधित सेटिंग, जब हम विषय पर हों, तो इसे समझाएं।
nginx लोड बैलेंसर के रूप में:
- HTTP लोड संतुलन के लिए 1 कार्यकर्ता।
- HTTPS लोड संतुलन के लिए प्रति कोर 1 कार्यकर्ता।
webservers के रूप में nginx:
यह एक मुश्किल है।
कुछ एप्लिकेशन / चौखटे / मिडलवेयर (जैसे php-fpm) नगनेक्स के बाहर चलाए जाते हैं। उस स्थिति में, 1 नगनेक्स कार्यकर्ता पर्याप्त है क्योंकि यह आमतौर पर बाहरी अनुप्रयोग है जो भारी प्रसंस्करण और संसाधनों को खा रहा है।
इसके अलावा, कुछ एप्लिकेशन / फ्रेमवर्क / मिडलवेयर केवल एक समय में एक अनुरोध को संसाधित कर सकते हैं और उन्हें अधिभार देना बैकफायरिंग है।
आम तौर पर, 1 कार्यकर्ता हमेशा एक सुरक्षित दांव होता है।
अन्यथा, यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आप प्रति कोर एक कार्यकर्ता रख सकते हैं। मैं उस मार्ग को एक अनुकूलन मानूंगा और उचित बेंचमार्किंग और परीक्षण की सलाह दूंगा।
worker_connections
कनेक्शन की कुल राशि है worker_process * worker_connections
। आधा लोड बैलेंसर मोड में।
अब हम टोस्टर वाले हिस्से में पहुँच रहे हैं। कई गंभीर रूप से कम प्रणाली की सीमाएँ हैं:
- ulimits लिनक्स पर प्रक्रिया के अनुसार 1k अधिकतम खुली हुई फाइलें हैं (कुछ डिस्ट्रो पर 1k सॉफ्ट, 4k हार्ड)
- systemd की सीमाएँ ulimits के समान है।
- nginx डिफ़ॉल्ट प्रति कार्यकर्ता 512 कनेक्शन है।
- अधिक हो सकता है: SELinux, sysctl, पर्यवेक्षक (प्रत्येक डिस्ट्रो + संस्करण थोड़ा अलग है)
1k कार्यकर्ता_संपर्क
सुरक्षित डिफ़ॉल्ट हर जगह 1k है।
यह सबसे आंतरिक और अज्ञात साइटों से कहीं अधिक होने के लिए पर्याप्त उच्च है जो कभी भी मुठभेड़ करेगा। यह किसी भी अन्य सिस्टम सीमाओं को हिट नहीं करने के लिए पर्याप्त है।
10k कार्यकर्ता_संपर्क
हजारों क्लाइंट्स होना बहुत आम बात है, खासकर पब्लिक वेबसाइट के लिए। मैंने उन वेबसाइटों की मात्रा गिनना बंद कर दिया है जिन्हें मैंने देखा है क्योंकि कम चूक के कारण मैं नीचे चला गया हूं।
उत्पादन के लिए न्यूनतम स्वीकार्य 10k है। इसे अनुमति देने के लिए संबंधित सिस्टम सीमा बढ़ाई जानी चाहिए।
बहुत अधिक सीमा जैसी कोई चीज नहीं है (यदि उपयोगकर्ता नहीं हैं तो एक सीमा का कोई प्रभाव नहीं पड़ता है)। हालाँकि बहुत कम सीमा एक बहुत ही वास्तविक चीज़ है जिसके परिणामस्वरूप अस्वीकृत उपयोगकर्ता और एक मृत साइट है।
10k से अधिक
10k अच्छा और आसान है।
हम एक मनमाने 1000kk सीमाएँ निर्धारित कर सकते हैं (यह सब के बाद केवल एक सीमा है) लेकिन यह बहुत व्यावहारिक अर्थ नहीं रखता है, हम कभी भी उस यातायात को प्राप्त नहीं कर सकते हैं और इसे वैसे भी नहीं ले सकते हैं।
चलो एक उचित सेटिंग के रूप में 10k से चिपके रहते हैं। जो सेवाएं (और वास्तव में कर सकते हैं) के लिए विशेष ट्यूनिंग और बेंचमार्किंग की आवश्यकता होगी।
विशेष परिदृश्य: उन्नत उपयोग
कभी-कभी, हम जानते हैं कि सर्वर में बहुत अधिक संसाधन नहीं हैं और हम स्पाइक्स से अपेक्षा करते हैं कि हम इसके बारे में बहुत कुछ नहीं कर सकते। हम इसके बजाय उपयोगकर्ताओं को प्रयास करने से मना करेंगे। उस स्थिति में, एक उचित कनेक्शन सीमा डालें और अच्छी त्रुटि संदेश और हैंडलिंग कॉन्फ़िगर करें।
कभी-कभी, बैकेंड सर्वर अच्छा और अच्छा काम कर रहे हैं, लेकिन केवल कुछ लोड तक , कुछ भी अधिक और सब कुछ जल्दी से दक्षिण में चला जाता है। हम सर्वर क्रैश होने की बजाय धीमा कर देंगे। उस स्थिति में, सख्त सीमाओं के साथ कतारबद्ध कॉन्फ़िगर करें, नग्नेक्स बफर को सभी गर्मी दें, जबकि अनुरोधों को एक कैप्ड गति से सूखा जा रहा है।