عمومیمیزبانی وب

مقایسه Nginx و Apache (قسمت اول)

وب سرور ها بخش جدایی ناپذیر تمامی سرورها برای ارائهء مطالب مبتنی بر وب بر روی اینترنت هستند.

وب سرورهای متعددی در بازار ارائه شده اند ولی از مهم ترین آنها می توان به Apache و Nginx اشاره کرد. انتخاب بین این دو وب سرور گاها باعث سردرگمی برخی کاربران می شود. در این مقاله سعی داریم به مقایسه ی این دو وب سرور بپردازیم.

باید در نظر داشت این دو وب سرور نمی توانند جایگزینی برای یکدیگر به حساب بیایند زیرا هر کدام از آنها خصوصیات و کاربردهای خاص خود را دارند. در نتیجه برای انتخاب بین این دو وب سرور باید نیازهای خود را بررسی کنیم. در این مقاله به تفاوت های بین این دو وب سرور نیز خواهیم پرداخت.

در اینجا به تفاوت های بین Apache  و  Nginx با توجه به معیارهای زیر می پردازیم:

  • معماری مدیریت ارتباطات
  • محتوای پویا و ایستا
  • تنظیمات توزیع شده و مرکزی
  • ترجمه مبتنی بر فایل و مبتنی بر URL
  • ماژول ها
  • سازگاری

آپاچی

آپاچی برای اولین بار در سال ۱۹۹۵ توسط Robert McCool طراحی شد. بعد از آن و تا به امروز این نرم افزار توسط “بنیاد نرم افزار آپاچی” مدیریت شده و توسعه داده می شود.

به دلیل قدرت زیاد و همخوانی آن با بسیاری از پلتفرم ها Apache انتخاب اول بسیاری از مدیران سرور است. همچنین آپاچی را می توان از طریق بارگذاری ماژول پویای آن به راحتی گسترش داد. آپاچی امکان پردازش بسیاری از زبان های تفسیر شده را دارد و برای اینکار نیازی به نرم افزارهای ثانویه نیست.

 

Nginx

Nginx توسط Igor Sysoev به عنوان راه حلی برای مشکل c10K طراحی و ارائه شد. مشکل C10K به مشکلی اشاره می کند که در آن تعداد کانکشن های هم زمان به سرور به ۱۰۰۰۰ می رسد و وب سرور در ارائه ی خدمات به مشکل برخورد می کند. در چنین مواردی حتی آپاچی که وب سرور قدرتمندی بود توان پاسخگویی به این حجم ترافیک را نداشت.

Nginx به عنوان راه حل این مشکل برای سرویس دهی به تعداد بسیار بالایی از درخواست های همزمان حتی با منابع محدود معرفی شد. بعد از رونمایی اولیه این وب سرور هر روز به شهرت بیشتری رسید. مدیران سرورهایی که سایت های تحت مدیریت آنها با تعداد بازدید های بسیار بالایی رو به رو بودند شروع به مهاجرت به Nginx کردند.

Nginx با استفاده از ویژگی های پیشرفتهء آن حتی زیر بار بسیار زیاد نیز به خوبی فعالیت میکرد. به دو ویژگی مهم Nginx در ادامه اشاره شده است.

  • پراکسی معکوس
  • تعادل بار

 

در ادامه به تعدادی از تفاوت های Nginx و Apache اشاره خواهیم کرد:

 

  1. معماری مدیریت ارتباطات

Apache

آپاچی ماژول های چند-فرآیندی متفاوتی را ارائه می دهد. مدیر سرور می تواند این ماژول ها را به راحتی از طریق MPM تغییر دهد.
MPM_Prefork :  این ماژول هر یک از پردازش ها را با یک رشته ی پردازش جداگانه ایجاد می کند. هر یک از رشته ها تنها یک درخواست را پاسخ می دهد. ایجاد هر یک از پردازش ها نیاز به مقداری حافظه ی اصلی دارد، در نتیجه تعداد پردازش های ممکن محدود است و بالا رفتن تعداد پردازش ها باعث کندی سرور می شود. این ماژول تا زمانی که تعداد درخواست ها بیشتر از تعداد پردازش های ممکن نشده باشد سریعتر عمل میکند. این ماژول بهترین انتخاب برای کار با PHP با استفاده از mod-php است.
MPM_worker:  این ماژول پردازش ها را با چندین رشته ایجاد میکند. زمانی که چندین رشته وجود داشته باشد امکان ایجاد چندین کانکشن نیز وجود خواهد داشت. این ماژول بهینه تر از mpm_prefork عمل می کند. در این ماژول نیازی به ایجاد یک رشته ی جدید برای هر درخواست نیست و درخواست های جدید توسط رشته های موجود دریافت می شود در نتیجه نیازی به صبر کردن برای آزاد شدن پردازش ها نخواهد بود.
MPM_Event:  این ماژول از خیلی ابعاد شبیه به mpm_worker عمل میکند. در این ماژول چه درخواستی وجود داشته باشد یا خیر اتصال باز می ماند. این ماژول وظیفه ی رسیدگی به باز ماندن اتصالات را نیز بر عهده دارد. ماژول رشته هایی را به باز نگهداشتن اتصالات تخصیص می دهد و باقی درخواست ها را به رشته های دیگر منتقل می کند. این کار باعث می شود پردازش ها برای باز نگه داشتن اتصالات هزینه نشوند.

Nginx

Nginx با هدف ارائه ی سرویس به درخواست هایی با تعداد بسیار بالا و با مصرف منابع پایین طراحی شده است. به دلیل ناتوانی آپاچی در ارائه ی سرویس در زمانی که تعداد درخواست ها بالا می باشد Nginx ارائه شد و بازدهی خوبی داشت. در سرورهایی که تعداد درخواست های بالایی دریافت می کنند عموما Nginx بهتر از آپاچی یا وب سرورهای دیگر عمل می کند.
Nginx در ارائه ی داده های غیر پویا بسیار سریع بوده و بازدهی آن تقریبا دو برابر سریع تر از آپاچی است. نحوه ی کار Nginx به طور کلی با آپاچی تفاوت می کند. در Nginx یک پردازش مرکزی یا Master process وجود دارد. عموما پیشنهاد می شود برای هر هسته ی CPU یک Master process تعریف شود. این پراسس مرکزی چندین پردازش کاری ایجاد می کند. هر پردازش کاری تنها یک رشته ایجاد می کند. تفاوت اصلی Nginx و آپاچی در نوع پردازش و ایجاد رشته ها است که توضیح داده شد.
در Nginx یک رشته می تواند به چندین اتصال پاسخ دهد، در صورتی که در آپاچی هر رشته تنها به یک اتصال پاسخ می دهد. از آنجایی که یک رشته ی ایجاد شده می تواند به تعداد زیادی درخواست پاسخ دهد، نیازی به ایجاد رشته های جدید نیست و در نتیجه از حافظه ی کمی استفاده می شود.

 

  1. محتوای پویا و ایستا

محتوای ایستا:

در این زمینه Nginx با ۲.۵ برابر سرعت بیشتر در پردازش محتوای ایستا با ۱۰۰۰ اتصال همزمان نسبت به آپاچی پیشتاز است. در یک آزمایش دیگر با ۵۱۲ اتصال همزمان Nginx دو برابر سریع تر از آپاچی عمل کرده و ۴ درصد حافظه ی کمتری مصرف می کند. پس در صورتی که سرویس شما مقدار زیادی اطلاعات ایستا ارائه می دهد بهینه است از Nginx به عنوان وب سرور خود استفاده کنید.
در آزمایشی که برای آزمایش کارایی Nginx و آپاچی در ارائه ی سرویس به CMS ها (در اینجا از وردپرس استفاده شده است) انجام شد، هر دو وب سرورها تقریبا بازدهی یکسانی دارند.

محتوای پویا:

با نظر به اینکه اکثر وبسایت های فعالی و سرویس های آنلاین از محتوای پویا برای ارائه ی سرویس به کاربران استفاده می کنند، سرعت ارائه ی اطلاعات پویا توسط وب سرور از اهمیت ویژه ای برخوردار است.
در آزمایش های انجام شده بر روی دو وب سرور nginx و آپاچی هر دو با سرعت یکسانی اطلاعات پویا را ارائه می کنند. همچنین مقدار مصرف حافظه و قدرت پردازش نیز در هر دو وب سرور یکسان است. در استفاده از CMS ها نیز (وردپرس، جوملا، دروپال و…) هر دو وب سرور توانایی یکسانی در ارائه ی سرویس دارند.
در هنگام ارائه ی محتوای پویا، آپاچی به شکل مستقیم با PHP کار میکند ولی Nginx با استفاده از PHP-fpm این کار را انجام می دهد.
با توجه به این معیارها و آزمایشات صورت گرفته، تفاوت زیادی از نظر انتخاب بین این دو وب سرور برای ارائه ی محتوای پویا وجود ندارد.

 

  1. سیستم عامل

آپاچی:

آپاچی از سیستم عامل های مبتنی بر لینوکس و همچنین Unix به خوبی پشتیبانی می کند. همچنین مشکلی با پشتیبانی از وب سرورهای مبتنی بر ویندوز سرور ندارد.

:Nginx

Nginx به خوبی از سیستم عامل های مبتنی بر لینوکس و Unix پشتیبانی می کند ولی بر روی سرورهای مبتنی بر ویندوز به شکل محدود اجرا می شود. با اینحال امکان ارائه ی محتوای پویا و ایستا را بر روی ویندوز نیز دارد. در نظر داشته باشید در حال حاضر اکثر وب سرورها مبتنی بر لینوکس هستند.

برچسب ها

سامان حمیدی

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن