وب سرور آپاچی
در این نوشتار هم قصد داریم یکی از محبوبترین و کاربردیترین نرمافزارهای کامپیوتری که طی سالیان اخیر توسعه یافتهاند را معرفی کنیم. وب سرور آپاچی این نرمافزار جذاب آپاچی هادوپ (Apache Hadoop) نام دارد. رمز این موفقیت فوقالعاده چیست؟ Apache Hadoop چطور لقبِ بزرگترین بنیاد با دسترسی رایگان (open source foundation) را یدک میکشد؟ بهتر است شروع کنیم.
حتماً این سؤال در ذهنتان شکل گرفته است که واقعاً نرمافزار Apache Hadoop چیست؟ در واقع، آپاچی یک نرمافزار سرورِ وب رایگان با دسترسی نامحدود (an open-source and free web server software) است. اگر به درستی نمیدانید سرورِ وب چیست نگران نباشید، در ادامه به آن خواهیم پرداخت. این نرمافزار به قدری گسترش یافته است که نزدیک به ۴۰ درصد از وبسایتهای اینترنتی از این نرمافزار بهره میبرند! میدانید این عدد یعنی چه تعداد؟ بر اساس آمار و ارقام موجود از میان ۵/۱ میلیارد وبسایت موجود تنها ۲۰۰ میلیون وبسایت فعال هستند. خب! ۴۰ درصدِ ۲۰۰ میلیون میشود ۸۰ میلیون وبسایت! به نظرتان شگفتانگیز نیست؟
وبسایتهای اینترنتی بسیار معتبری در میان استفادهکنندگان آپاچی هادوپ هستند و پروژههای بزرگی در این بستره صورت گرفته است. توانمندی فوقالعاده آپاچی هادوپ، در متصل کردن تعداد نامحدودی رایانه به همدیگر است. فقط به عنوان یک نمونه بگویم شرکت یاهو با داشتن بزرگترین سیستم هادوپ و از همین طریق یعنی متصل کردن تعداد زیادی سرور و رایانه به همدیگر تعیین بخش اعشاریِ عددِ پی تا دو تریلیارد رقم پس از اعشار پیش بُرد. اگر میخواستیم این کار را بر روی یک رایانه انجام دهیم احتمالاً بیش از ۵۰۰ سال طول میکشید!
هستهی آپاچی هادوپ شامل یک بخش ذخیرهای به نام سیستم فایل توزیع شدهی هادوپ (Hadoop Distributed File System) است. علاوه بر این یک بخش پردازشگر نیز در هسته این نرمافزار حاضر است که در واقع یک مدل برنامهریزی مپریدیوس (MapReduce programming model) است. هادوپ فایلها را به دو بلوک بزرگ تقسیم میکند و سپس آنها را در سرتاسر گرههای یک خوشه پراکنده میسازد.
هادوپ سپس کد بستهبندی شده (packaged code) را به گرهها منتقل میکند تا دادهها را به شکل موازی پردازش کند. این رهیافت از دیتا لوکالیتی (data locality) سود میبرد، جائیکه گرهها میتوانند دادهها را دستکاری کنند. این به مجموعههای دادهای این اجازه را میدهد تا در مقایسه با معماری ابرکامپیوترهای مرسوم (conventional supercomputer architecture) سریعتر و کارآمدتر پردازش شوند.
تاریخچه نرمافزار Apache Hadoop
این نرمافزار در سال ۲۰۰۶ وارد بازار شد. توسعهی دهندهی این نرمافزار بنیادِ نرمافزاری آپاچی است. این نرمافزار به زبان جاوا نوشته شده است و بر روی سیستم عامل کراس پلتفرم عمل میکند. داگ کاتینگ (Doug Cutting) و مایک کافارلا (Mike Cafarella) بنیانگذاران این نرمافزار هستند. آنها ریشهی اولیه نرمافزار آپاچی را مقالهِ سیستم فایل گوگل (Google File System) میدانند که در سال ۲۰۰۳ منتشر شد. ایدههای مطرح شده در این مقاله کمی بعد با یک پروژه دیگر تلفیق شد و پروژه آپاچی ناچ (Apache Nutch) آغاز به کار کرد. بعدها این پروژه به عنوان یک زیرپروژهی هادوپ (Hadoop) به کار خود ادامه داد.
تابحال از خود پرسیدهاید معنای لوگوی نرمافزار آپاچی چیست؟ یک فیل زرد رنگ خندان چه ارتباطی با یک نرمافزار کامپیوتری میتواند داشته باشد؟! جوابش اینجاست. در سال ۲۰۰۶ داگ کاتینک که در یاهو مشغول به کار بود روی این نرمافزار کار میکرد. آپاچی در واقع اسم اسباب بازی پسرِ داگ بود! یک فیل زرد خندان! در ابتدا آپاچی شامل تنها پنج هزار کد دستوری یا به عبارتی lines of code بود.
در ماه مارچ سال ۲۰۰۶، اووِن اُمالی (Owen O’Malley) کدنویس یا همان committer بود که به پروژه هادوپ پیوست. از سال ۲۰۰۶ تا به امروز شاهد پیشرفت چشمگیر این نرمافزار بودهایم. بگذارید از عظمت این نرمافزار برایتان بگویم. در حال حاضر، نزدیک به ۷۶۰۰ کد نویس و بیش از یک میلیارد کد دستوری مدیریت شده دارد (lines of code committed). 765 نفر نیز عضو رسمی بنیان نرمافزاری آپاچی هستند!
سرورِ وب (web server) چیست؟
گفتیم این نرمافزار یک سرورِ وب است. سرورهایِ پوشه، پایگاههای اطلاعاتی، مِیل و وب (file servers، database servers، mail servers و web servers) از انواع متفاوتی از نرمافزارهای سرور استفاده میکنند. هر کدام از این کاربردها میتوانند به پوشههای ذخیره شده روی یک سرورِ فیزیکی دسترسی پیدا کنند و از آنها برای مقاصد مختلف بهره ببرند.
بنابراین اگر بخواهیم ساده بگوئیم، وظیفه ی یک سرورِ وب (که آپاچی نیز جزء آن هاست) خدمت رسانی به وبسایتهای اینترنتی است. در واقع نرمافزار آپاچی نقش واسطهگری میان سرور و ماشینهای مشتری را بازی میکند. آپاچی محتویات سرور را برمبنای تقاضای کاربران بیرون کشیده و در وب ارائه میدهد.
اما این نقش واسطهگری آنطور که به نظر میرسد ساده نیست. نرمافزار آپاچی و به طور کلی نرمافزارهای شبیه آن باید بتوانند پاسخگوی هجوم بیوقفه کاربران باشند. این نرمافزارها میبایست به شکل همزمان به کاربران خدمترسانی کنند. این درحالی است که هر کدام از آنها ممکن است درخواست صفحات اینترنتی متفاوتی را داده باشند. فایلهای پردازشی سرورهایِ وب با زبانهای مختلفی نوشته شده است، از جمله پیاچپی (PHP)، پیتون (Python) و جاوا (Java).
سرورِ وبِ آپاچی چطور کار میکند؟
جالب است بدانید هرچند ما نرمافزار آپاچی را یک سرورِ وب نامگذاری کردهایم، اما یک سرورِ فیزیکی نیست. در واقع آپاچی نرمافزاری است که تحت سرور فعالیت میکند. وظیفهی اصلی آن برقراری ارتباط میان یک سرور و مرورگرهایِ بازدیدکنندگانِ وبسایت مثل فایرفاکس (Firefox)، گوگل کروم (Google Chrome) و سافاری (Safari) است. نکته مهم این است که در حین برقراری ارتباط فایلها دائماً میان ساختار مشتری-سرور (client-server structure) ردوبدل میشوند. بنابراین آپاچی را میتوان به نوعی یک نرمافزار کراس-پِلتفُرم (cross-platform software) نامید. از همین روست که روی سرورهای ویندوز و یونیکس فعالیت میکند.
وقتی یک بازدیدکننده قصد کند یک صفحه مثل صفحهی اصلی (the homepage) یا صفحهی در مورد ما یا به اصطلاح About Us را روی وبسایت شما بارگذاری کند، مرورگر یک درخواست به سرور شما ارسال میکند. اینجا دقیقاً همان نقطهای است که آپاچی وارد عمل میشود. این نرمافزار تمام فایلهای درخواستی شامل متن، تصویر یا دیگر فایلها را برای مرورگر ارسال میکند. این همان نقش واسطهگری بود که به آن اشاره کردیم. سرور و مشتری به واسطهی پروتکلهای HTTP با هم ارتباط برقرار میکنند. مسئولیت برقراری یک ارتباط امن و روان بین این دو ماشین برعهده چیست؟ بله! برعهده نرمافزار آپاچی است.
ماژول های آپاچی
چارچوب پایهای آپاچی شامل چندین مدول است. این مدولها شامل Hadoop Common، Hadoop Distributed File System (HDFS)، Hadoop YARN و Hadoop MapReduce است. واژه هادوپ (Hadoop) معمولاً برای مدولهای پایهای (base modules)، زیرمدولها (sub-modules)، اکوسیستم (Ecosystem) و گردآوریِ پکیجهای نرمافزاری اضافی به کار گرفته میشود. این پکیجهای نرمافزاری میتوانند رو یا در کنار هادوپ نصب شوند. چند نمونه از این نرمافزارها شامل Apache Pig، Apache Hive و Apache HBase است. چارچوب هادوپ بیشتر اوقات به زبان برنامهنویسی جاوا (Java programming language) نوشته میشود. هرچند MapReduce Java code مرسوم است، هرگونه زبان برنامهنویسی را میتوان با هادوپ استفاده کرد.
محدودیت برتریهای نرم افزار آپاچی چیست؟
به اعتقاد بسیاری از کارشناسان سرورِ وبِ آپاچی هوشمندانهترین انتخاب برای مدیریت وبسایتهاست. آپاچی اجازه میدهد وبسایت شما در یک پلتفرم پایدار و تطبیقپذیر عمل کند. اما درست مثل هر نرمافزار فوقالعادهی دیگر، محدودیتهایی نیز در این بین وجود دارد. بهتر است ابتدا برتریها و سپس محدودیتهای این نرمافزار را تیتروار برشمریم.
برتریهای نرمافزار آپاچی را میتوان در هشت مورد عمده خلاصه کرد:
- دسترسی آزاد و رایگان حتی برای استفادههای تجاری
- دارای قابلیتهای نرمافزاری مطمئن و پایدار
- به روز رسانی به موقع به همراه پَچهای امنیتی منظم
- انعطافپذیری بالا ناشی از ساختارِ برپایهی مدول (module-based structure)
- تنظیم و پیکربندی آسان حتی برای کاربران مبتدی
- دارای کراس-پلتفرم با قابلیت اجرا روی ویندوز و یونیکس
- دارای کارهای خلاقانه با سایتهای WordPress
- پشتیبانی همیشگی در صورت بروز مشکل
محدودیتهای آپاچی را میتوانیم به دو مورد زیر خلاصه کنیم:
- مشکلات عملکردی روی وبسایتهایی با ترافیک سنگین
- گزینههای پیکربندی بسیار که میتواند منجر به آسیبپذیریِ امنیتی نرمافزار شود.
آپاچی تنها نرمافزار سرور وب نیست. در واقع، آپاچی رقبای قدرتمندی دارد که با هم جهت جلب توجه مشتریان رقابت میکنند. بهتر است مقایسهای داشته باشیم بین آپاچی و این نرمافزارها تا ببینیم برتری این نرمافزار در کجاست؟ هر اپلیکیشنِ سرور وب به منظور خاصی طراحی شده است. هرچند آپاچی جزء مرسومترین سرور وبها به حساب میآید، اما برخی متخصصین گزینههای جایگزین این نرمافزار را مطرح کردهاند.
نرمافزار آپاچی در مقابل NGINX
Nginx که آن را Engine-X تلفظ میکنند یک سرورِ وب جدیدتر از آپاچی است. Engine-X برای اولین بار در سال ۲۰۰۴ منتشر شد. از سال ۲۰۰۴ تا به امروز، این نرمافزار توانسته محبوبیت بالایی را در میان صاحبان وبسایتها کسب کند. Nginx تولید شد تا مشکل c10k (c10k problem) را برطرف کند. این مشکل چیست؟ یک سرور وب که از رشتهها (threads) به منظور مدیریت درخواستهای کاربران بهره میبرد قادر به مدیریتِ بیش از ۱۰ هزار اتصال در آن واحد نخواهد بود. این همان مشکل c10k است.
صاحبان وبسایتهایی با ترافیک سنگین روبرو هستند ممکن است در استفاده از آپاچی به مشکل برخورد کنند چون آپاچی از ساختار برمبنای رشته (thread-based structure) بهره میبرد. Nginx یکی از سرورهای وب است که مشکل c10k را حل میکند. بنابراین Nginx موفقترین نرمافزار سرور وب در زمینه حل مشکل c10k است.
Nginx دارای یک معماری مشتق از رویداد (even-driven architecture) است. این بدان معنی است که این نرمافزار برای هر بار درخواست پردازش جدیدی ایجاد نمیکند. در عوض، هر درخواست وارد شده را با یک تک رشته مدیریت میکند. این پردازش بالادستی (master process) چندین پردازشِ ایجادکننده را مدیریت میکند به نحوی که پردازشِ واقعی درخواستها (actual processing of requests) اتفاق میافتد. مدلِ برمبنای رویداد (event-based model) در Nginx درخواستهای کاربران را به شکلی کارآمد در میان پردازشهای ایجادکننده (worker processes) توزیع میکند. بنابراین، Nginx منجر به بهبود مقیاسپذیری میشود.
اگر شما قصد دارید یک سایت با ترافیک سنگین را مدیریت کنید، Nginx نسبت به آپاچی گزینهی مناسبتری است به این دلیل که میتواند با کمترین منابع موجود بالاترین بازدهی را حاصل کند. جای تعجب ندارد که بدانید وبسایتهای بسیار پُرترافیک مثل نتفلیکس (Netflix)، هولو (Hulu)، پینترست (Pinterest) و ایربیانبی (Airbnb) همگی از Nginx بهره میبرند. اما اگر وبسایت شما آنقدرها هم پرترافیک نیست، استفاده از نرمافزار آپاچی را به شما توصیه میکنم چراکه پیکربندی آن آسانتر است و دارای مدولها فراوان است. علاوه بر آن استفاده از آپاچی کاربرپسندی بالاتری دارد، به خصوص در میان کاربران مبتدی.
آپاچی در مقابل تامکت
تامکت نیز یک سرور وب بوده که توسط بنیاد نرمافزاری آپاچی توسعه یافته است، بنابراین نام رسمی آن آپاچی تامکت (Apache Tomcat) است. این یک سرورِ HTTP است، اما به جای وبسایتهای پایا اپلیکیشنهای جاوا را توانمند میسازد. تامکت میتواند روی چندین جاوای متفاوت شامل Java Servlet، JavaServer Pages (JSP)، Java EL و وباستوک عمل کند.
تامکت به طور اختصاصی برای اپلیکیشنهای جاوا تولید شده است، درحالیکه Apache یک سرورِ HTTP با اهداف کلی (general-purpose HTTP) است. شما همچنین میتوانید از آپاچی با زبانهای برنامهنویسی مختلف مانند PHP، Python، Perl و غیره استفاده کنید. شایان ذکر است که مدول آپاچی مناسب در اینجا امری تعیینکننده است.
هرچند شما میتوانید از یک سرورِ تامکت به منظور ارائه خدمات به صفحات وبِ پایا نیز استفاده کنید، اما در مقایسه با سرور Apache کارایی کمتری دارد. برای مثال، تامکت ماشین مجازی جاوا (Java Virtual Machine) و دیگر کتابخانههای مرتبط با جاوا (Java-related libraries) را بدون آنکه به آنها نیاز داشته باشید بارگذاری میکند. تامکت در مقایسه با آپاچی قدرت پیکربندی پایینی دارد. برای مثال، بهترین گزینه به منظور انجامِ WordPress نرمافزار آپاچی است.
آنچه در این نوشتار بیان کردیم، معرفی کوتاهی بود از نرمافزار آپاچی. همانطور که اشاره کردیم این نرمافزار چارچوبی را برای پردازش توزیعشدهی مجموعههای اطلاعاتی عظیم در سرتاسر خوشههای رایانهای فراهم میکند. این نرمافزار طراحیشده است تا سرورهای تکی را به هزاران ماشین ارتقاء میدهد به گونهای که هر کدام قدرت محاسباتی و ذخیرهای محلی به دست میآورند.
یادتان میآید نرمافزار آپاچی چه بود؟ این نرمافزار یک سرور وب بود که در حال حاضر نزدیک به ۸۰ میلیون وبسایت از خدماتش بهره میبرند. سپس کمی در مفهوم سرور وب کندوکاو کردیم و گفتیم آپاچی حکم یک واسطهگر را دارد که بین ماشینهای مشتری و خود سرور ارتباط برقرار میکند و امنیت و سهولت این ارتباط را بر دوش میگیرد.
نقاط مثبت و محدودیتهای آپاچی را به خاطر دارید؟ ما در بخشی به نقاط مثبت و منفی نرمافزار آپاچی پرداختیم. نشان دادیم که برتریهای این نرمافزار بر محدودیتهای آن غلبه دارد. همچنین نشان دادیم که نرمافزار آپاچی رقیب جدی برای نرمافزارهای محبوب دیگر مثل Nginx و Tomcat است و در برخی موارد نسبت به آنها برتری دارد. امیدواریم از این نوشتار لذت برده باشید و منتظر نوشتارهای بعدی ما باشید…
سوالات متداول
- وب سرور آپاچی چیست؟
آپاچی یک نرمافزار سرورِ وب رایگان با دسترسی نامحدود (an open-source and free web server software) است. وبسایتهای اینترنتی بسیار معتبری در میان استفادهکنندگان آپاچی هادوپ هستند و پروژههای بزرگی در این بستره صورت گرفته است. توانمندی فوقالعاده آپاچی هادوپ، در متصل کردن تعداد نامحدودی رایانه به همدیگر است. هستهی آپاچی هادوپ شامل یک بخش ذخیرهای به نام سیستم فایل توزیع شدهی هادوپ (Hadoop Distributed File System) است. علاوه بر این یک بخش پردازشگر نیز در هسته این نرمافزار حاضر است که در واقع یک مدل برنامهریزی مپریدیوس (MapReduce programming model) است. هادوپ فایلها را به دو بلوک بزرگ تقسیم میکند و سپس آنها را در سرتاسر گرههای یک خوشه پراکنده میسازد.
- وب سرور آپاچی چه مزایایی دارد؟
- دسترسی آزاد و رایگان حتی برای استفادههای تجاری
- دارای قابلیتهای نرمافزاری مطمئن و پایدار
- به روز رسانی به موقع به همراه پَچهای امنیتی منظم
- انعطافپذیری بالا ناشی از ساختارِ برپایهی مدول (module-based structure)
- تنظیم و پیکربندی آسان حتی برای کاربران مبتدی
- دارای کراس-پلتفرم با قابلیت اجرا روی ویندوز و یونیکس
- دارای کارهای خلاقانه با سایتهای WordPress
- پشتیبانی همیشگی در صورت بروز مشکل
- وب سرور چیست؟
سرورهایِ پوشه، پایگاههای اطلاعاتی، مِیل و وب (file servers، database servers، mail servers و web servers) از انواع متفاوتی از نرمافزارهای سرور استفاده میکنند. هر کدام از این کاربردها میتوانند به پوشههای ذخیره شده روی یک سرورِ فیزیکی دسترسی پیدا کنند و از آنها برای مقاصد مختلف بهره ببرند.
- وب سرور آپاچی چطور کار می کند؟
واقع آپاچی نرمافزاری است که تحت سرور فعالیت میکند. وظیفهی اصلی آن برقراری ارتباط میان یک سرور و مرورگرهایِ بازدیدکنندگانِ وبسایت مثل فایرفاکس (Firefox)، گوگل کروم (Google Chrome) و سافاری (Safari) است. نکته مهم این است که در حین برقراری ارتباط فایلها دائماً میان ساختار مشتری-سرور (client-server structure) ردوبدل میشوند. بنابراین آپاچی را میتوان به نوعی یک نرمافزار کراس-پِلتفُرم (cross-platform software) نامید. از همین روست که روی سرورهای ویندوز و یونیکس فعالیت میکند.