مقایسه بین Virtual Machine و تکنولوژی Container
در این ویدئو قصد داریم تا دو تکنولوژی VM و Container را مقایسه کنیم. در وهلهی اول، به بررسی هر یک میپردازیم و ممکن است در نگاه اول مشابه یکدیگر باشند اما اگر با دقت به آن نگاه کنیم میبینیم که از نظر ساختار و شماتیک کاملا متفاوت هستند.
در هر یک از آن ها 3 سطح کلی وجود دارد که شامل Physical Infrastructure (زیر ساخت های فیزیکی)، OS (سیستم عامل) و App (اپلیکیشن) است. اگر بخواهیم محل قرارگیری VM را مشخص کنیم، در جایی بین OS و زیر ساخت های فیزیکی قرار خواهد گرفت که به آن Interface یا VM Level گفته میشود و دقیقا در زیر آن، Hyperisor وجود دارد که VM بر روی آن اجرا میشود.
Hypervisor میتواند vSphere، NSX و یا VSAN (درصورتی که مبحث VMware SDDC را مد نظر داشته باشیم و بخواهیم کل زیر ساخت ها را مجازی سازی کنیم) باشد.
بدین ترتیب OS بر روی VM اجرا میشود و این یعنی از طریق لایه سخت افزار مجازی بار OS به شکلی متعادل و متناسب پخش خواهد شد. در این صورت، به تعداد محدودی از NIC و Storage نیاز خواهیم داشت تا به عنوان Interface باشند و از این رو به درایورهای محدودی نیاز داریم تا بر روی OS نصب شوند. این باعث میشود تا سیستم عامل در حالت ایده آل و پایداری قرار گیرد و با زیرساخت های فیزیکی تطابق و سازگاری بهتری داشته باشد.
ویژگی دیگر VM، قابلیت تغییر پذیری آن است. یعنی میتوان به هر شکلی که بخواهیم و با توجه به توانایی OS و کارهایی که باید انجام دهد، آن را تغییر دهیم. این در حالی است که هیچگونه محدودیتی از لحاظ زیرساخت های فیزیکی نخواهیم داشت مانند مجازی سازی سرورها که نمونه خوبی از قابلیت های متنوعی است که VM به ما ارائه میدهد و بسیار رایج است.
اکنون که با وظیفه VM به خوبی آشنا شدیم به سراغ Hypervisor میرویم.
Hypervisor سیستمی است که به طور پایدار کار سنگینی را به مدت طولانی انجام میدهد و وظیفه تعامل با انواع NIC Card هایی را دارد که دارای سخت افزارهای مختلفی هستند. در اینجا میتوان فهمید که Hypervisor چه وظیفهی مهمی را برعهده دارد و چگونه با سیستم عامل ارتباط برقرار میکند. ما عملیات مورد نظر را در Hypervisor اجرا خواهیم کرد و در نهایت OS آن را به راحتی اجرا خواهد کرد.
در ادامه به سراغ Container میرویم تا با ساختار آن و وظیفهای که بر عهده دارد آشنا شویم. مزیت بزرگ Container این است که میتوان وابستگی Application به OS را به شکل package درآوریم و آن را فقط در یک Container خلاصه کنیم. یعنی در پایین لایه Application، OS Dependencies قرار خواهد گرفت تا آن را به شکل پکیج درآورد و OS Dependencies را در لایه OS نداشته باشیم. به عبارتی دیگر، تمامی وابستگی Application در قالب پکیجی از فایل Docker و در جایی که
Container Image اجرا میشود قرار خواهد داشت. پس میتوان فهمید که ساختار متفاوتی در هر دو وجود دارد و از همین رو میتوان هر دو آن ها را با یکدیگر ادغام نماییم تا با محدودیتی مواجه نشویم.