2011-05-27 16 views
6

मैं एक आवेदन के आर्किटेक्चर पर निर्णय ले रहा हूं जहां तेज प्रतिक्रिया के लिए "एचटीपी KeepAlive" और "लंबे मतदान" का उपयोग किया जाएगा। क्या PHP के लिए कुछ भी है जो समस्या को हल करता है जो टोरनाडो c10k के लिए करता है?यदि मैं PHP का उपयोग कर रहा हूं तो मैं c10k समस्या का समाधान कैसे कर सकता हूं?

मैं nginx + PHP-FPM का उपयोग करने के बारे में सोच रहा था। लेकिन फिर, 1000 सक्रिय कनेक्शन के लिए, 1000 PHP-FPM प्रक्रियाएं नहीं होंगी?

तब मुझे लगता है कि हमें एक ही समस्या होगी जिसमें अपाचे के कई स्थायी कनेक्शन हैं। यही है ना

संपादित करें: मैं समझता हूं कि अगर मैं सिर्फ HTTP KeepAlive चाहता हूं तो nginx पर्याप्त होगा। लेकिन क्या होगा यदि मैं भी टर्ननाडो जैसे लंबे मतदान करना चाहता हूं? क्या PHP में कुछ भी समान है?

उत्तर

0

मुझे नहीं लगता कि आपका क्या मतलब है। c10k वेब-सर्वर (अपाचे, nginx आदि) से संबंधित है PHP के लिए नहीं।

आप nginx (में, लदान और एक परिभाषित PHP स्क्रिप्ट चल के रूप में) आप इसे

+2

की सिफारिश नहीं कर सकते हैं nginx अत्यधिक पर्याप्त – m4rc

+2

पीएचपी सर्वर PHP पृष्ठों में सक्षम होने के लिए सर्वर पर निष्पादित किया जाना है। Nginx केवल स्थिर सामग्री संभाल या किसी अन्य प्रक्रिया के लिए अनुरोध भेजो। – Jonas

6

सक्रिय कनेक्शन के लिए के बारे में चिंता नहीं करनी चाहिए का उपयोग करते हैं, हाँ, वहाँ के रूप में कई पीएचपी प्रक्रियाओं सक्रिय कनेक्शन के रूप में किया जाएगा। लेकिन KeepAlive लगभग निष्क्रिय कनेक्शन है, और Nginx बहुत कम संसाधन उपयोग के साथ निष्क्रिय KeepAlive कनेक्शन को संभालने में बहुत अच्छा है - यहां तक ​​कि उनमें से हजारों के लिए भी।

अपाचे के साथ समस्या यह है कि यह mod_php और mpm_prefork के साथ सामान्य कॉन्फ़िगरेशन में, प्रत्येक कनेक्शन के लिए एक प्रक्रिया की आवश्यकता होती है, भले ही यह केवल एक निष्क्रिय KeepAlive है। इसका मतलब यह है कि वास्तव में अधिकांश अपाचे सर्वर को कनेक्शन में निष्क्रिय होने पर भी PHP प्रक्रिया को स्मृति में रखने की आवश्यकता है, लेकिन यदि आप फास्टसीजीआई के रूप में PHP चलाते हैं तो ऐसा नहीं होता है। यदि आप फास्टसीजीआई के रूप में PHP चलाते हैं और mpm_worker चुनते हैं तो अपाचे बहुत निष्क्रिय कनेक्शन को भी संभाल सकता है जो प्रति कनेक्शन अधिक हल्के थ्रेड बनाएगा, लेकिन यह अभी भी Nginx जितना अच्छा नहीं है।

+2

+1 जानकारीपूर्ण। – Jonas

+0

+1। मैंने लंबी मतदान आवश्यकता के साथ सवाल थोड़ा सा संपादित किया। – Sabya

2

मेरा उत्तर node.js पर एक नज़र डालना होगा, आप 100K सक्रिय कनेक्शन निर्दिष्ट करते हैं, जब तक कि आपके पास सही हार्डवेयर नहीं है, तब तक Node.js को ठीक से संभालना चाहिए।

कनेक्शन बनाते समय नोड नई प्रक्रियाओं को नहीं बढ़ाता है, सॉकेट को क्यूइंग सिस्टम में रखा जाता है लेकिन यह एक ठेठ क्यूइंग सिस्टम नहीं है, जहां 1 कनेक्शन संसाधित होता है और फिर अगला वाला होता है।

Node.js कई कनेक्शनों को संभालने में कुख्यात है और वहां HTTP क्लाइंट लाइब्रेरी स्थानांतरित करने की Keep-Alive शैली पर आधारित है, साथ ही साथ बहुत तेज़ और शक्तिशाली भी है।

मैंने इसे थोड़ा सा उपयोग किया है और मुझे कहना होगा कि यह उपयोग करना बेहद आसान है, यह सुपर फास्ट Google V8 इंजन पर आधारित है जिसका उपयोग क्रोम में जावास्क्रिप्ट के लिए किया जाता है, जिसका अर्थ है कि यह बेहद तेज़ है, आपको वास्तव में देखना चाहिए इस पर और आप देखेंगे कि यह इस तरह की चीज़ के लिए व्यवहार्य है।

संबंधित मुद्दे

 संबंधित मुद्दे