मैं एक एनालिटिक्स पैकेज बना रहा हूं, और प्रोजेक्ट आवश्यकताओं को बताता हूं कि मुझे प्रति दिन 1 बिलियन हिट्स का समर्थन करने की आवश्यकता है। हां, "अरब"। दूसरे शब्दों में, कोई भी 12,000 हिट प्रति सेकंड से कम नहीं है, और अधिमानतः कुछ कमरे में फटने के लिए। मुझे पता है कि मुझे इसके लिए कई सर्वरों की आवश्यकता होगी, लेकिन मैं "इससे अधिक हार्डवेयर फेंकने" से पहले प्रत्येक नोड से अधिकतम प्रदर्शन प्राप्त करने की कोशिश कर रहा हूं।
अभी, मेरे पास हिट्स-ट्रैकिंग भाग पूरा है, और अच्छी तरह से अनुकूलित है। मैं बहुत ही सीधे Redis (बाद में Hadoop के साथ प्रसंस्करण के लिए) में अनुरोधों को बचाने के लिए। आवेदन प्रवेश द्वार के लिए एक अंगरखा के साथ पायथन / Django है।
मेरा 2GB Ubuntu 10.04 Rackspace सर्वर (उत्पादन मशीन नहीं) प्रति सेकंड लगभग 1200 स्टैटिक फाइलें (एक ही स्थिर संपत्ति के खिलाफ अपाचे एबी का उपयोग करके बेंचमार्क किया गया) सेवा कर सकता है। तुलना करने के लिए, यदि मैं अपने ट्रैकिंग लिंक के साथ स्टेटिक फाइल लिंक को स्वैप करता हूं, तो मुझे अभी भी प्रति सेकंड लगभग 600 अनुरोध मिलते हैं - मुझे लगता है कि इसका मतलब है कि मेरा ट्रैकर अच्छी तरह से अनुकूलित है, क्योंकि यह एक ही स्थिर संपत्ति की तुलना में केवल 2 धीमा है। बार-बार।
हालांकि, जब मैं लाखों हिट के साथ बेंचमार्क करता हूं, तो मैं कुछ चीजों को नोटिस करता हूं -
- कोई डिस्क उपयोग नहीं - यह अपेक्षित है, क्योंकि मैंने सभी नग्नेक्स लॉग्स को बंद कर दिया है, और मेरा कस्टम कोड कुछ भी नहीं करता है, लेकिन रेडिस के अनुरोध विवरण को बचा सकता है।
- गैर-स्थिर मेमोरी उपयोग - संभवतः रेडिस की मेमोरी के प्रबंधन के कारण, मेरी मेमोरी का उपयोग धीरे-धीरे ऊपर चढ़ जाएगा और फिर वापस नीचे गिर जाएगा, लेकिन यह कभी भी मेरी अड़चन नहीं रहा।
- सिस्टम लोड लगभग 2-4 हो जाता है, सिस्टम अभी भी मेरे सबसे भारी बेंचमार्क के दौरान उत्तरदायी है, और मैं अभी भी मैन्युअल रूप से देख सकता हूँ http://mysite.com/tracking/pixel थोड़ा दृश्यमान देरी के साथ जबकि मेरा (अन्य) सर्वर प्रति 600 अनुरोध करता है दूसरा।
- यदि मैं एक छोटा परीक्षण चलाता हूं, तो 50,000 हिट्स (लगभग 2 मी) लगते हैं, मुझे प्रति सेकंड एक स्थिर, विश्वसनीय 600 अनुरोध मिलते हैं। अगर मैं एक लंबी परीक्षा (3.5 मीटर तक की कोशिश की) चलाता हूं, तो मेरा r / s लगभग 250 तक गिर जाता है।
मेरे सवाल --
ए। ऐसा लगता है कि मैं अभी तक इस सर्वर को अधिकतम कर रहा हूँ? क्या 1,200 / s की स्टैटिक फाइल्स nginx के प्रदर्शन की तुलना अन्य लोगों के अनुभव की तुलना में है?
ख। क्या इस तरह के उच्च-मात्रा वाले अनुप्रयोगों के लिए आम नगनेक्स ट्यूनिंग हैं? मेरे पास वर्कर थ्रेड्स 64 पर सेट हैं, और गिंकोर्न वर्कर थ्रेड्स 8 पर सेट हैं, लेकिन इन वैल्यू को ट्वीक करने से यह बहुत मदद या नुकसान नहीं करता है।
सी। क्या कोई ऐसी लिनक्स-स्तरीय सेटिंग्स हैं जो मेरे आने वाले कनेक्शन को सीमित कर सकती हैं?
घ। लंबे समय से चल रहे परीक्षणों पर मेरा प्रदर्शन 250r / s तक कम हो सकता है? फिर, इन परीक्षणों के दौरान मेमोरी अधिकतम नहीं हो रही है, और एचडीडी का उपयोग शून्य है।
अग्रिम धन्यवाद, सभी :)
EDIT यहां मेरा nginx config है - http://pastie.org/1450749 - यह ज्यादातर वैनिला है, जिसमें स्पष्ट वसा छंटनी होती है।