معرفی انواع ماژول های MPM در آپاچی و کاربرد هر کدام

سلام به همه کاربران عزیز وب سایت توسینسو ، همانطور که قبلا در خصوص وب سرور آپاچی صحبت کردیم ، این وب سرور بصورت ماژولار طراحی شده است و تقریبا به همه نیازهایی که ما به عنوان یک وب سرور از آن انتظار داریم پاسخ می دهد . اما یکی از جالبترین مواردیکه در وب سرور آپاچی دیده می شود بحث مدیریت کردن چندین درخواست وب سرویس بصورت همزمان است که اینکار در آپاچی توسط ماژول های MPM انجام می شوند. به زبان ساده تر زمانیکه وب سرور شما یک درخواست را از کاربر دریافت می کند باید آن را تبدیل به یک Process در سیستم کند تا بتواند پاسخگوی کاربر باشد ، اگر تعداد کاربران پایین باشد درخواست ها به ترتیب در یک صف پردازش قرار می گیرند و به ترتیب پاسخ آنها در وب سرور داده می شود اما اگر هدف شما سرویس دهی به تعداد زیادی کاربر باشد طبیعتا این روش جوابگو نیست و صف طولانی از درخواست ها را در وب سرور شاهد هستیم که منتظر پاسخگویی از طرف وب سرور هستند و همین مورد باعث می شود که سرویس دهی به کاربران بسیار کند انجام شود.

ماژول های MPM در آپاچی که مخفف کلمه های Multi-Processing Modules هستند این امکان را به وب سرور می دهند که همزمان بتوانند چندین درخواست از جانب کاربران را دریافت کنند و آنها را پردازش کنند و در سریعترین زمان ممکن پاسخ کاربر را بدهند . این ماژول ها بصورت کلی در وب سرور آپاچی به سه دسته بندی ( سه حالت کاری ) به نامهای Prefork ، Worker و Event طبقه بندی می شوند که هر کدام روش کاری خودشان برای پردازش همزمان چند درخواست را دارند که در این مقاله به معرفی ساختار کاری آنها می پردازیم . جالب هست بدانید که این متدهای پردازش همزمان در وب سرور یک انقلاب در وب سرور آپاچی محسوب می شود و نحوه انتخاب استفاده از هر کدام از این ماژول ها و پیکربندی کردن آنها یکی از تخصص های جالب و بامزه در حوزه بهینه سازی وب سرور یا Web Server Optimization محسوب می شود . لازم به ذکر است که مشابه چنین ماژول هایی در سایر سیستم عامل ها نیز وجود دارد برای مثال در IIS نیز ما مفهومی به نام Worker Process و Thread را برای سرویس دهی بهتر به درخواست ها داریم. خوب بریم سراغ نحوه کار هر کدوم از این ماژول ها که چجوری کار می کنند :

معرفی ماژول mpm_prefork در آپاچی


یکی از هماهنگ ترین ماژول های MPM در آپاچی با تقریبا همه نوع درخواست و نوع عملکرد ، ماژول mpm__prefork است . مکانیزم کاری این ماژول به این شکل است که به جای اینکه هر کدام از درخواست ها را درون یک process قرار بدهد تعدادی process فرزند یا child process مطابق شکل زیر ایجاد می کند و در واقع یک تفکیک وظایف در وب سرور انجام می هد ، هر کدام از این process های فرزند به تنهایی یک تعداد صف پاس ایجاد می کنند و درخواست ها را مدیریت می کنند . نکته اینجاست که هر کدام از این child process ها نیز در لحظه می توانند فقط یک درخواست را پاسخ بدهند و طبیعی است با زیاد شدن درخواست ها حتی این صف پاسخ برای هر کدام از این child process ها ممکن است طولانی شود . اما نکته مشکل ساز این ماژول در اینجاست که با بالا رفتن تعداد Child Process ها و بالا رفتن تعداد درخواست ها ، طبیعتا هر پردازش در RAM نیاز به ایجاد کردن یک فضای اختصاصی برای انجام فعالیت های خودش دارد و طبیعتا با بالا رفتن تعداد درخواست ها شما به منابع RAM بسیار زیادی نیاز خواهید داشت ، از طرفی یکی از مشکلاتی که ممکن است برای این نوع عملکرد ماژول به وجود بیاید مبحثی به نام thread marshaling است ، با توجه به اینکه هر پردازش در لحظه توسط یک child process با یک فضای اختصاصی و ایزوله از فضای RAM سایر child process ها ایجاد می شود ، اگر کاربر درخواست های خودش را بصورت متنوع در process های مختلف ارسال کند ممکن است که یک درخواست به درستی انجام نشود چون به منابع RAM سایر child process ها دسترسی ندارد.اما به مراتب سرعت سرویس دهی این نوع ماژول بهتر از سایر ماژول ها است.این ماژول بیشتر زمانی استفاده می شود که شما از mod__php برای پردازش های وب سرور خودتان استفاده می کنید ، مکانیزم کاری این نوع ماژول را در تصویر زیر مشاهده می کنید :

معرفی ماژول prefork در آپاچی

معرفی ماژول mpm_worker در آپاچی


ماژول بعدی mpm__worker بر خلاف ماژول قبلی از ساختار child process بصورت کامل استفاده نمی کند ، بلکه از ساختار thread یا نخ ( اصطلاح فارسی ) برای سرویس دهی استفاده می کند ، مکانیزم کاری multi-threading در بخش همزمانی سرویس دهی به کاربران بسیار کاراتر عمل می کند . در این ساختار سرویس دهی ابتدا وب سرور چند child process ایجاد می کند اما با زیاد شدن درخواست ها تعداد child process ها زیاد نمی شود بلکه در هر child process چند thread ایجاد می شوند که به child thread معروف هستند ، این Thread ها مستقیما با حافظه RAM کار نمی کنند و می توانند تعداد زیادی داشته باشند و به همین دلیل بسیار به استفاده بهینه از حافظه RAM کمک می کنند. در این ساختار سرعت سرویس دهی هم بهتر می شود زیرا درخواست ها نیاز به خالی شدن child process ندارند و فقط به یک thread خالی نیاز دارند . این ماژول بیشتر در زمانیکه شما درخواست های خود را با استفاده از ssl دریافت و ارسال می کنید کاربرد دارد و تنها زمانی دچار مشکل می شود و نباید استفاده شود که شما ماژول prefork را بر روی وب سرور فعال داشته باشید بنابراین در زمان استفاده حتما ماژول های دیگر را غیرفعال کنید . اما به این موضوع هم توجه کنید که ساختار کاری این ماژول بر اساس Connection ها تنظیم می شود و نه بر اساس Request ها یا درخواست ها ، یعنی Connection ها می توانند در Thread ها ادامه دار باشند ، به همین دلیل پارامتر Keep-Alive که Connection را فعال نگه می دارد باید مدیریت شود تا زمان انتظار خالی شدن یک Thread زیاد نشود . در زیر نمونه فعالیت این ماژول را مشاهده می کنید :

معرفی ماژول mpm_worker در آپاچی

معرفی ماژول mpm_event در آپاچی


مکانیزم کاری ماژول mpm__event بسیار نزدیک به ساختار mpm__worker است با این تفاوت که مشکل Keep-Alive ای که در mpm__worker وجود دارد در این ماژول حل شده است . در واقع در این ماژول تا زمانیکه درخواست کامل نشود ، درخواست به سمت Thread ها هدایت نمی شود به زبان ساده این اجازه داده می شود که درخواست سریعتر توسط Thread ها پاسخ داده شود و البته سریعتر بسته شود تا درخواست های زیادتری توانایی پاسخ داده شدن را پیدا کنند . این نوع ماژول بیشتر زمانی کاربرد دارد که کلاینت های شما نیاز به داشتن یک Connection دائمی ندارند . این ماژول به تازگی در Apache نسخه 2.4 نهایی شده است و در حال حاضر آنقدر توصیه برای استفاده از آن وجود ندارد و مباحث هماهنگی یا Compatibility با برخی ماژول ها همچنان وجود دارد. امیدوارم مورد توجه شما عزیزان قرار گرفته باشد.

نویسنده : محمد نصیری

منبع : جزیره لینوکس و متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#ماژول_mpm_event #ماژول_های_آپاچی #ماژول_mpm_prefork #ماژول_mpm_worker #worker_process_در_آپاچی #وب_سرور_آپاچی #آموزش_نصب_آپاچی_سرور
2 نظر
Banisaeed

این توسط Banisaeed در تاریخ چهارشنبه, 22 خرداد 1398 حذف شده است.

سلام

بین prefork و event کدوم رو پیشنهاد میدید ؟

استفاده از php-FPM و mpm_event رو پیشنهاد میکنید ؟

در واقع سرعت سایت با prefork و mod_php بهتره یا php-FPM و mpm_event

خودم تغییری توی سرعت حس نکردم، اما در prefork رم زیادی استفاده میشه توسط httpd

محمد نصیری

لطفا سوال رو از طریق بپرسید مطرح کنید در جزیره لینوکس که بتونم کمکتون کنم

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....