مقایسه کانتینرها با ماشین‌های مجازی


مقایسه کانتینرها با ماشین‌های مجازی

کانتینر یا ماشین مجازی؟

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

از طرف دیگر فناوری کانتینر (Container)  گزینه دومی رابرای انجام مجازی‌سازی به ما پیشنهاد می‌دهد, به این‌طریق که یک سیستم عامل تک برروی یک میزبان بتواند برنامه‌های مختلف و زیادی را از روی ابر (Cloud) اجرا کند. یک روش خوب برای فهم تفاوت این دو موضوع این است که، فرض کنید تعدادی ماشین مجازی در حال اجرای سیستم عامل‌های مختلف برروی یک نود محاسباتی هستند، فناوری کانتینر این امکان را پیشنهاد می‌دهد که هر سیستم عامل می‌تواند بدون وجود ماشین‌مجازی خودش را مجازی‌سازی کند.

بارکاری ماشین‌های مجازی

یک ماشین‌مجازی یک محیط نرم‌افزار-محور است که تعبیه شده برای شبیه‌سازی یک محیط سخت‌افزار-محور به منظور برنامه‌هایی که برروی آن اجرا میشوند. برنامه‌های مرسوم معمولا به این منظور طراحی میشوند تا توسط یک سیستم‌عامل مدیریت شوند و توسط مجموعه‌ای از هسته‌های پردازنده‌ها به اجرا دربیایند. چنین برنامه‌هایی میتوانند داخل یک ماشین‌مجازی بدون هیچ‌گونه تغییری در معماری اجرا شوند.
داخل ماشین‌مجازی یک مولفه نرم‌افزاری بنام ابرناظر (Hypervisor) بعنوان یک عامل بین محیط ماشین‌مجازی و سخت‌افزار زیرین عمل میکند و لایه لازم برای انتزاع مورد نظر را فراهم می‌آورد. یک ابرناظر مانند Vmware ESXi، مسئول اجرای ماشین‌مجازی مرتبط با خود میباشد و میتواند چندین مورد شبیه‌سازی مرتبط با ماشین‌های مجازی را انجام دهد. دیگر ابرناظرهای محبوب میتوانند KVM, Citrix Xen و Microsoft Hyper-V باشند. در محیطهای مربوط به ماشین‌های‌مجازی اخیر، پردازنده‌های پیشرفته قادر به تعامل به شکل مستقیم با ابرناظرها هستند و میتوانند به جای استفاده از روشی مبهم در رابطه با اجرای برنامه‌ها داخل ماشین‌مجازی، آنها را با تامین کانال‌های مورد نیاز برای انجام خط‌لوله (Pipeline) بهبود بخشند. آنها همچنین شامل مدل‌های مجازی‌سازی شبکه مانند Vmware NSX نیز میباشند.
مقیاس بدست‌آمده از بارکاری یک سرویس‌دهنده ماشین‌مجازی بیشتر از روش bare metal (روش معمول مجازی سازی) میباشد. با داشتن یک وب‌سرور یا دیتابیس‌سرور، برنامه‌هایی که مسئول تحویل سرویس‌ هستند، دربین چندین میزبان توزیع شده‌اند. Load balancer ها درجلوی این میزبان‌ها قرارگرفته‌اند و ترافیک را به شکلی ملایم بین آنها ردوبدل میکنند. رویه‌های خودکار داخل محیطهای ماشین‌مجازی عملکردی مانند Load balancer ها داشته و یک سری پردازش Load balancing که به تغییرات در الگوهای ترافیکی در دیتاسنترها حساس هستند، ایجاد میکنند.

بارکاری ایجاد شده توسط کانتینرها

مفهوم کانتینر به عنوان یک گزینه دوم برای محیط‌های مجازی‌سازی توسعه‌داده نشده، بلکه دراصل روشی بوده برای جداکردن فضاهای نام در سیستم عامل لینوکس به منظور اهداف امنیتی. اولین محیط‌های لینوکس، شباهت بسیاری به سیستم‌های کانتینر پیشرفته داشتند چراکه بخش‌های تولیدشده داخل برنامه‌های مشکوک به موارد امنیتی می‌توانستند بدون هیچگونه خطری مرتبط با هسته (kernel) اجرا شوند. هسته هنوز مسئول اجرا بود، گرچه یک لایه انتزاعی بین هسته و بارکاری وارد شد.
زمانی که محیط داخل این بخش‌ها به‌دلایل افزایش کارایی به حداقل رسید، ایده ایجاد مفهوم این بخش‌ها به صورت قابل‌حمل بوجود آمد. اولین کانتینر رسمی ایجادشده که هنوز به عنوان یک سیستم مستقل نبود و به عنوان بخشی از لینوکس توسعه‌یافت، LXC نام داشت. Docker نیز به عنوان عاملی تجربی برای توسعه آسان LXC برروی پلتفرم PaaS، که بخشی از dotCloud (بخش اصلی سازمان Docker) بود، توسعه یافت و سازماندهی شد.
بارهای کاری داخل کانتینرها مانند Docker نیز مجازی شده است، هرچند داخل محیط محلی Docker هیچگونه فوق ناظری وجود ندارد. درعوض هسته لینوکس یا در موارد جدیدتر هسته ویندوزسرور توسط یک daemon که تقسیم‌پذیری‌ها بین کانتینرها را درحالی که بار کاریشان درحال اتصال به هسته بود، تکمیل می‌شود. کانتینرهای پیشرفته‌ اغلب شامل سیستم‌عامل‌های minimized شده مانند CoreOS یا Vmware’s Photon OS می‌باشند و تنها هدف آنها نگهداری سرویس‌های محلی و اساسی و ارائه نکردن تصویری از یک فضای پردازشی کامل برای برنامه‌هایی است، که برروی میزبان هستند.

مقایسه کانتینرها با ماشین‌های مجازی

مقایسه کانتینرها با ماشین‌های مجازی

در اولین معماری‌های ایجادشده توسط گوگل و سرویس ویدیو Netflix، سرویس‌های میکرو توابعی هستند که می‌توانند بدون انحصارداشتن به هیچ برنامه‌ای، عمل کنند. این سرویس‌ها که درشکل توابعی بودند که می‌توانند ازطریق API ها متصل شوند و خروجی‌های مستقلی داشتند، بارکاری کوچکی اعمال می‌کنند. چنین توابعی نه تنها در گذشته و در برنامه‌های یکپارچه بلکه در برنامه‌های امروزی نیز چنین توابعی مانندقبل مکررا معرفی می‌شود. دریک معماری میکروسرویس، این توابع بیشتر شبیه کتابخانه‌ها و عناصری بودند که سرویس‌های موردنیاز را برای برنامه‌هایی که نیاز دارند، فراهم می‌کنند.
مقیاس بارکاری کانتینرشده کاملا از نظر پردازشی با بارکاری ماشین‌مجازی متفاوت است. کانتینرهای پیشرفته تنها شامل سرویس‌هایی هستند که توابع آنها نیاز دارند، اما یکی از این سرویس‌ها سرویس وب است، مانند وب‌سرور NGINX که به عنوان یک Load balancer هم عمل می‌کند. یک سیستم هماهنگ‌کننده مانند Google Kubernetes یا Mesosphere Marathon قادر به تعیین الگوهای مبتنی بر ترافیک، مقیاس‌کردن اندازه و تعداد کانتینرها در موقع نیاز، اضافه‌کردن کانتینر به صورت خودکار و حذف آنها از سیستم باشد.
ویژگی کلیدی که کانتینر را از ماشین‌مجازی جدا میکند، طبیعت زودگذر کانتینر است. در یک سیستم هماهنگ‌کنند، چند نسخه کپی از کانتینر باهم وجود دارند. کانتینرهایی که fail میشوند می‌توانند حذف و جایگزین شوند بدون اینکه تاثیر قابل توجهی بر سرویس ارائه‌شده بگذارند. در اصلی‌ترین محیطها که ارائه سرویس به صورت مداوم موردنیاز است، نسخه‌های جدید یا تجربی کانتینرها میتوانند درکنار نسخه‌های قدیمی وجودداشته باشند. اگر یک مورد تجربی fail شد، تمام نسخه‌های جدیدتر می‌توانند rollback کرده و جایگزین شوند. چنین روش‌های متفاوت، گسترده و جدیدی در بحث مدیریت دیتاسنترها کلید علاقه شدید صنایع تلکام به Docker و فناوری‌های مرتبط به آن در چندماهی است که وجود آمده‌اند.
در جدول زیر مقایسه‌ای از این دو فناوری آورده شده است: مقایسه کانتینرها با ماشین‌های مجازی

کانتینر (Container)ماشین‌های مجازی (VM)
مجازی‌سازی در سطح سیستم عاملمجازی‌سازی در سطح سخت‌افزار
بارکاری سبکبارکاری سنگین
سرویس‌دهی Real-time و مقیاس‌پذیریسرویس‌دهی کند
عملکرد Nativeعملکرد محدود
کاملا ایزوله‌شده و ایمنایزوله‌شده در سطح پردازش‌ها (از این رو ایمنی کمتری دارد)

 

تصویری جالب برای درک بهتر:

منبع:

SDXCENTRAL.COM

t.me/SDNCentral
 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *