मैं किस अपाचे MPM का उपयोग कैसे करूं?


261

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

मैं अपाचे द्वारा पेश किए गए विभिन्न एमपीएम - 'कार्यकर्ता', 'इवेंट', 'प्रीफॉर्क', आदि के बीच थोड़ा भ्रमित हूं।

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


4
यदि आप mod_php का समर्थन कर रहे हैं, तो आप प्रीफ़ॉर्क कर रहे हैं।
Zoredache

6
@Zoredache:? उसने कभी भी PHP का उल्लेख नहीं किया, और यहां तक ​​कि अगर उसके पास भी था, तो mod_php केवल ईवेंट को समाप्त करेगा। या आप अभी भी 8 साल पहले आरएल द्वारा की गई टिप्पणी पर अड़े हैं? अंतिम थ्रेड PHP में लड़ी पिरोया अपाचे से संबंधित 2005 में था।
सिम्बियन

2
क्षमा करें - इसे बंद करने के लिए वोट मिला - यहाँ तक कि एक प्रश्न का उत्तर बहुत व्यापक है।
सिम्बियन

1
पुन: PHP और थ्रेड्स - PHP का कोर इन दिनों थ्रेडसेफ़ है, लेकिन बहुत सारे अन्य सामान जो आप लोगों को संकलन में नहीं मिलेंगे। मुझे हाल ही में पिछले साल के रूप में काट लिया गया है, इसलिए यह बहुत "प्रोडक्शन" है (बड़े पैमाने पर) उत्पादन पर भरोसा करने से पहले "स्थिति अभी भी ...
voretaq7

आपके द्वारा उपयोग किए जा रहे OS के आधार पर, आपके पास उन सभी विकल्पों के मानक मानक भी उपलब्ध नहीं हो सकते हैं।
जॉन गार्डनियर्स 3

जवाबों:


415

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


prefork

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

यह संभव नहीं है कि जब तक कि आपको थ्रेड सुरक्षित न हो, एक मॉड्यूल की आवश्यकता नहीं है।

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

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

worker

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

उपयोग करें यदि: आप Apache 2.2, या 2.4 पर हैं और आप प्राथमिक रूप से SSL चला रहे हैं।

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

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

event

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

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

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

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


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


3
-1: IME, कार्यकर्ता केवल 15% के क्षेत्र में httpd पदचिह्न के आकार को कम कर देता है (IIRC Linux की रिपोर्ट RSS में जो कि पूर्व-कांटा दिखता है जैसे कि यह बहुत अधिक मेमोरी का उपयोग करता है)। एक प्रक्रिया और एक NPTL थ्रेड के लिए कर्नेल पदचिह्न के बीच नगण्य अंतर है। यह पृथ्वी-बिखरने का एक लंबा रास्ता है। मुझे समझ में नहीं आता है कि आप ऐसा क्यों सोचते हैं कि थ्रेड का आवंटन और आवंटन करना, शेड्यूलिंग (पूर्व-forked) प्रक्रिया की प्रतीक्षा करने की तुलना में शेड्यूलिंग शब्दों में अधिक कुशल है। न ही आपको क्या लगता है कि SSL पूरे शी-बैंग पर है।
सिम्बियन

9
@ symcbean तो आप कह रहे हैं कि 15% RAM का उपयोग महत्वपूर्ण नहीं है? यह ठीक है, लेकिन मेरी राय अन्यथा होगी। सम्‍मिलन प्रदर्शन के दावे मेरे अपने नहीं हैं। देखें यहाँ । और एसएसएल अंतर स्पष्ट रूप से बाहर वर्तनी है घटना एम पी एम के लिए दस्तावेज में: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.
शेन झुंझलाना

3
@ShaneMadden `और जबकि यह वास्तव में अभी भी ऊपर नहीं है nginx या lighttpd की पसंद के साथ संसाधन उपयोग या पैमाने के संदर्भ में 'मैं उन दोनों प्रणालियों के लिए अपाचे फर्श था।
केली एल्टन

@ एसएसएन और ईवेंट एमपीएम के साथ समस्या के संबंध में शेनडेनडेन: क्या आप जानते हैं कि अगर नग्नेक्स इसे अपाचे से बेहतर तरीके से संभालता है?
DASKAjA

ऐसा लगता है कि यदि आप mpm मॉड्यूल के बारे में जाने बिना Apache 2.4 को संकलित करते हैं तो यह इवेंट mpm मॉड्यूल नाम के मॉड्यूल के साथ आता है और यह mod_php7 के साथ काम करता है (अभी मैं mpm पर शोध कर रहा हूं क्योंकि apache2.4, mysql कनेक्शन सीमा से अधिक है। Apache 2.2 एक ही mysql सर्वर के साथ है) नहीं)
बायोहजार्ड

8

यहाँ यह कैसे gifs के साथ काम करता है की एक अच्छी व्याख्या है:

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

संक्षेप में: यदि आप 2.4 पर हैं और आपको रिवर्स प्रॉक्सी (डिस्पैचर) के रूप में httpd की आवश्यकता है, तो आपकी पसंद एक इवेंट MPM है


भले ही हम एसएसएल का उपयोग करें? मैं एक गैर एसएसएल वेबसाइट पर एक प्रॉक्सी और एसएसएल एनबलर के रूप में अपाचे का उपयोग करता हूं।
बोकाँ

@bokan हाँ की तरह दिखता है, यह सबसे अच्छा है, लेकिन वैसे भी समीपता एसएसएल के लिए सीमित है
यूरा

वाह ~ ब्लॉग पोस्ट स्वीकृत उत्तर की तुलना में बेहतर है, और gif अद्भुत हैं! Thankssss। आपने मेरा दिन बचाया।
रिक

6

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

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

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


5

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

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

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