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