سؤال كيف يمكنني اختيار Apache MPM المراد استخدامه؟


هذا ال السؤال الكنسي حول اختيار الحق أباتشي httpd MPM.

أنا مرتبك قليلاً بين مختلف MPMs التي تقدمها Apache - 'worker' ، 'event' ، 'prefork' ، إلخ.

ما هي الاختلافات الرئيسية بينهما ، وكيف يمكنني تحديد أيهما سيكون الأفضل لنشر معين؟


245
2018-04-26 18:40


الأصل


إذا كنت تدعم mod_php ، فأنت تقوم بعمل ما قبل التشغيل. - Zoredache
تضمين التغريدة لم تذكر أبداً PHP ، وحتى لو كانت لديها ، فإن mod_php تستبعد الحدث فقط. أم أنك لا تزال تتشبث بملاحظة قدمتها RL قبل 8 سنوات؟ وكان آخر خطأ تم تسجيله في PHP والمتعلق بـ apache متسلسلًا في عام 2005. - symcbean
عذرا - حصلت على التصويت لإغلاق هذا - هو سؤال واسع جدا الإجابة هنا. - symcbean
symcbean إعادة: PHP والخيوط - PHP هو الأساسية سلفافي هذه الأيام ولكن الكثير من الاشياء الأخرى ستجد الناس تجميع في ليس. لقد عضت مؤخرا مثل العام الماضي ، لذلك هو "اختبار (على نطاق واسع) قبل الاعتماد عليه في الإنتاج" الوضع لا يزال ... - voretaq7
بناءً على نظام التشغيل الذي تستخدمه ، قد لا تتوفر لديك جميع هذه الخيارات مع تثبيت قياسي. - John Gardeniers


الأجوبة:


هناك عدد من وحدات MPM (وحدات المعالجة المتعددة) ، ولكن الأكثر استخدامًا (على الأقل على منصات * nix) هي الأكثر استخدامًا: prefork، workerو event. وبشكل أساسي ، فإنها تمثل تطور خادم الويب Apache ، والطرق المختلفة التي تم بها تصميم الخادم للتعامل مع طلبات HTTP داخل قيود الحوسبة في الوقت عبر تاريخه الطويل (في سياق البرنامج).


prefork

mpm_prefork هو .. حسنا .. إنه متوافق مع كل شيء. تقوم بتدوير عدد من العمليات التابعة لطلبات التقديم ، ولا تقدم عمليات الطفل سوى طلبًا واحدًا في كل مرة. نظرًا لأن عملية الملقمات موجودة هناك ، وهي جاهزة للعمل ، ولا تحتاج إلى التعامل مع تنظيم الصفحات ، فإنها في الواقع بسرعة من أكثر MPMs مترابطة حديثًا عندما تتعامل فقط مع طلب واحد في كل مرة - ولكن الطلبات المتزامنة تعاني ، حيث أنها تجعل الانتظار في طابور حتى تكون عملية الخادم مجانية. بالإضافة إلى ذلك ، محاولة الارتقاء في عدد عمليات الأطفال السابقة للعمر ، ستتمكن بسهولة من امتصاص بعض ذاكرة الوصول العشوائي الخطيرة.

ربما لا ينصح باستخدام التجميع المسبق ما لم تحتاج إلى وحدة غير آمنة.

استخدم إذا: تحتاج إلى وحدات تقطع عند استخدام المواضيع ، مثل mod_php. حتى ذلك الحين ، والنظر في استخدام FastCGI و php-fpm.

لا تستخدم إذا: وحداتك لن تنكسر في التخييط.

worker

mpm_worker يستخدم مؤشر الترابط - وهو مساعدة كبيرة للتوافق. يقوم العامل بتدوير بعض عمليات الطفل ، والتي بدورها تدور حول خيوط الطفل. على غرار ما قبل التشغيل ، يتم الاحتفاظ ببعض الخيوط الاحتياطية ، إذا أمكن ، لخدمة الاتصالات الواردة. هذا الأسلوب هو أكثر لطفا على ذاكرة الوصول العشوائي ، حيث أن عدد الخيط ليس له تأثير مباشر على استخدام الذاكرة مثلما يفعل عدد الخوادم في ما قبل الطباعة. كما أنه يعالج التزامن بسهولة أكبر ، لأن الاتصالات تحتاج فقط إلى انتظار مؤشر ترابط مجاني (وهو متوفر عادةً) بدلاً من خادم احتياطي في ما قبل التشغيل.

استخدم إذا: أنت على Apache 2.2 أو 2.4 وكنت تعمل أساسًا SSL.

لا تستخدم إذا: لا يمكنك فعلًا الخطأ ، إلا إذا كنت بحاجة إلى التوافق المسبق من أجل التوافق.

ومع ذلك ، لاحظ أن يتم إرفاق مع معالج روابط و لا طلبات - مما يعني أن اتصالًا مستمرًا يحتفظ دائمًا بمؤشر ترابط حتى يتم إغلاقه (يمكن أن يكون وقتًا طويلًا ، اعتمادًا على التكوين الخاص بك). ولهذا السبب لدينا ..

event

mpm_event يشبه إلى حد بعيد العامل ، من الناحية الهيكلية ؛ تم نقلها من حالة "تجريبية" إلى "مستقرة" في Apache 2.4. الاختلاف الكبير هو أنه يستخدم مؤشر ترابط مخصص للتعامل مع الاتصالات المحافظة على الحياة ، وتسلم الطلبات إلى أسفل إلى خيوط الطفل فقط عندما يكون قد تم بالفعل تقديم طلب (السماح لتلك الخيوط الحرة النسخ الاحتياطي مباشرة بعد اكتمال الطلب). يعد هذا أمرًا رائعًا لمزامنة العملاء الذين ليسوا بالضرورة نشطين في كل مرة ، ولكنهم يقدمون طلبات عرضية ، وعندما يكون لدى العملاء مهلة طويلة الأمد.

الاستثناء هنا مع اتصالات SSL؛ في هذه الحالة ، يتصرف بشكل مماثل إلى عامل (لصق اتصال معين إلى مؤشر ترابط معين حتى يتم إغلاق الاتصال).

استخدم إذا: أنت على Apache 2.4 ومثل سلاسل الرسائل ، ولكنك لا تحب أن يكون لديك مؤشرات ترابط تنتظر الاتصالات الخاملة. الجميع يحب المواضيع!

لا تستخدم إذا: أنت لست في Apache 2.4 ، أو تحتاج إلى تهيئة مسبقة من أجل التوافق.


في عالم اليوم من لوريس بطيئة، AJAX ، والمتصفحات التي ترغب في الحصول على اتصالات TCP 6 متعددة الإرسال (مع المحافظة على الحياة ، بالطبع) إلى الخادم الخاص بك ، يعد التزامن عاملاً مهمًا في جعل نطاق وخادم نطاقك جيدًا. لقد ربطها تاريخ أباتشي في هذا الصدد ، وعلى الرغم من أنه في الواقع لا يرقى إلى مستوى أمثال nginx أو lighttpd من حيث استخدام الموارد أو النطاق ، فمن الواضح أن فريق التطوير يعمل على بناء خادم ويب لا يزال مناسبًا في عالم التوفيق بين الطلب العالي اليوم.


398
2018-04-27 02:27



-1: IME ، العامل فقط يقلل من حجم بصمة httpd في منطقة 15٪ (تقارير IIRC Linux في COW في RSS مما يجعل مظهر pre-fork كما لو أنه يستخدم ذاكرة أكبر بكثير مما يفعل). هناك فرق مهم بين البصمة kernel لعملية و مؤشر NPTL. إنه طريق طويل من تحطيم الأرض. لا أفهم سبب اعتقادك أن انتظار موضوع وتخصيصه أكثر كفاءة في جدولة المصطلحات من انتظار / جدولة عملية (متوقعة مسبقًا). ولا ما الذي تعتقد أن طبقة المقابس الآمنة تعمل على الإطلاق. - symcbean
symcbean إذاً أنت تقول أن استخدام ذاكرة الوصول العشوائي بنسبة 15٪ ليس مهمًا؟ هذا جيد ، لكن رأيي سيكون على خلاف ذلك. مطالبات أداء التزامن ليست بلدي. نرى هنا. ويتم توضيح اختلاف SSL بوضوح في وثائق الحدث MPM: 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 فيما يتعلق بالمشكلة مع SSL والحدث MPM: هل تعرف ما إذا كان nginx يعالج هذا أفضل بكثير من apache؟ - DASKAjA
يبدو أنه إذا قمت بتجميع apache 2.4 بدون معرفة عن وحدات mpm فهي تأتي مع الوحدة النمطية المسماة وحدة الحدث mpm وهي تعمل مع mod_php7 (الآن أنا mpm تبحث عن mpm لأن apache2.4 يتجاوز حد اتصال mysql بينما apache 2.2 مع نفس الخادم mysql ليس) - BioHazard


يعتمد في الغالب على وحدات Apache التي تريد استخدامها. أعتقد أن العامل هو الخيار الافتراضي بشكل عام ، ولكن بعض الوحدات (الأقدم) تتطلب التوقع والتعامل مع ما قبل الطباعة.

إذا لم يكن لديك تفضيلات ، فأوصيك بالتبعية المفضلة من توزيع نظام التشغيل. على سبيل المثال ، سيقوم Ubuntu بشكل افتراضي بتثبيت mpm-worker عند تثبيت Apache2.


5
2018-04-26 19:32





إليك شرحًا جيدًا لكيفية عمله مع gifs:

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

باختصار: إذا كنت على 2.4 وتحتاج إلى httpd ك وكيل عكسي (المرسل) حتى اختيارك هو حدث MPM


5
2018-06-21 13:10





اعتبارًا من فبراير 2018 ، تنص وثائق Apache 2.4 لـ Event MPM على أن استخدام Apache كوكيل سيبقي "معالجة الاتصال المحسنة" منذ 2.4.24 من العمل كمصمم. شاهد محددات الجزء.

تكمن المشكلة في أنه ، كخادم بديل ، لا يستطيع العامل معرفة مكان نهاية الرد ، وسيضطر إلى الانتظار حتى يتم رؤية الاستجابة بالكامل قبل إعادة التحكم إلى المستمع.

لهذا السبب ، يبدو أن استخدام نموذج العامل قد يكون أفضل عندما يتم استخدام apache كوكيل. ليس من الواضح لي إذا كانت هناك مزايا لنموذج الحدث في بيئة بروكسي ، ولكن ربما هناك.


3
2018-02-14 15:01