कौन सा स्थापित करें: अपाचे वर्कर या प्रीफ़ॉर्क? प्रत्येक के (dis-) फायदे क्या हैं?


55

प्रीफ़ॉर्क और वर्कर MPM दोनों के विवरणों के आधार पर , ऐसा लगता है कि प्रीफ़ॉर्क प्रकार कुछ पुराना है, लेकिन मैं वास्तव में दो प्रकारों की उचित तुलना नहीं कर सकता।

मैं क्या जानना चाहूंगा:

  • दो संस्करणों के बीच अंतर क्या हैं?
  • प्रत्येक सर्वर प्रकार के (dis-) फायदे क्या हैं?
  • क्या कोई बुनियादी दिशा-निर्देश हैं, जिन पर शर्तों के आधार पर चयन करना है?
  • क्या दोनों के बीच कोई बड़ा प्रदर्शन मतभेद हैं?

जवाबों:


40

जैसा कि डॉक्स कहते हैं, यदि आपको गैर-थ्रेड-सुरक्षित पुस्तकालयों के साथ संगतता के लिए थ्रेडिंग से बचने की आवश्यकता है, तो आपको पूर्ववर्ती एमपीएम का उपयोग करना चाहिए। आमतौर पर, किसी भी गैर-तुच्छ अपाचे मॉड्यूल ( mod_php- या, अधिक सटीक रूप से, एक्सटेंशन और पुस्तकालयों के असंख्य जो इसे जोड़ता है - विहित उदाहरण होने के नाते) में कुछ प्रकार के गैर-थ्रेड-सुरक्षित पुस्तकालय हैं (या गैर-थ्रेड- इसमें सुरक्षित कोड), इसलिए जब तक आप एक सुंदर स्टॉक अपाचे का उपयोग नहीं कर रहे हैं, मैं प्रीफ़ॉर्क एमपीएम के लिए जाऊंगा।


3
जब तक आप PHP चला रहे हों, मैं कार्यकर्ता MPM की सिफारिश कर चुका होता। कार्यकर्ता अपाचे से अनुशंसित एमपीएम है, और बेहतर प्रदर्शन और कम ओवरहेड देता है। यह केवल यह है कि PHP डेवलपर ने थ्रेड-सुरक्षा के बारे में कभी नहीं सुना है जिसे आपको प्रीफ़ॉर्क का उपयोग करने की आवश्यकता है।
डेविड पशले

16
PHP बहुत लंबे समय से थ्रेड सुरक्षित है। वे केवल पूर्व-फ़ॉर्कर्स के उपयोग का सुझाव देते हैं क्योंकि वे नियंत्रित नहीं कर सकते कि अन्य पुस्तकालय क्या करते हैं। अन्य डेवलपर्स के लिए PHP दोषारोपण से बाहर निकलें।
एलिस्टर बुलमैन

3
PHP थ्रेड सुरक्षित हो सकती है (हालाँकि मुझे इसमें संदेह है) लेकिन सभी लाइब्रेरी जो इसे लिंक करती हैं निश्चित रूप से नहीं हैं। यहाँ हम कुछ काफी बड़े PHP अनुप्रयोग चलाते हैं और हर महीने हम प्रीफ़ॉर्क से कार्यकर्ता तक स्विच करने की कोशिश करते हैं, लेकिन हम सीधे भ्रष्ट हो जाते हैं।
अलेक्जांडर इवानिसैविक

5
कम से कम फ़ंक्शन बदलते ईएनवी चर थ्रेड सुरक्षित नहीं होंगे, सेट्लोकल php.net/manual/en/function.setlocale.php उस का एक सामान्य उदाहरण है।
त्रिज्या

4
एक नोट: यदि php-fpmPHPC संलग्न है तो FastCGI के माध्यम से ये समस्याएं लागू नहीं होती हैं । तब कार्यकर्ता एमपीएम ठीक है - तब एफपीएम हर PHP अनुरोध को अपनी प्रक्रिया में चलाएगा जबकि अपाचे थ्रेडेड चला सकता है। PHP-Thread-सुरक्षा समस्या केवल आपको उपयोग करने से रोकती है mod_php, जो Apache प्रक्रिया के अंदर PHP चलाता है।
०५ पर मिच्चु

13

समवर्ती कनेक्शनों की बड़ी संख्या (> 100) की सेवा करते हुए असुरक्षित एक्सटेंशन चलाने का क्लासिक समाधान PHP को fastCGI (mod_fcgid, एक देशी अपाचे मॉड्यूल) पर चलाने के लिए और वर्कर एमपीएम को चलाने वाले अपाचे उदाहरण से प्रॉक्सी डायनेमिक अनुरोधों के लिए है।

यह आपको स्थैतिक और गतिशील सामग्री के मिश्रण की सेवा करते समय स्मृति (4 ~ 8 जीबी) की मामूली राशि के साथ कुछ सौ से 1000 तक के समवर्ती कनेक्शन को सक्षम करने में सक्षम करेगा।

बेशक, आपको अपने समग्र परिनियोजन (मेम्च्च्ड, वार्निश) के हिस्से के रूप में फ्रंट-एंड कैशिंग समाधानों की भी जांच करनी चाहिए।

वैकल्पिक रूप से, अपाचे 2.4 में अपग्रेड करें और इसकी मूल घटना एमपीएम, जो बहुत सुधरे हुए फैशन में संगामिति संभालती है (थ्रेड्स को कनेक्शन पर निकाल दिया जाता है, मतदान के इंतजार में नहीं।)


क्या आप इवेंट mpm टिप्पणी पर विस्तार कर सकते हैं? यह बनाम एमएमपी-कार्यकर्ता कैसे ढेर हो जाता है?
साइरेक्स

जबकि कार्यकर्ता MPM पहले से ही थ्रेड-आधारित था, और इसलिए शुरू करने के लिए बहुत तेज और चलाने के लिए हल्का, इवेंट MPM अब सॉकेट को पोल नहीं करता है - यह गतिविधि पर अधिसूचित हो जाता है; इसलिए, "घटना"।
एडाप्ट करें

तो यह उच्च यातायात (13k / सेकंड) साइटों पर बेहतर काम करना चाहिए?
साइरेक्स

6

प्रश्न पोस्ट किए जाने में लगभग 3 साल हो गए हैं, लेकिन मैं आपको बेहतर प्रदर्शन पाने के लिए PHP का उपयोग करने के बावजूद पूर्व-कांटे के बजाय कार्यकर्ता MPM के साथ जाने की सलाह दूंगा।

अंतर के अनुसार, प्री-फोर्क नॉन-थ्रेडेड है इसलिए सर्वर प्रत्येक क्लाइंट रिक्वेस्ट के लिए एक प्रक्रिया की मांग करता है (यह नए अनुरोधों की प्रत्याशा में प्री-फोर्क्स करता है ताकि फोर्किंग प्रतिक्रिया समय में न खाए)। चूंकि अनुरोध एक अलग प्रक्रिया में सर्वर हैं, इसलिए यह आमतौर पर आपकी मेमोरी और सीपीयू की तुलना में बहुत अधिक है। कार्यकर्ता मल्टी-थ्रेडिंग लाता है जो हल्का होता है और बेहतर मेमोरी उपयोग होता है।


2

यह कुछ ऐसा है जो आप सेवा कर रहे हैं। यदि आप बहुत कम स्थैतिक कनेक्शन कर रहे हैं, तो धागे हल्के और तेज होंगे। यदि आपके पास बस कुछ बड़े ऐप हैं जो लगातार चलते हैं, तो परिपक्वता और स्थिरता के कारण प्रीफ़ॉर्क में बढ़त हो सकती है। क्यों सेट न करें जो आपको चाहिए, एक का परीक्षण करें, एमपीएम मॉड्यूल की अदला-बदली करें, इसे फिर से आज़माएं, देखें कि आपको कौन सा सूट करना बेहतर है?


आप Apache 2.2 में MPM को मनमाने ढंग से "स्वैप" नहीं कर सकते हैं; यह संकलन समय पर सेट किया गया है।
एडाप्टर

आप उपयुक्त या RPM के साथ कर सकते हैं। डेबियन के पास कई अलग-अलग अपाचे 2 पैकेज हैं, आप किस शैली पर निर्भर करते हैं।
ब्रेंडन बायर्ड

1

कि प्रकार और यातायात की जरूरत पर आप होगा। और पहले भी आपको प्रीफ़ॉर्क और कार्यकर्ता के बीच मुख्य अंतर को समझने की आवश्यकता है। आशा है कि नीचे दिए गए लेख से आपको यह पता लगाने में मदद मिलेगी! http://slashroot.in/how-is-nginx-different-from-apache


2
हम सामग्री के लिंक पसंद करते हैं, सामग्री के लिंक नहीं। यदि आप लिंक-टारगेट पर क्या है, का एक सारांश प्रदान कर सकते हैं, तो यह सबसे अच्छा अभ्यास है। लिंक-रोट होता है।
sysadmin1138

1
प्रश्न अपाचे के बारे में था (नाज़िनक्स अपाचे नहीं है) और प्रीफ़ॉर्क या थ्रेड्स (नगनेक्स का न तो उपयोग करता है) के सापेक्ष गुण
सिम्बियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.