Container Vs VMs

Container Vs VMs

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

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

بارکاری ایجاد شده توسط کانتینرها
مفهوم کانتینر به عنوان یک گزینه دوم برای محیطهای مجازی‌سازی توسعه‌داده نشده، بلکه دراصل روشی بوده برای جداکردن فضاهای نام در سیستم‌عامل لینوکس به منظور اهداف امنیتی. اولین محیطهای لینوکس، شباهت بسیاری به سیستم‌های کانتینر پیشرفته داشتند چراکه بخش‌های تولیدشده داخل برنامه‌های مشکوک به موارد امنیتی و صحت میتوانستند بدون هیچگونه خطری مرتبط با هسته (kernel) اجرا شوند. هسته هنوز مسئول اجرا بود، گرچه یک لایه انتزاعی بین هسته و بارکاری وارد شد.
زمانی که محیط داخل این بخش‌ها به‌دلایل افزایش کارایی به حداقل رسید، ایده ایجاد مفهوم این بخش‌ها به صورت قابل‌حمل بوجودآمد. اولین کانتینر رسمی ایجادشده که هنوز به عنوان یک سیستم مستقل نبود و به عنوان بخشی از لینوکس توسعه‌یافت، LCX نام داشت. 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 و فناوری‌های مرتبط به آن در چندماهی است که وجود آمده‌اند.

در جدول زیر مقایسه‌ای از این دو فناوری آورده شده است:

 

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

 

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

منبع: SDXCENTRAL.COM

پاسخ دهید

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