راه اندازی وب سرور Apache , Nginx , …

فاطیما

Nginx که به صورت انجین ایکس با engine x خوانده می شود یک سرور منبع باز وب است که از سوی یک مهندس نرم افزار روس نوشته شد .از زمان آغاز به کار آن در سال ۲۰۰۴ این سرور وب روی بهره وری بالا همزمانی بالا و همچنین استفاده کمتر از حافظه تمرکز داشت . قابلیت های بیشتر که روی کار کرد آن تاثیر می گذاشت مانند توازن در بارگذاری حافظه نهان کنترل دسترسی پهنای باند و قابلیت یک پارچه سازی موثر با برنامه های کاربردی فراوان از انجین ایکس یک گزینه خوب برای معماران وب سایت های نوین ساخت. اکنون این سرور وب در جایگاه دوم محبوبترین سرور های منبع باز وب اینترنت قرار داد .

 

خدمات فاطیما

این روز های اینترنت آنقدر گسترش یافته که در دهه گذشته پیشبینی آن غیر ممکن بود . تحولی عظیم از HTML های ساده که متن های قابل کلیک را می ساختن و بر پایه NCSA و روی سرور های وب آپاچی بودند تا میانگیر های ارتباطی که همواره برار هستند و از سوی پیش از دومیلیارد کهبر در سرار جهان مورد استفاده قرار می گیرند. با افزایش تعداد کامپیوترها دستگاه های موبایل تپلت خایی که همواره متصل هستند چشم انداز اینترنت پرسرعت در حال تغییر هست .اطلاعات سرویس های آنلاین بسیار زیاد شده .بنابر این وب سایت ها بیشتر از قبل شاید قابل مقایسه هم نباشد پیچیده تر شده است . همواره یکی از بزرگترین چالیش های یک معمار وب سایت همزمانی درخواست ها بوده است که از ابتدای به وجود آمدن سرویس ها وب تعداد درخواست های همزمان در حال رشد است . برای یک وب سایت محبوب اصلا غیر معمول نیست که ۱۰۰ هزار یا ملیون ها نفر را به صورت همزمان پشتیبانی و سرویس دهی کند. ترکیبی از کاربران موبایل و معماری های جدیدتر برنامه های کاربردی که معمولا برپایه نگاه داشتن ارتباط پایدار هستند و به کاربر اجازه می دهند با اخبار و اطلاعاتی که از طریق دوستان هستند و به کاربران اجازه می دهند با اخبار و اطلاعاتی که از طریق دوستان خود دریافت می کنند به روز شوند عامل مهم دیگری که به افزایش همزمانی کمک می کند تغییر رفتار مرورگر های نوین است این گونه مرورگر ها برای بالابردن سرعت بارگذاری چهار یا شش اتصال همزمان را یک وب سایت برقرار می کنند . برای نشان دادن مشکلی که برای ارتباط با اتصال های کند وجود می آید یک وب سرور مبتنی بر آپاچی در نظر بگیرید که پاسخ مسبتا کوتاه صد کلیوبایتی تا درست می کند. بارگذاری این صفحه می تواند ظرف کسری از ثانیه انجام شود اما برای کاربری با پهنای باند ۸۰kbps بارگذاری این صفحه ده ثانیه طول خواد کشید . پس این سرور وب با سرعت نسبتا زیادی می تواند صد کیلوبایت محتوا را گرفته , سپس برای ده ثانیه به کندی به آن محتوا را قبل از آزاد سازی اتصال به کاربران بفرستند. حال تصویر کنید شما هزار کاربر دارید که به طور همزمان متصل هستند و محتوا یک سانی را خواست کرده اند اگر تنها یک مگابایل حافظه اضافه برای هر کاربر تخصیص یابد تقریبا یک گیگابایت حافظه برای ارائه سرویس به تنها هزار کاربر با درخواست صد کلیلوبایل محتوا نیاز است . یک سرور وب معمولی که بر پایه آپاچی باشد باید بیش از یک مگابایت حافظه اضافه برای هر اتصال تخصیص دهد اگر چه شرایط ارسال محتوا برای یک اتصال کند . می تواند وسیله افزایش اندازه بافر های سوکن کرنل سیستم عامل بهبود یابد ولی این کار یک راه حل کلی نیست می تواند اثرات جانبی زیادی در پیش داشته باشد . با وجود اتصال های مداوم پایدار مشکل کنترل همزمانی پیش از پیش نمایان می شود زیرا برای جلوگیری از تاخیر به وجود آمده به علت سازماندهی اتصال جدید HTTP ارتباط کاربران نباید قطع شود برای هر کاربر متصل میزان خاصی از حافظه وسیله سرور وب تخصیص پیدا می کند .در نتیجه برای کنترل حجم کاری افزوده شده مرتبط با افزایش مخاطبان و افزایش تعداد کاربران همزمان یک وب سایت باید بر پایه تعدادی از بلاک های موثر باید در چند بخش های دیگر مانند سخت افزار ظرفیت شبکه نرم افزار و معماری ذخیره داده ها نیز مهم هستند اما نرم افزار وب سرور است که اتصال های کاربران را تایید و پردازش می کند بنابر این سرور وب باید بتواند به صورت غیر خطی و بر اساس افزایش تعداد درخواست ها در هر ثانیه و اتصال های همزمان تغییر کند .

 

آیا استفاده از انجین ایکس فواید دیگری دارد ؟

کنترل همزمان بالا با بهره وری تاثیر پذیری بالا فواید مهم به کارگیری انجین ایکس بوده است ولی این سرور وب فواید جالب دیگری نیز دارد .در چند سال گذشته معماری های وب ایده تجزیه و جداسازی زیر ساخت نرم افزاری شان از سرور وب را پیش گرفته اند همانند آنچه قبلا در وب سایت های مبتنی بر linuxوجود داشت .انجین ایکس برای وب سرور بسیار مناسب است چرا که قابلیت کلیدی مورد نیاز برای کنترل همزمانی پردازش تاخیر ssl لایه امن سوکت ها محتوای ایستا فشرده سازی و ذخیره در حافظه نهان از بین بردن اتصال و درخواست های غیر ضروری و حتی جریان HTTP رسانه از لایه کاربردی به لایه موثر سرور وب اراعه می کند . همچنین امکان یکپارچه سازی مستقیم با راه حل های بدون SQL را برای بالا بردن کارایی هنگام اراعه سرویس به تعداد زیادی از کاربران همزمان فراهم می سازد.با وجود کیت ها و زبان های برنامه نویسی جدید توسعه شرکت ها بیشتری اقدام به تغییر نحوه توسعه و به کارگیری برنامه های کاربردی خود کردند و انجین ایکس به یکی از اصلیترین اجزای این تغییرات تبدیل شد که توانست به بسیاری از شرکت ها در جهت توسعه سرویس های وب شان کمک کند .اولین خط های انجین ایکس در سال ۲۰۰۲ نوشته شد و سال ۲۰۰۴ به عرضه عمومی رسید تعداد کاربران انجین ایکس در حال افزایش است که این مساله باعث افزایش ایده های مشارکتی خطاهای گزارش شده پیشنهاد ها و نظرات های شده است .اساس کد انجین ایکس مختص به خودش است که به صورت کامل و از ابتدا به زبان برنامه نویسی c نوشته شده است . انجین ایکس به بسیاری از معماری های و سیستم هامل ها مانند لینوکس و ویندوز و … نفوذ کرده است این سرور وب با داشتن کتاب خانه های خود از ماژول های استاندارد کتاب خانه ای c استفاده زیادی نمی کند .توجه داشته باشید در نسخه ویندوزی این سیستم بیشتر نمایشی می باشد و کامل نمی توانید قابلیت Nginx رو بفهمید.

 

وب سرور Ngnix در یک نگاه

وب سرور Nginx با وجود حجم کم اما در عین حال کارایی بسیار بالایی دارد. وب سرور Nginx تحت لایسنس BSD و از سال ۲۰۰۷ در سطح وب به صورت گسترده منتشر شده است.از بزرگترین مزیتهای وب سرور Nginx پشتیبانی بسیار عالی از فایل های استاتیک مانند تصاویر هست.وب سرور Nginx سرعت پاسخگویی بسیار بالایی دارد و در سایت های پر بازدید بسیار عالی عمل می کند. از جمله قابلیت های وب سرور Nginx سازگاری این وب سرور با اکثر توزیع های لینوکس هست. مستندات Nginx بسیار کامل است و انجمن Nginx هم بسیار پویا می باشد، از این رو همواره در حال به روز رسانی و پیشرفت می باشد.وب سرور Nginx برای مدیریت در خواست ها یا همان connection ها از روش منحصر به فرد خودش استفاده می کند، البته امروزه این روش در برخی وب سرور های دیگر هم استفاده می شود.در وب سرور Nginx برای هر درخواست یک Thread انحصاری ایجاد خواد شد. ضمنا سیستم Thread Poll هم به مدیریت و نوبت دهی زمانی Thread ها می پردازد. به این ترتیب مادامی که درخواست جدیدی نیامده است وب سرور درخواست های در نوبت را ارائه می کند. این روش استفاده از Thread ها در وب سرور Nginx بسیار کارامد است. به طور کلی مدیریت باز و بسته شدن Thread ها در وب سرور هایی مثل Apache بزرگترین نقطه ضعف آنها می باشد. ترتیبی عمل کردن در این وب سرور ها باعث می گردد زمان زیادی از دست برود در حالی که سرور امکان پردازش در اون زمان را داشته است اما منتظر رسیدن درخواست بعدی مانده است.آپدیت ها و به روز رسانی وب سرورها همواره با مشکلاتی همراه است که در خروجی چیزی جز داون تایم برای سرورها و نارضایتی مشتریان را به دنبال ندارد، اما در مورد وب سرور Ngnix به روز رسانی به نسخه جدید تر به صورت On The Fly می باشد و این مورد در پروژه هایی که نباید سایت داون تایم داشته باشد بسیار ارزشمند است.

 

تفاوت های Apache با Ngnix

در یک تفسیر ساده Apache یک وب سرور Process-Based در حالی که Nginx یک وب سرور Event-Based بهمین دلیل Nginx سریعتر از Apache است. روشن است به این ترتیب به ازای درخواست های HTTP مشابه وب سرور Ngnix حافظه رم کمتری مصرف می کند، از طرفی دیگر Apache نظر به عمر طولانی تر دارای امکانات و قابلیت های بیشتری نسبت به Nginx می باشد. یکی از امتیازات برتری Apache به وب سرور Ngnix همان مدیریت دسترسی به کمک فایل htaccess می باشد که شامل انواع Mod ها جهت Redirect، Rwrite، cache و … می باشد.

 

وب سرور Ngnix در قیاس با LightSpeed

بر خلاف ادعا شرکت LiteSpeed که وب سرور آن تا ۴۰ برابر سریعتر از Apache و حداقل ۲۰ برابر سریعتر از Ngnix است، تجربه ثابت کرده است با وجود ۶ سال سابقه بیشتر به نسبت Ngnix اما هنوز LightSpeed موفق نشده است به جایگاه Ngnix دست پیدا کند و از نظر ظرفیت هر چند شاید در تست ها سریعتر باشد اما در زیر فشار بازدید بالا به هیچ وجه پایداری Ngnix را نداشته و خیلی زود شاهد کاهش توان آن هستیم. مهاجرین LightSpeed به وب سرور Ngnix آنقدر بزرگ و زیاد هستند که خود گویای همه چیز می باشد، ویکی پدیا، فیسبوک به عنوان نمونه ای از وب سایت هایی هستند که همواره جزو ۱۰ سایت پر ترافیک جهان می باشند، و به وب سرور Ngnix اعتماد کرده اند.

 

ترکیب Ngnix با Apache

بی تردید بسیاری از اسکریپت ها و وب سایت ها، جز با Apache کمی در اجرا با مشکل روبرو هستند، بسیاری از وبمسترها قابلیت هایی که به کمک htaccess نصیبشان می شود را به کمی سریعتر لود شدن تصایر سایتشان می پسندند. از این رو کنار گذاشتن وب سرور Apache در هاست های اشتراکی کاری نادرست می باشد که موجبات نارضایتی و محدودیت در سرویس دهی می شود.از این رو در طرحی ابتکاری، وب سرور Ngnix نه به جای Apache که در کنار آن می تواند ضمن به همراه آوردن کلیه محاسنش برای هاست های اشتراکی، کلیه قابلیت های Apache را همچنان در اختیار کاربران قرار دهد. این قابلیت در چندین شکل امکان پذیر است که بسته به نیاز میتوان الویت ها را برای وب سرورهای مختلف تعریف داشت، البته تنظیمات نادرست در این حوزه میتواند کاملا بر عکس عمل کرده و سرور را نه تنها کند که در پاره ای موارد دچار مشکل نیز نماید.کدباکس، در هاست اشتراکی خود از وب سرور Ngnix به عنوان قدرتمندترین وب سرور حاضر، در کنار Apache به عنوان محبوب ترین وب سرور جهان بهره می برد. طبق آزمون ها پس از کانفیگ کامل این ترکیب بر روی هاست اشتراکی ما شاهد حدود ۳۰۰% افزایش سرعت پاسخدهی سرور به درخواست های همزمان بوده ایم و این یعنی ظرفیت ۳ برابری پاسخدهی. در عین حال استفاده کامل از Ngnix برای هندل داده های استاتیک و کش شده سرور نیز با تنظیمات خاص اعمال شد که در نتیجه موجب کاهش ۶۰% منابع مصرفی سرور شده است که روشن است منابع آزاد سرور در رزرو پردازش های سنگین تر می باشد.

 

در یک نگاه

وب سرور Nginx سرعت پاسخگویی بسیار بالایی دارد و در سایت های پر بازدید بسیار عالی عمل می کند. از جمله قابلیت های وب سرور Nginx سازگاری این وب سرور با اکثر توزیع های لینوکس هست. مستندات Nginx بسیار کامل است و انجمن Nginx هم بسیار پویا می باشد، از این رو همواره در حال به روز رسانی و پیشرفت می باشد.وب سرور Nginx برای مدیریت در خواست ها یا همان connection ها از روش منحصر به فرد خودش استفاده می کند، البته امروزه این روش در برخی وب سرور های دیگر هم استفاده می شود.در وب سرور Nginx برای هر درخواست یک Thread انحصاری ایجاد خواد شد. ضمنا سیستم Thread Poll هم به مدیریت و نوبت دهی زمانی Thread ها می پردازد. به این ترتیب مادامی که درخواست جدیدی نیامده است وب سرور درخواست های در نوبت را ارائه می کند. این روش استفاده از Thread ها در وب سرور Nginx بسیار کارامد است. به طور کلی مدیریت باز و بسته شدن Thread ها در وب سرور هایی مثل Apache بزرگترین نقطه ضعف آنها می باشد. ترتیبی عمل کردن در این وب سرور ها باعث می گردد زمان زیادی از دست برود در حالی که سرور امکان پردازش در اون زمان را داشته است اما منتظر رسیدن درخواست بعدی مانده است.آپدیت ها و به روز رسانی وب سرورها همواره با مشکلاتی همراه است که در خروجی چیزی جز داون تایم برای سرورها و نارضایتی مشتریان را به دنبال ندارد، اما در مورد وب سرور Ngnix به روز رسانی به نسخه جدید تر به صورت On The Fly می باشد و این مورد در پروژه هایی که نباید سایت داون تایم داشته باشد بسیار ارزشمند است.