جمعه, ۱۹ بهمن, ۱۴۰۳ / 7 February, 2025
مجله ویستا

رقیبی قدرتمند برای سرورهای وب


رقیبی قدرتمند برای سرورهای وب

مروری کوتاه بر قابلیت های Nginx

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

● چرا همزمانی بالا اهمیت دارد؟

این روزها اینترنت آن‌قدر گسترده شده است که در دهه گذشته پیش‌بینی آن غیرممکن بود. تحولی عظیم از HTMLهای ساده که متن‌های قابل کلیک ارائه می‌کردند و بر پایه NCSA و روی سرورهای وب آپاچی بودند تا میانگیرهای ارتباطی که همواره برقرار هستند و ازسوی بیش از دو‌میلیارد کاربر در سراسر جهان مورد استفاده قرار می‌گیرند. با افزایش تعداد کامپیوترها، دستگاه‌های موبایل و تبلت‌هایی که همواره متصل هستند، چشم‌انداز اینترنت بسرعت درحال تغییر است. جزئیات سرویس‌های آنلاین بسیار بیشتر شده و به‌سمت دسترسی به اطلاعات و سرگرمی‌های برخط حرکت می‌کنند. بنابراین وب‌سایت‌ها در زمان حال بسیار پیچیده‌تر از قبل شده‌اند و عموما به مهندسی بیشتری برای پیشرفت و مقیاس‌پذیری نیاز‌دارند.

همواره یکی از بزرگ‌ترین چالش‌های یک معمار وب‌سایت، همزمانی درخواست‌ها بوده است. از ابتدای به وجود آمدن سرویس‌های وب، تعداد درخواست‌های همزمان در حال رشد است. برای یک وب‌سایت محبوب اصلا غیرمعمول نیست که بتواند به صدها هزار یا حتی میلیون‌ها کاربر به‌طور همزمان سرویس دهد. در دهه گذشته علت اصلی همزمانی، اتصال‌های کند بود (کاربرانی با ارتباطات تماسی یا Dial-up). اما امروزه افزایش همزمانی علت دیگری دارد؛ ترکیبی از کاربران موبایل و معماری‌های جدیدتر برنامه‌های کاربردی که معمولا برپایه نگه‌داشتن ارتباطی پایدار هستند و به کاربران اجازه می‌دهند با اخبار و اطلاعاتی که از طریق دوستان خود دریافت می‌کنند، به‌روز شوند. عامل مهم دیگری که به افزایش همزمانی کمک می‌کند، تغییر رفتار مرورگرهای نوین است؛ این‌گونه مرورگرها برای بالا بردن سرعت بارگذاری، چهار یا شش اتصال همزمان را با یک وب‌سایت برقرار می‌کنند.

برای نشان دادن مشکلی که برای ارتباط با اتصال‌های کند به‌وجود می‌آید، یک وب‌ سرور مبتنی بر آپاچی را در نظر بگیرید که پاسخ نسبتا کوتاه صد کیلوبایتی (یک صفحه وب با متن یا یک تصویر) ارائه می‌کند. بارگذاری این صفحه می‌تواند ظرف کسری از ثانیه انجام شود اما برای کاربری با پهنای باند ۸۰ kbps بارگذاری این صفحه ده ثانیه طول خواهد کشید. پس این سرور وب با سرعت نسبتا زیادی می‌تواند صدکیلوبایت محتوا را گرفته، سپس برای ده ثانیه به‌کندی آن محتوا را قبل از آزادسازی اتصال به کاربر بفرستد. حال تصور کنید شما هزار کاربر دارید که به‌طور همزمان متصل هستند و محتوای یکسانی را درخواست کرده‌اند. اگر تنها یک مگابایت حافظه اضافی برای هر کاربر تخصیص یابد، تقریبا یک‌گیگابایت حافظه برای ارائه سرویس به تنها هزار کاربر با درخواست صد‌کیلوبایت محتوا نیاز است. یک سرور وب معمولی که بر پایه آپاچی باشد، باید بیش از یک مگابایت حافظه اضافی برای هر اتصال تخصیص دهد. اگرچه شرایط ارسال محتوا برای یک اتصال کند، می‌تواند به‌وسیله افزایش اندازه بافرهای سوکت کرنل سیستم‌عامل بهبود یابد، ولی این کار یک راه‌حل کلی نیست و می‌تواند اثرات جانبی زیادی در پی داشته باشد.

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

در نتیجه برای کنترل حجم کاری افزوده شده مرتبط با افزایش مخاطبان و افزایش تعداد کاربران همزمان، یک وب‌سایت باید برپایه تعدادی از بلاک‌های موثر باشد. هر چند بخش‌های دیگر مانند سخت‌افزار، ظرفیت شبکه، نرم‌افزار و معماری ذخیره داده‌ها نیز مهم هستند، اما نرم‌افزار وب‌سرور است که اتصال‌های کاربران را تائید و پردازش می‌کند، بنابراین سرور وب باید بتواند به‌صورت غیرخطی و براساس افزایش تعداد درخواست‌ها درهرثانیه و اتصال‌های همزمان تغییر کند.

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

کنترل همزمانی بالا با بهره‌وری و تاثیرپذیری بالا از فواید مهم به‌کارگیری انجین‌ایکس بوده است، ولی این سرور وب، فواید جالب دیگری نیز دارد.

در چند سال گذشته، معماری‌های وب، ایده تجزیه و جداسازی زیرساخت نرم‌افزاری‌شان از سرور وب را در پیش گرفته‌اند؛ همانند آنچه قبلا در وب‌سایت‌های مبتنی بر (Linux، MySQL، PHP، Python یا Perl) وجود داشت.

انجین‌ایکس برای وب‌سرور بسیار مناسب است چرا که قابلیت‌های کلیدی مورد نیاز برای کنترل همزمانی، پردازش تاخیر، SSL (لایه امن سوکت‌ها)، محتوای ایستا، فشرده‌سازی و ذخیره در حافظه نهان، از‌بین‌بردن اتصال‌ها و درخواست‌های غیرضروری و حتی جریان HTTP رسانه از لایه کاربردی به لایه موثرتر سرور وب را ارائه می‌کند. همچنین امکان یکپارچه‌سازی مستقیم با راه‌حل‌های «بدون SQL» (یا NoSQL مانند memcached‌/‌Redis) را برای بالا بردن کارایی هنگام ارائه سرویس به تعداد زیادی از کاربران همزمان فراهم می‌سازد.

با وجود کیت‌ها و زبان‌های برنامه‌نویسی جدید توسعه، شرکت‌های بیشتری اقدام به تغییر نحوه توسعه و به‌کارگیری برنامه‌های کاربردی خود کردند و انجین‌ایکس به یکی از اصلی‌ترین اجزای این تغییرات تبدیل شد که توانست به بسیاری از شرکت‌ها در جهت توسعه سریع سرویس‌های وب‌شان کمک کند.

اولین خط‌های انجین‌ایکس در سال ۲۰۰۲ نوشته شد و سال ۲۰۰۴ به‌عرضه عمومی رسید. تعداد کاربران انجین ایکس در حال افزایش است که این مساله باعث افزایش ایده‌های مشارکتی، خطاهای گزارش‌شده، پیشنهادها و نظارت‌ها شده است.

اساس کد انجین‌ایکس مختص به خودش است که به‌صورت کامل و از ابتدا با زبان برنامه‌نویسی C نوشته شده است. انجین ایکس به بسیاری از معماری‌ها و سیستم‌عامل‌ها مانند لینوکس، ویندوز، Mac OS X و FreeBSD نفوذ کرده است. این سرور وب، با داشتن کتابخانه‌های خود از ماژول‌های استاندارد کتابخانه‌ای C استفاده زیادی نمی‌کند.

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

محمدحسین کردونی