Nginx अनुरोधों / सेकंड को अधिकतम करने के लिए युक्तियाँ?


15

मैं एक एनालिटिक्स पैकेज बना रहा हूं, और प्रोजेक्ट आवश्यकताओं को बताता हूं कि मुझे प्रति दिन 1 बिलियन हिट्स का समर्थन करने की आवश्यकता है। हां, "अरब"। दूसरे शब्दों में, कोई भी 12,000 हिट प्रति सेकंड से कम नहीं है, और अधिमानतः कुछ कमरे में फटने के लिए। मुझे पता है कि मुझे इसके लिए कई सर्वरों की आवश्यकता होगी, लेकिन मैं "इससे अधिक हार्डवेयर फेंकने" से पहले प्रत्येक नोड से अधिकतम प्रदर्शन प्राप्त करने की कोशिश कर रहा हूं।

अभी, मेरे पास हिट्स-ट्रैकिंग भाग पूरा है, और अच्छी तरह से अनुकूलित है। मैं बहुत ही सीधे Redis (बाद में Hadoop के साथ प्रसंस्करण के लिए) में अनुरोधों को बचाने के लिए। आवेदन प्रवेश द्वार के लिए एक अंगरखा के साथ पायथन / Django है।

मेरा 2GB Ubuntu 10.04 Rackspace सर्वर (उत्पादन मशीन नहीं) प्रति सेकंड लगभग 1200 स्टैटिक फाइलें (एक ही स्थिर संपत्ति के खिलाफ अपाचे एबी का उपयोग करके बेंचमार्क किया गया) सेवा कर सकता है। तुलना करने के लिए, यदि मैं अपने ट्रैकिंग लिंक के साथ स्टेटिक फाइल लिंक को स्वैप करता हूं, तो मुझे अभी भी प्रति सेकंड लगभग 600 अनुरोध मिलते हैं - मुझे लगता है कि इसका मतलब है कि मेरा ट्रैकर अच्छी तरह से अनुकूलित है, क्योंकि यह एक ही स्थिर संपत्ति की तुलना में केवल 2 धीमा है। बार-बार।

हालांकि, जब मैं लाखों हिट के साथ बेंचमार्क करता हूं, तो मैं कुछ चीजों को नोटिस करता हूं -

  1. कोई डिस्क उपयोग नहीं - यह अपेक्षित है, क्योंकि मैंने सभी नग्नेक्स लॉग्स को बंद कर दिया है, और मेरा कस्टम कोड कुछ भी नहीं करता है, लेकिन रेडिस के अनुरोध विवरण को बचा सकता है।
  2. गैर-स्थिर मेमोरी उपयोग - संभवतः रेडिस की मेमोरी के प्रबंधन के कारण, मेरी मेमोरी का उपयोग धीरे-धीरे ऊपर चढ़ जाएगा और फिर वापस नीचे गिर जाएगा, लेकिन यह कभी भी मेरी अड़चन नहीं रहा।
  3. सिस्टम लोड लगभग 2-4 हो जाता है, सिस्टम अभी भी मेरे सबसे भारी बेंचमार्क के दौरान उत्तरदायी है, और मैं अभी भी मैन्युअल रूप से देख सकता हूँ http://mysite.com/tracking/pixel थोड़ा दृश्यमान देरी के साथ जबकि मेरा (अन्य) सर्वर प्रति 600 अनुरोध करता है दूसरा।
  4. यदि मैं एक छोटा परीक्षण चलाता हूं, तो 50,000 हिट्स (लगभग 2 मी) लगते हैं, मुझे प्रति सेकंड एक स्थिर, विश्वसनीय 600 अनुरोध मिलते हैं। अगर मैं एक लंबी परीक्षा (3.5 मीटर तक की कोशिश की) चलाता हूं, तो मेरा r / s लगभग 250 तक गिर जाता है।

मेरे सवाल --

ए। ऐसा लगता है कि मैं अभी तक इस सर्वर को अधिकतम कर रहा हूँ? क्या 1,200 / s की स्टैटिक फाइल्स nginx के प्रदर्शन की तुलना अन्य लोगों के अनुभव की तुलना में है?

ख। क्या इस तरह के उच्च-मात्रा वाले अनुप्रयोगों के लिए आम नगनेक्स ट्यूनिंग हैं? मेरे पास वर्कर थ्रेड्स 64 पर सेट हैं, और गिंकोर्न वर्कर थ्रेड्स 8 पर सेट हैं, लेकिन इन वैल्यू को ट्वीक करने से यह बहुत मदद या नुकसान नहीं करता है।

सी। क्या कोई ऐसी लिनक्स-स्तरीय सेटिंग्स हैं जो मेरे आने वाले कनेक्शन को सीमित कर सकती हैं?

घ। लंबे समय से चल रहे परीक्षणों पर मेरा प्रदर्शन 250r / s तक कम हो सकता है? फिर, इन परीक्षणों के दौरान मेमोरी अधिकतम नहीं हो रही है, और एचडीडी का उपयोग शून्य है।

अग्रिम धन्यवाद, सभी :)

EDIT यहां मेरा nginx config है - http://pastie.org/1450749 - यह ज्यादातर वैनिला है, जिसमें स्पष्ट वसा छंटनी होती है।


आप एक पोस्ट में कई प्रश्न बना रहे हैं, संशोधित करने पर विचार करें। मैं सिर्फ एक टिप्पणी कर रहा हूं और जवाब नहीं, क्योंकि मैं सभी हिस्सों का जवाब नहीं दे सकता। मुझे लगता है कि आपने पायथन / Django प्रदर्शन पर विचार किया है - यह चरम गति के लिए आदर्श नहीं है। 1200 req / s के बारे में, जो मुझे लगता है कि 1px gif या HTTP 204 प्रतिक्रिया है के लिए बहुत कम लगता है। देखें fx simonhf.wordpress.com/2010/10/02/nginx-versus-sxe-hello-world (24k req / s, जो लोकलहोस्ट पर चल रहा है, लेकिन केवल 1 nginx कार्यकर्ता का उपयोग कर रहा है।)
जेस्पर

गोल्डमाइन टिप्पणी, बहुत बहुत धन्यवाद। मैं पोस्ट के माध्यम से पढ़ने जा रहा हूं और अपने निष्कर्षों के साथ वापस आ रहा हूं; "कई सवाल" सूचक के लिए धन्यवाद!
लिंक्डइन

जवाबों:


8

आप Nginx के कार्यकर्ता_थ्रेड्स का दुरुपयोग कर रहे हैं। कई श्रमिकों को चलाने की बिल्कुल जरूरत नहीं है। आपको सीपीयू के रूप में कई श्रमिकों को चलाना चाहिए और इसे एक दिन कॉल करना चाहिए। यदि आप एक ही सर्वर पर gunicorn चला रहे हैं, तो आपको संभवतः nginx कार्यकर्ताओं को दो तक सीमित करना चाहिए। अन्यथा, आप बस उन सभी प्रक्रियाओं को प्रबंधित करने के लिए आवश्यक सभी संदर्भ स्विचिंग के साथ सीपीयू को फेंकने जा रहे हैं।


1
आह, धन्यवाद। प्रदर्शन 64 के साथ उसी के बारे में लग रहा था जैसा कि 2 के साथ था, लेकिन मुझे पता था कि डब्ल्यूटीएफ नहीं कर रहा था। स्पष्टीकरण देने के लिए धन्यवाद।
लिंक्डइन

क्या आप अपना Nginx कॉन्फ़िगरेशन साझा कर सकते हैं? जब हम नहीं जानते कि हम क्या कर रहे हैं तो ट्यूनिंग युक्तियां प्रदान करना कठिन है।
ब्लूबेन

2

मैंने 5K अनुरोध को स्थैतिक सामग्री के लिए सेकंड के लिए nginx का उपयोग किया है। आप वर्कर_कनेक्ट की संख्या बढ़ा सकते हैं जो वर्तमान में 1024 पर सेट है।

Max_client गणना निम्नानुसार होगी।

मुख्य अनुभाग से कार्यकर्ता_कनेक्ट और कार्यकर्ता_प्रक्रिया आपको अधिकतम मूल्य की गणना करने की अनुमति देता है:

max_clients = कार्यकर्ता_प्रोसेस * कार्यकर्ता_कनेक्ट

एक विपरीत प्रॉक्सी स्थिति में, max_clients बन जाता है

max_clients = worker_processes * worker_connections / 4

http://wiki.nginx.org/EventsModule#worker_connections

एक बार अपने सेटअप की क्षमता को जानने के बाद अधिकतम श्रमिक कनेक्शनों की गणना करना आसान है। कोर की कुल क्षमता / संख्या अधिकतम कार्यकर्ता कनेक्शन है। कुल क्षमता की गणना करने के लिए कई तरीके हैं।

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

यदि आप उपरोक्त विधि आपके लिए काम नहीं करते हैं, तो नीचे दिए गए तरीकों को आज़माएँ। मैं RAM और IO को अनदेखा करते हुए व्यापक धारणाएं बना रहा हूं, वे भी कारक होंगे लेकिन ये आपको शुरुआती बिंदु देंगे और आप वहां से समायोजन कर सकते हैं।

  1. मान लें कि बैंडविड्थ अड़चन है, औसत वस्तु का आकार लें जो nginx सेवारत है और उस के साथ अपने बैंडविड्थ को विभाजित करें और आपको अधिकतम समर्थित qps मिलेगा।

  2. दूसरी धारणा में, सीपीयू अड़चन है। इस स्थिति में अनुरोध समय को मापें और इसे 1 से विभाजित करें और आपके सिस्टम में कोर की संख्या के साथ कई। यह प्रति सेकंड nginx अनुरोध की संख्या को संभाल सकता है।


यदि आप वर्कर_कनेक्ट में वृद्धि कर सकते हैं और किसी दिए गए सर्वर के लिए एक आदर्श सेटिंग क्या है, यह निर्धारित करने के बारे में कैसे जाना चाहिए?
काटो

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