بررسی تفاوت وب سرورهای NGINX و APACHE

۶ مهر ۱۳۹۸ مطالعه ۱ دقیقه

در آموزش قبلی شما را با وب سرورهای مهم لینوکسی آشنا کردیم و ویژگی های مهم آن ها را شرح دادیم. حالا در ادامه آموزش های قبل که در رابطه با راه اندازی کسب و کار میزبانی وب و معرفی انواع وب سرورهای لینوکسی بود، میخواهیم به صورت تخصصی تر درباره Apache و NGINX صحبت کنیم زیرا این دو وب سرور از مهم ترین وب سرورهای اغلب سرویس های میزبانی وب و بسیاری از VPS ها هستند. به طوری که برطبق آموزش قبلی که بیان کردیم، بالغ بر 80 درصد وب سرورهای اینترنتی از این دو نرم افزار استفاده میکنند.

بیشتر بخوانید: با انواع وب سرورهای لینوکسی آشنا شوید

Apache یا NGINX

در سال های بین 1990 تا 2011 وب سرور Apache تقریبا 60 درصد وب سایت ها را میزبانی میکرد. اما امروزه با روی کار آمدن وب سرور NGINX این مقدار به 45 درصد تقلیل یافته است که حتی همچنان این آمار در حال کاهش میباشد. در این میان وب سرور IIS مایکروسافت نیز همیشه بین رقیبان حضور داشته است و روندی نسبتا ثابت، پایدار و قابل قبولی را داشته است.

معماری کنترل ارتباطات (connection)

Apache:

Apache چندین ماژول برای پردازش درخواست های کلاینت ها ارائه میدهد. به این ترتیب میتوانید به سادگی معماری پردازش درخواست ها را در صورت لزوم تغییر دهید. Apache به این ماژول ها mpm میگوید. این ماژول ها عبارتند از:

• Mpm_prefork: این ماژول process هایی با یک thread ایجاد میکند که درخواست ها را کنترل میکنند. هر پراسس یک درخواست را کنترل میکند. تا زمانی که تعداد درخواست ها از تعداد process ها کمتر باشد، mpm کارایی خوبی دارد. اما به محض اینکه درخواست ها از process ها بیشتر شوند، کارایی به مقدار زیادی کاهش میابد. بنابراین در سناریوهایی که تعداد کانکشن ها بالا میرود، استفاده از این ماژول توصیه نمیشود (به دلیل مصرف RAM بالا به ازای هر process که ایجاد میشود). به این ترتیب چنین رویکردی برای سرورهایی که تعداد کلاینت های کمی دارند، بسیار مناسب است. اما وقتی تعداد کلاینت زیاد شود و مقدار مصرفی رم به مقادیر آستانه برسد، توصیه میشود که این معماری را تغییر دهید.

• Mpm_worker: این ماژول یک پراسس کنترلی ایجاد میکند که مسئول ایجاد پراسس های child است. هر کدام از این child process ها تعداد مشخصی thread و علاوه بر آن یک listener thread ایجاد میکنند. Listener Thread برای connection هایی که وارد میشوند Listen میکند (گوش میدهد) و هنگامی که به سرور میرسند، آنها را به thread انتقال میدهند. هر کدام از این process ها میتوانند یک ارتباط را کنترل کنند. Thread ها به نسبت process ها بسیار کارآمد تر هستند بنابراین این رویکرد به نسبت mpm_prefork برای سرورهایی که تعداد کلاینت های بیشتری دارند مناسب است.

• Mpm_event: این ماژول بسیار مشابه ماژول worker است، اما برای کنترل connection هایی است که مدت زیادی وجود داشته اند (KeepAlive Handling)، بهینه سازی شده است. از نسخه Apache 2.4 این ماژول کاملا پایدار شد و اکنون به عنوان تنظیمات پیشفرض Apache استفاده میشود.

NGINX:

Nginx از نظر کنترل درخواست ارتباطات دریافتی با Apache تفاوت عمده ای دارد. Nginx برای هر درخواست وب یک پراسس ایجاد نمیکند، بلکه ادمین مشخص میکند که چه تعداد پراسس worker برای پراسس اصلی Nginx ایجاد شود (یک قاعده کلی این است که به ازای هر CPU یک Worker Process داشته باشیم). هر کدام از این پراسس ها تک thread هستند. هر worker میتواند هزاران ارتباط همزمان را کنترل کند. Nginx این کار را به صورت غیر همزمان با یک thread انجام میدهد، به جای اینکه از برنامه نویسی multi-thread استفاده کند.
نحوه پردازش کانکشن ها در Nginx به گونه ای است که حتی با منابع بسیار محدود نیز میتواند کلاینت های زیادی را سرویس دهی کند. از آنجایی که سرور به صورت تک thread است و process برای کنترل connection های جدید ایجاد نمیشوند، مصرف CPU و RAM حتی در مواقعی که سرور تحت فشار زیادی قرار میگیرد نیز بسیار پایدار باقی میماند.

در تصویر فوق میبینیم که Nginx در اینجا از پراسس FastCGI استفاده میکند تا پایتون، Ruby یا بقیه کدها و سیستم کش آبجکت Memcache را اجرا کند. پردازش های worker پراسس ht_core اصلی متعلق به Nginx را برای درخواست های HTTP بارگزاری میکند.
Nginx به صورت even-driven (مبتنی بر رخداد)، asynchronous (غیر همزمان) و non-blocking (بدون مسدودی) است. “event” به معنی ارتباطی است که کاربر ایجاد میکند. asynchronous یعنی Nginx ارتباطات کاربر را بیشتر از یک connection کنترل میکند. “non-blocking” یعنی disk I/O را متوقف نمیکند چون CPU مشغول است. در این صورت روی یک event دیگر کار میکند تا زمانی که disk I/O خالی شود.

محتوای Dynamic و Static

در آموزش قبل گفتیم که محتوای Dynamic به اطلاعاتی گفته میشود که تغییر میکنند. مثل سبد خرید، یا قیمت محاسبه شده. محتوای Static نیز به تصویر یا متن گفته میشود.

محتوای Static: مقایسه Nginx و Apache 2.4 برای 1000 تا connection همزمان نشان میدهد که Nginx به مقدار تقریبا 2.5 برابر سریعتر از Apache است.
وب سایت speedemy.com نیز این تست را روی 512 ارتباط همزمان اجرا کرد که Nginx در این تعداد connection نیز دو برابر سریعتر از Apache است.

محتوای Dynamic: اگر سایتی پویا بر مبنای وردپرس، جوملا و یا دروپال دارید. باید بین apache و Nginx یکی را انتخاب کنید. طبق نتیجه بنچمارک سایت speedemy، این دو وب سرور از نظر کارایی محتواهای پویا بسیار مشابه هستند. دلیل این موضوع این است که محتواهای پویا به وسیله PHP پردازش میشود.

جمع بندی
در قسمت اول این آموزش به مقایسه دو وب سرور Apache و Nginx از نظر نحوه مدیریت ارتباط ها و کارایی پرداختیم. در آموزش بعدی به مقایسه برخی دیگر از ویژگی های این دو وب سرور که از مهمترین وب سرور ها در میزبانی وب هستند میپردازیم.

بیشتر بخوانید سرور های اختصاصی ایران


داغ‌ترین مطالب روز

بهترین DNSهای گیمینگ 🎮

بهترین DNSهای گیمینگ 🎮

DNS یکی از مهم ترین مواردی است که سبب می شود تا تجربه شما از بازی کردن بهبود یافته و اتصال شما به سرورها پایداری و ثبات پیدا کند. اما پیدا کردن دی ان اس خوب برای بازی ها آنلاین به خصوص بازی هایی نظیر Valorant، Call of Duty و … همواره چالش محسوب شده […]

۱۶ خرداد ۱۴۰۱ ۹

رفع مشکل وصل نشدن اینترنت در ویندوز 7🌐

رفع مشکل وصل نشدن اینترنت در ویندوز 7🌐

اینترنت یکی از مهم ترین عناصر زندگی در عصر امروز است. اما اگر نتوانیم با ویندوز به اینترنت وصل شویم چه؟ مشکل وصل نشدن اینترنت در ویندوز 7 چیست؟ در این مقاله به آموزش رفع مشکل وصل نشدن اینترنت در ویندوز 7 می پردازیم تا با بررسی راه حل های آن بتوانید به صورت اصولی […]

۲۸ اردیبهشت ۱۴۰۱ ۶

سرور ابری

سرور ابری

سرور ابری و یا سرویس ابری از اصطلاحاتی هستند که امروزه به آن زیاد بر می خوریم. اما شاید تا کنون درک درستی در خصوص خدمات مبتنی بر ابر و سرور ابری (سرور رایانش ابری) نداشته باشیم. انتخاب خدمات مرکز داده مناسب ، می تواند تاثیر به سزایی در هزینه های یک کسب و کار […]

۲ تیر ۱۳۹۹ ۵

آموزش دانلود از اینترنت📥

آموزش دانلود از اینترنت📥

دانلود کردن بخش جدایی ناپذیر این روزهای زندگی شده است. هر روز حجم عظیمی از اطلاعات دانلود و آپلود شده و به زندگی مجازی جان می بخشد. اما نحوه دانلود اصولی و حرفه ای از اینترنت به چه صورت است؟ چطور دانلود کنیم که از سالم بودن فایل اطمینان بالایی داشته باشیم؟ در این مقاله […]

۱۱ بهمن ۱۴۰۰ ۴

فیلتر کردن یعنی چه؟🤚

فیلتر کردن یعنی چه؟🤚

فیلتر کردن یکی از پرکاربردترین عبارت های این روزهاست که در گوشه و کنار فضای مجازی از آن زیاد می شنویم. اما فیلتر کردن یعنی چه ؟ فیلتر کردن به معنای بستن سایت به روی کاربران تعیین شده است. به صورتی که این کاربران نتوانند به راحتی به برنامه ها و سایت های مورد نظر […]

۱۱ خرداد ۱۴۰۱ ۴

دیدگاه‌ها

comment symbol

برای این مقاله ۰ دیدگاه نوشته شده است. دیدگاه شما چیست؟

شما نیز، دیدگاه خود را از طریق دکمه زیر به اشتراک بگذارید.

نوشتن دیدگاه

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

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