सवाल मैं किस अपाचे एमपीएम का उपयोग करने के लिए चुनूं?


यह है एक कैननिकल प्रश्न सही अपाचे httpd एमपीएम का चयन करने के बारे में।

मैं अपाचे - 'कार्यकर्ता', 'घटना', 'prefork', आदि द्वारा प्रदान किए गए विभिन्न एमपीएम के बीच थोड़ा उलझन में हूं।

उनके बीच प्रमुख अंतर क्या हैं, और मैं कैसे तय कर सकता हूं कि किसी दिए गए परिनियोजन के लिए कौन सा सर्वश्रेष्ठ होगा?


243
2018-04-26 18:40


मूल


यदि आप mod_php का समर्थन कर रहे हैं, तो आप prefork कर रहे हैं। - Zoredache
@ ज़ोरशेड:? उसने PHP का कभी भी उल्लेख नहीं किया, और यहां तक ​​कि अगर उसके पास भी, mod_php केवल ईवेंट को रद्द कर देगा। या फिर भी आप 8 साल पहले आरएल द्वारा की गई एक टिप्पणी से चिपके हुए हैं? थ्रेड किए गए अपाचे से संबंधित PHP में लॉग इन अंतिम बग 2005 में था। - symcbean
क्षमा करें - इसे बंद करने के लिए वोट देना होगा - यहां जवाब देने के लिए बहुत व्यापक प्रश्न है। - symcbean
@ सिमकबीन पुन: PHP और थ्रेड - PHP का कोर इन दिनों थ्रेडसेफ है लेकिन अन्य कई चीजें जिन्हें आप संकलित करने वाले लोगों को मिलेंगे, वह नहीं है। मुझे पिछले साल के रूप में हाल ही में काटा गया है, इसलिए यह उत्पादन में भरोसा करने से पहले "परीक्षण (व्यापक रूप से) बहुत अधिक है" स्थिति अभी भी ... - voretaq7
आपके द्वारा उपयोग किए जा रहे ओएस के आधार पर आपके पास उन सभी विकल्पों को मानक इंस्टॉल के साथ उपलब्ध नहीं हो सकता है। - John Gardeniers


जवाब:


बहुत सारे हैं एमपीएम मॉड्यूल (मल्टी प्रोसेसिंग मॉड्यूल), लेकिन अब तक का सबसे व्यापक रूप से उपयोग किया जाता है (कम से कम * निक्स प्लेटफॉर्म पर) तीन मुख्य हैं: prefork, worker, तथा event। अनिवार्य रूप से, वे अपाचे वेब सर्वर के विकास का प्रतिनिधित्व करते हैं, और विभिन्न तरीकों से सर्वर को लंबे समय तक (सॉफ़्टवेयर शर्तों) इतिहास के समय की कंप्यूटिंग बाधाओं के भीतर HTTP अनुरोधों को संभालने के लिए बनाया गया है।


prefork

mpm_prefork है .. अच्छा .. यह सब कुछ के साथ संगत है। यह अनुरोधों के लिए कई बाल प्रक्रियाओं को दूर करता है, और बच्चे की प्रक्रिया केवल एक ही समय में एक अनुरोध की सेवा करती है। क्योंकि यह वहां बैठे सर्वर की प्रक्रिया है, कार्रवाई के लिए तैयार है, और थ्रेड मार्शलिंग से निपटने की आवश्यकता नहीं है, यह वास्तव में है और तेज अधिक आधुनिक थ्रेडेड एमपीएम की तुलना में जब आप एक समय में केवल एक ही अनुरोध से निपट रहे हों - लेकिन समवर्ती अनुरोधों का सामना करना पड़ता है, क्योंकि सर्वर तक प्रक्रिया मुक्त होने तक उन्हें लाइन में प्रतीक्षा करने के लिए तैयार किया जाता है। इसके अतिरिक्त, prefork बाल प्रक्रियाओं की गिनती में स्केल करने का प्रयास, आप आसानी से कुछ गंभीर रैम चूसना होगा।

संभवत: प्रीफ़र्क का उपयोग करने की सलाह नहीं दी जाती है जब तक कि आपको ऐसे मॉड्यूल की आवश्यकता न हो जो थ्रेड सुरक्षित न हो।

प्रयोग करें अगर: आपको मॉड्यूल की आवश्यकता होती है जो धागे का उपयोग करते समय तोड़ते हैं mod_php। फिर भी, फास्टसीजीआई और उपयोग करने पर विचार करें php-fpm

उपयोग न करें अगर: आपके मॉड्यूल थ्रेडिंग में नहीं टूटेंगे।

worker

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

प्रयोग करें अगर: आप अपाचे 2.2, या 2.4 पर हैं और आप मुख्य रूप से SSL चला रहे हैं।

उपयोग न करें अगर: आप वास्तव में गलत नहीं जा सकते हैं, जब तक आपको संगतता के लिए उपसर्ग की आवश्यकता न हो।

हालांकि, ध्यान दें कि चलने के लिए जुड़े हुए हैं कनेक्शन और नहीं अनुरोध - जिसका मतलब है कि एक जीवित कनेक्शन हमेशा बंद होने तक धागे को पकड़ता रहता है (जो आपके कॉन्फ़िगरेशन के आधार पर लंबे समय तक हो सकता है)। यही कारण है कि हमारे पास है ..

event

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

यहां अपवाद एसएसएल कनेक्शन के साथ है; उस स्थिति में, यह कार्यकर्ता के समान व्यवहार करता है (कनेक्शन बंद होने तक दिए गए धागे को दिए गए कनेक्शन को ग्लूइंग करना)।

प्रयोग करें अगर: आप अपाचे 2.4 पर हैं और थ्रेड की तरह हैं, लेकिन आपको निष्क्रिय कनेक्शन के लिए थ्रेड प्रतीक्षा नहीं करना पसंद है। हर कोई धागे पसंद करता है!

उपयोग न करें अगर: आप अपाचे 2.4 पर नहीं हैं, या आपको संगतता के लिए prefork की आवश्यकता है।


आज की दुनिया में स्लो लोरिस नामक दक्षिण एशिया के हृष्टपुष्ट बंदर, AJAX, और ब्राउज़र जो आपके सर्वर पर 6 टीसीपी कनेक्शन (निश्चित रूप से जीवित रहने के साथ) को मल्टीप्लेक्स करना पसंद करते हैं, आपके सर्वर स्केल और स्केल को अच्छी तरह से बनाने में समेकन एक महत्वपूर्ण कारक है। अपाचे के इतिहास ने इसे इस संबंध में बांध लिया है, और संसाधन संसाधन या पैमाने के संदर्भ में यह वास्तव में अभी भी nginx या lighttpd की पसंद के बराबर नहीं है, यह स्पष्ट है कि विकास टीम एक वेब सर्वर बनाने की दिशा में काम कर रही है जो अभी भी प्रासंगिक है आज के उच्च अनुरोध-समेकन दुनिया में।


396
2018-04-27 02:27



-1: आईएमई, कार्यकर्ता केवल 15% के क्षेत्र में httpd पदचिह्न के आकार को कम करता है (आईआईआरसी लिनक्स आरएसएस में गाय रिपोर्ट करता है जो पूर्व-कांटा दिखता है जैसे कि यह उससे अधिक स्मृति का उपयोग करता है)। एक प्रक्रिया और एनपीटीएल धागे के लिए कर्नेल पदचिह्न के बीच नगण्य अंतर है। यह धरती से टूटने से एक लंबा रास्ता है। मुझे समझ में नहीं आ रहा है कि आप क्यों सोचते हैं कि थ्रेड की आवंटन और आवंटन करना (प्री-फोर्कड) प्रक्रिया की प्रतीक्षा / शेड्यूल करने से शर्तों को शेड्यूल करने में अधिक कुशल है। न ही आपको लगता है कि एसएसएल पूरी तरह से बैंग पर है। - symcbean
@ सिमकबीन तो आप कह रहे हैं कि 15% रैम उपयोग महत्वपूर्ण नहीं है? यह ठीक है, लेकिन मेरी राय अन्यथा होगी। Concurrency प्रदर्शन दावों का अपना नहीं है। देख यहाँ। और एसएसएल अंतर घटना एमपीएम के लिए प्रलेखन में स्पष्ट रूप से वर्तनी है: The improved connection handling does not yet work for certain connection filters, in particular SSL. For SSL connections, this MPM will fall back to the behaviour of the worker MPM and reserve one worker thread per connection. - Shane Madden♦
@ShaneMadden `और संसाधन संसाधन या स्केल के संदर्भ में यह वास्तव में अभी भी nginx या lighttpd की पसंद के बराबर नहीं है, लेकिन मैंने उन दोनों प्रणालियों को अपाचे फर्श किया है। - Kelly Elton
एसएसएल और घटना एमपीएम के साथ समस्या के संबंध में @ShaneMadden: क्या आपको पता है कि nginx apache से यह काफी बेहतर संभालता है? - DASKAjA
ऐसा लगता है कि यदि आप एमपीएम मॉड्यूल के बारे में जानने के बिना अपाचे 2.4 संकलित करते हैं तो यह मॉड्यूल एमपीएम मॉड्यूल नामक मॉड्यूल के साथ आता है और यह mod_php7 के साथ काम करता है (अभी मैं एमपीएम का शोध कर रहा हूं क्योंकि apache2.4 mysql कनेक्शन सीमा से अधिक है जबकि apache 2.2 के साथ apache 2.2 है नहीं) - BioHazard


अधिकतर निर्भर करता है कि आप किस अपाचे मॉड्यूल का उपयोग करना चाहते हैं। मुझे लगता है कि कार्यकर्ता आम तौर पर डिफ़ॉल्ट विकल्प होता है, लेकिन कुछ (पुराने) मॉड्यूल को फोर्किंग और प्रीफर्क पर निर्भर करने की आवश्यकता होती है।

यदि आपके पास कोई प्राथमिकता नहीं है, तो मैं आपको अपने ओएस वितरण से पसंदीदा निर्भरता के साथ जाने की सलाह देता हूं। उदाहरण के लिए उबंटू डिफ़ॉल्ट रूप से अपाचे 2 स्थापित करते समय mpm-worker को स्थापित करेगा।


5
2018-04-26 19:32





यहां gifs के साथ काम करने का एक अच्छा स्पष्टीकरण दिया गया है:

https://www.datadoghq.com/blog/monitoring-apache-web-server-performance/

संक्षेप में: अगर आप पर 2.4 और आपको httpd को एक के रूप में चाहिए रिवर्स प्रॉक्सी (प्रेषक) तो आपकी पसंद एक है कार्यक्रम एमपीएम


5
2018-06-21 13:10





फरवरी 2018 तक, इवेंट एमपीएम के लिए अपाचे 2.4 दस्तावेज बताता है कि अपाचे का उपयोग प्रॉक्सी के रूप में 2.4.24 के बाद से डिजाइन किए गए काम से "बेहतर कनेक्शन हैंडलिंग" रखेगा। देखें सीमाएं अनुभाग।

मुद्दा यह है कि, प्रॉक्सी के रूप में, कार्यकर्ता यह नहीं बता सकता कि प्रतिक्रिया का अंत कहां है, और श्रोता को नियंत्रण वापस करने से पहले पूरी प्रतिक्रिया दिखाई देने तक प्रतीक्षा करने के लिए मजबूर किया जाएगा।

इस कारण से, ऐसा लगता है कि वर्कर मॉडल का उपयोग करना सबसे अच्छा हो सकता है जब अपाचे का उपयोग प्रॉक्सी के रूप में किया जाता है। प्रॉक्सी वातावरण में इवेंट मॉडल के फायदे हैं, लेकिन शायद वहां हैं, यह वास्तव में मुझे स्पष्ट नहीं है।


3
2018-02-14 15:01