اگر قصد یادگیری داکر و کوبرنتیز را دارید آشنایی با مفهوم کانتینر ابری از نان شب هم برایتان واجبتر است. در نگاه اول کانتینرها شاید کمی پیچیده به نظر برسند، ولی ما در ادامه سعی میکنیم خیلی ساده این مفهوم را برایتان توضیح دهیم.
کانتینر ابری چیست؟
دقیقاً مانند صنعت حملونقل که در آن از کانتینرهای فیزیکی برای ایزوله کردن و انتقال ایمن بارهای مختلف استفاده میشود، فناوریهای توسعه نرمافزار نیز از چند سال گذشته به سمت استفاده از اپلیکشینهای کانتینریشده رفتهاند.
برای درک بهتر این مفهوم بیایید با یک مثال کارمان را شروع کنیم. فرض کنید در یک تیم فنی کار میکنید. همکارتان اپلیکیشنی برایتان ارسال میکند. در اجرای اپلیکیشن، شما دائماً به خطاهای مختلفی میخورید که به شما میگوید ورژنهای نرمافزارهای مختلف به کار گرفته شده در اپلیکیشن با ورژنهای نصبشده روی سیستم شما همخوانی ندارد. اینجا آرزو میکنید که کاش میشد محیط ایزولهای ایجاد کرد و اپلیکیشن را در آن محیط بدون دردسر بالا آورد.
کانتینرها دقیقاً همین نیاز را برآورده میکنند. در واقع، کانتینرها آمدهاند تا با خیال راحت فرایندهای مربوط به توسعه، تست و اجرای اپلیکیشنها را انجام دهیم.
اگر شما اندکی بیشتر با فضای برنامهنویسی آشنا باشید، احتمالاً فناوری دیگری هم به ذهنتان رسیده که دقیقاً همین کار را می کند. بله درست است: ماشین مجازی. در واقع بحث مجازیسازی و ایجاد فضای ایزوله بر روی سیستم یا سرور بحثی گسترده است و ماشین مجازی و کانتینردر این حوزه قرار میگیرند.
با ماشینهای مجازی هم میتوان محیطهای مجازی ایزوله بالا آورد. لابد این سوال برایتان پیش آمده که خب وقتی ماشین مجازی هست چرا کانتینرها اینقدر این روزها سروصدا به پا کردهاند؟
مروری بر تاریخچه کانتینرهای ابری و فرایندهای ایزولهسازی
برای پاسخ به این سوال باید در تاریخ فناوری کمی به عقبتر برویم. پیش از کانتینرها از ماشین مجازی و قبلتر از آن نیز از سرورهای فیزیکی برای میزبانی اپلیکیشنها استفاده میشد. در این بخش قصد داریم خیلی کوتاه فرایندی را بررسی کنیم که از سرورهای فیزیکی شروع شد و به کانتینرها رسید.
روش سنتی؛ استفاده از سیستمها/ سرورهای فیزیکال:
هر اپلیکیشنی نیاز دارد تا بر روی یک سیستم میزبانی شود. این سیستمها اغلب سرور نامیده میشوند. برای مثال اپلیکیشنهای وب بر روی وبسرورهای قدرتمند میزبانی میشوند.
سالها پیش کسبوکارها مجبور بودند هر کدام از اپلیکیشنهای خود را بر روی یک سرور جداگانه قرار دهند؛ چرا که این امکان برایشان وجود نداشت تا همزمان چند اپلیکیشن را روی یک سرور بالا بیاورند.
از آنجایی که هر کسبوکاری تعداد زیادی اپلیکشن داشت، نتیجه چنین رویکردی این میشد که شرکتها باید هزینه بسیار زیادی برای خرید یا اجاره سرور متحمل میشدند.
اما مشکلات این رویکرد به همینجا ختم نمیشد. در بسیاری از مواقع از همه توان این سرورها استفاده نمیشد. در شروع کار معمولاً شناخت کاملی از ادامه مسیر توسعه اپلیکیشنها و مسیر کسبوکار وجود ندارد؛ بنابراین نمیشد با تخمین دقیقی گفت که چه سروری با چه مشخصاتی باید تهیه شود. مثلاً اگر سروری داشتید که 8 گیگ رم و یک سیپییو دوهستهای داشت، درصدی از این حافظه و توان محاسباتی آن همیشه بلااستفاده میماند.
همانطور که احتمالاً شما هم حدس زدهاید، این روش روش بهینهای به نظر نمیرسد. چرا که خیلی عجیب نیست که پس از مدتی کسبوکار ما چند سرور با هزینه زیاد داشته باشد که از حداکثر توان محاسباتی و حافظهشان هم استفاده نکرده است.
تصویر زیر، زیرساخت فیزیکی لازم برای داشتن اپلیکیشنهای ایمیل، وب و مدیریت فایل را در این رویکرد نشان میدهد.
ماشینهای مجازی؛ از جهنم سرورهای فیزیکی تا بهشت ماشینهای مجازی
چند سال پیش، قبل از اینکه داکر اینقدر در بین برنامهنویسها عزیز شود، هر وقت صحبت از مجازیسازی و ایجاد محیط ایزوله وسط میآمد اولین چیزی که به ذهن خطور میکرد ماشین مجازی (VM) بود.
از دل دستوپنجه نرم کردن با مشکلات کار با سرورهای فیزیکی بود که فناوری جدیدی به نام ماشین مجازی پدید آمد. با کمک این فناوری دیگر نیاز نبود که شما برای هر یک از اپلیکیشنهایتان یک سرور جداگانه تهیه کنید. حالا دیگر میتوانستید منابع یک سرور را تقسیم کنید، محیطهای ایزوله بسازید و در هر کدام از این محیطها اپلیکشنهای مختلف را بالا بیاورید.
با استفاده از ماشینهای مجازی دیگر مشکلات زیرساختی مربوط به سرورهای فیزیکی را هم نداشتید. اما مانند هر فناوری جدیدی دیگر ماشینهای مجازی مشکلات جدیدی نیز با خود به همراه آوردند:
- یکی از اصلیترین مشکلات ماشینهای مجازی حجم زیادشان است. از آنجایی که هر VM شامل یک سیستم عامل و یک کپی مجازی از همه سختافزارهای یک OS است، ماشین مجازی به میزان منابع زیادی نیاز دارد.
- بهخاطر سطح ایزولهسازی بالا در ماشینهای مجازی، vmها نمیتوانند منابع را با هم به اشتراک بگذارند. این یعنی مانند سرورهای فیزیکی، بخشی از منابع ما بدون استفاده باقی میماند.
- به خاطر همین مشکلات چرخه توسعه نرمافزار (از برنامهریزی و توسعه تا تست و دیپلوی) با استفاده از ماشینهای مجازی پیچیدهتر است.
- مهاجرت و انتقال دادن vmها در محیطهای مختلف چون ابرهای عمومی، کلودهای خصوصی و دیتاسنترهای سنتی دشوارتر است.
هایپروایزر چیست؟
برای درک بهتر نحوه عملکرد ماشینهای مجازی، در اینجا شاید بد نباشد اشاره کوتاهی به هایپروایزر هم داشته باشیم. در ماشینهای مجازی بار اصلی ایجاد محیط ایزوله روی دوش هایپروایزر است. بدون هایپروایز مجازیسازی ممکن نیست. هاپیروایز لایهای نرمافزاری یا firmware است که این امکان را فراهم میسازد تا چند سیستم عامل کنار هم بالا بیایند و همگی به منابع یک سرور فیزیکال دسترسی داشته باشند.
هایپروایزر مسئولیت ایجاد هماهنگی و جداسازی منابع موجود (توان محاسباتی، حافظه، ذخیرهسازی و…) را بر عهده دارد، و میزان منابع لازم برای هر ماشین مجازی را در اختیارشان قرار میدهد.
روی هم رفته، با اینکه ظهور ماشینهای مجازی و استفاده از آنها واقعاً کمک بزرگی به پیشرفت فناوریهای مجازیسازی و ایزولهسازی کرد، اما مشکلاتی که کار با این فناوری داشت توسعهدهندگان و برنامهنویسها را به سمت فناوری دیگری به نام کانتینرها سوق داد.
ماشین مجازی؟ نه ممنون! از کانتینر استفاده میکنم
حالا که با مشکلات موجود در استفاده از ماشینهای مجازی آشنا شدیم، بهتر میتوانیم دلیل استقبال از کانتینرها را درک کنیم. کانتینر در مقایسه با ماشین مجازی بسیار سبکتر است. به همین خاطر، یک سرور میتواند از تعداد بیشتری کانتینر در مقایسه با ماشین مجازی میزبانی کند.
مکانیسم کار ماشین مجازی به این شکل است که برای هر vm باید یک سیستم عامل جداگانه بالا آورده شود؛ اما در کانتینرها دیگر نیازی نداریم که بهازای هر کانتینر یک سیستم عامل داشته باشیم. همه کانتینرها میتوانند از یک سیستم عامل استفاده کنند. همین یک تغییر باعث میشود تا سرعت اجرا در کانیتینرها بالاتر از ماشینهای مجازی باشد.
یکی از نقاط قوت کانتینرها این است که امکان ماژولاریتی را فراهم میکنند؛ این یعنی بهجای اینکه یک اپلیکیشن پیچیده را در یک کانتینر اجرا کنیم، میتوان اپلیکیشن را به ماژولهای مختلف تقسیم کرد (مانند دیتابیس، فرانتاند اپلیکشن و…). این همان رویکرد میکروسرویسی است. مدیریت اپلیکیشنهای ساختهشده به این شیوه راحتتر است. چون هر ماژول تقریباً ساده است و تغییرات در یک ماژول باعث اختلال در کل اپلیکیشن هم نمیشود.
شباهتها و تفاوتهای ماشین مجازی و کانتینر
در بحث مقایسه میان ماشینهای مجازی و کانتینرها همیشه بر روی تفاوتهای این دو فناوری تاکید میشود. اما برای اینکه درک بهتری از این دو ابزار داشته باشیم بهتر است تفاوتها و شباهتهایشان را همزمان با هم در نظر بگیریم.
شباهتها
مهمترین شباهت میان ماشینهای مجازی و کانتینرها هدف آنهاست. هدف کانتینرها و ماشینهای مجازی در نهایت یکی است: فراهم آوردن محیطی ایزوله برای اجرای اپلیکیشن و وابستگیهای آن.
شباهت دیگر کانتینرها و وی ام ها این است که در هر دوی این فناوریها تلاش میشود تا نیاز و وابستگی به سختافزار فیزیکی به حداقل ممکن برسد. با این کار، کمک می کنند تا از منابع محاسباتی مثل حافظه و هارد از نظر مصرف انرژی و موارد دیگر، بهتر استفاده شود.
تفاوتها
تفاوت اصلی کانتینرها و وی امها به معماری و سطح ایزولهسازی در این فناوریها باز می گردد.
همانطور که در تصویر زیر مشخص است در کانتینر، همه کانتینرها بر روی یک کرنل بالا میآیند. استفاده از یک کرنل مشترک، این مزیت را دارد که میتوان تعداد زیادی کانتینر بر روی یک کرنل بالا آورد. و نیازی نیست برای هر کانتینر یک سیستم عامل جداگانه بالا آورده شود.
در سمت چپ تصویر معماری ماشین مجازی را میبینید. در اینجا هایپروایزر وظیفه اصلی مجازیسازی را انجام میدهد و برای هر ماشین مجازی یک سیستم عامل بالا میآورد.
پیش از رشد استفاده از کانتینرها، ماشین مجازی انتخاب اول برای بهبود ظرفیت سرور بود. VMs و هایپروایز برنامهریزی شده بود تا سخت افزار یک کامپیوتر فیزیکی به همراه سیستم عامل شبیهسازی کند. با استفاده از وی ام این امکان فراهم شد تا بر روی یک کامپیوتر کامپیوترهای بیشتر با سیستم عامل های جداگانه بالا بیاوریم.
مزایا و معایب کانتینرهای ابری
کانتینرها هم مانند هر فناوری دیگری مزایا و معایب مختص به خودشان را دارند. در ادامه به چند مورد از این مزایا و معایب می پردازیم:
مزایا
- کانتینرها زیرساختی سبک، سریع و ایزوله برای اجرای اپلیکیشنها فراهم میکنند. از آنجایی که کانتینرها سبک هستند انطعاف بالایی دارند و با سرعت بالایی میتوان آنها را ذخیره کرد یا بکآپ گرفت.
- اپلیکیشن، وابستگیها، کتابخانهها ، فایلهای باینری و پیکربندی معمولاً در یک کانتینر گردهم جمع میشود و راهحلی آسان برای انتقال اپلیکیشنها به محیطهای محاسباتی مختلف فراهم میآورند.
- میانگین اندازه کانتینرها معمولاً کمتر از صد مگابایت است.
- استفاده از کانتینرها باعث کاهش هزینههای اجرایی و توسعه میشود.
معایب
- فرایندهای ساختن کانتینر و اجرای اپلیکشنهای کانتینریشده در سیستم عامل لینوکس بهتر جواب میدهند. به همین خاطر، وقتی محیط برنامهنویسی ویندوزی است کارایی لینوکس را ندارند.
- کانتینرها از یک کرنل سیستم عامل استفاده میکنند اگر کرنل آسیبپذیر باشد همه کانتینرها هم در خطر قرار دارند.
- وقتی که با کانتینرها کار میکنید، برقراری ارتباط میان کانتینرها و شبکهسازی ممکن است اندکی دشوار باشد.
کنترل و مانتیور کردن کانتینرها در مقایسه با ماشین مجازی دشوارتر است.
مهمترین ابزارهای متنباز برای ساختن و مدیریت کانتینرها
خب حالا که فهمیدیم کانتینر چیست و با مزایای کار با آن هم آشنا شدیم قدم بعدی چیست؟ چطور میتوانیم از این مزایا بهره ببریم؟
برای ورود به جهان کانتینرها باید با ابزارهای مهم این حوزه آشنا شویم. هر کدام از این ابزارها فرایندهای مختلف کار با اپلیکیشنهای کانتینریشده را برای ما خودکار میسازند.
کوبرنتیز: یک پلتفرم متنباز برای هماهنگسازی کانتینرهاست که بسیاری از فرایندهای دستیِ مربوط به استقرار، مدیریت و مقیاسپذیری اپلیکیشنهای کانتینریشده را بهصورت خودکار انجام میدهد.
داکر: امروزه فناوری کانتینر با ابزار محبوب داکر پیوند خورده است. اما داکر چیست؟ و چه ارتباطی با کانتینرها دارد؟ در واقع داکر پلتفرمی متنباز برای مدیریت اغلب فرایندهای مرتبط با containerization است.
داکر ابزاری بسیار مفید برای بستهبندی، ارسال و اجرای اپلیکیشنها درون کانتینرهاست. با داکر بود که دوباره مزایای استفاده از کانتینرها بر سر زبانها افتاد و این حوزه از فناوری جان دوباره گرفت.
آپاچی Mesos: در سال 2012 منتشر شد. پلتفرمی متنباز برای خودکارسازی فرایندهای دیپلوی، مقیاسپذیری، و مدیریت کلاسترهای بزرگ است. این ابزار بر پایه ماراتون کار میکند که یک کلاستر منیجر است.
غولهای دنیای فناوری چطور به استقبال کانتینرها رفتند؟
پس از آنکه داکر در سال 2013 و کوبرنتیز در سال 2015 منتشر شد، شرکتهای بسیاری به سمت استفاده از این سیستمهای متنباز مربوط به کانتینرها رفتند.
دلیل جذابیت کانتینرها و ابزارهای مربوط به آن برای شرکتهای بزرگ این است که استفاده از کانتینرها سرعت توسعه، تست و دیپلوی اپلیکیشنها را بالا میبرد.
برای نمونه این چند شرکت از فناوری کانتیر و ابزارهای مربوط به آن استفاده میکنند:
- گوگل
- اسپاتیفای
- پینترست
- Airbnb
- تیندر
جمعبندی
همانطور که پیش از این گفتیم، بحث ایجاد محیطهای ایزوله بر روی سیستمها و سرورها تاریخ طولانی و پرپیچوخمی را طی کرده و امروز به کانتینرها رسیده است. اما کانتینرها پایان ماجرای محیطهای ایزوله نیستند و هنوز مسیرهای نرفته بسیاری در این حوزه وجود دارد.
برای درک بهتر نحوه کار با اپلیکیشنهای کانتینریشده میتوانید سری به پلتفرم ابری دارکوب بزنید. در این پلتفرم بهراحتی و در کمترین زمان ممکن میتوانید اپلیکیشنهای موردنظرتان را بهصورت داکرایز شده بالا بیاورید.