محمد نصیری
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

معرفی کاربرد ماژولهای mpm prefork ، mpm worker و mpm event آپاچی

یکی از جالبترین مواردیکه در وب سرور آپاچی دیده می شود بحث مدیریت کردن چندین درخواست وب سرویس بصورت همزمان است که اینکار در آپاچی توسط ماژول های 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 با برخی ماژول ها همچنان وجود دارد. امیدوارم مورد توجه شما عزیزان قرار گرفته باشد.

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

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

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


محمد نصیری
محمد نصیری

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات