ماشین مجازی (Virtual Machine) یک دستگاه مجازی و نرمافزاری شبیه به یک کامپیوتر واقعی است که امکان اجرای سیستمعاملها و اپلیکیشنهای مختلف روی یک دستگاه فیزیکی مثل کامپیوتر دسکتاپ یا سرور فیزیکی را فراهم میکند. در این مطلب قصد داریم ببینیم ماشین مجازی دقیقاً چیست، چگونه کار میکند، چند نوع است، چه کاربردهایی دارد و مزایا و معایب آن چیست.
ماشین مجازی چیست؟
ماشین مجازی یک دستگاه مجازی طراحیشده برای اجرای سیستمعاملها و اپلیکیشنهای مختلف است که در قالب یک نرمافزار روی یک دستگاه فیزیکی با سیستمعاملی یکسان یا متفاوت با سیستمعامل موردنظر برای اجرا با این دستگاه مجازی، نصب میشود و با استفاده از آن میتوان یک دستگاه مجازی با سیستمعامل مجزا را روی یک دستگاه واقعی مثل کامپیوتر دسکتاپ ایجاد و شبیهسازی کرد.
ماشین مجازی برای اجرای یک سیستمعامل خاص نیازی به دسترسی به سختافزارهای خاص طراحیشده برای اجرای آن سیستمعامل ندارد و می تواند با هر سختافزاری سیستمعاملهای مختلف را اجرا کند.
کاربران ماشینهای مجازی در هنگام استفاده از آنها احساس میکنند در حال استفاده از یک دستگاه واقعی با سیستمعامل موردنظر هستند؛ بهعنوانمثال زمانی که اندروید را با استفاده از ماشین مجازی روی ویندوز نصب کنید، در هنگام استفاده از آن ماشین مجازی تصور میکنید در حال استفاده از یک دستگاه اندرویدی واقعی هستید.
ماشینهای مجازی چگونه کار میکنند؟
پس از نصب ماشین مجازی، محیطی فراهم میشود که ماشین میتواند سیستمعامل خود را در آن بدون وابستگی به دستگاه میزبان (دستگاه فیزیکی نصبشده روی آن) یا سایر ماشینهای مجازی، اجرا کند. سیستمعامل در حال اجرا در ماشینهای مجازی بهعنوان «سیستمعامل مهمان» (guest OS) شناخته میشود.
سیستمعامل مهمان میتواند با سیستمعامل دستگاه میزبان یا سایر ماشینهای مجازی ایجادشده روی دستگاه میزبان یکسان باشد یا با آنها تفاوت داشته باشد. یک دستگاه میزبان مثل یک کامپیوتر میتواند همزمان از چند دستگاه مجازی در حال اجرای سیستمعاملها و اپلیکیشنهای مختلف میزبانی کند و در صورت استفاده همزمان از چند ماشین مجازی تداخلی بین فعالیت سیستمعاملهای آنها ایجاد نمیشود و در فرایند فعالیت این ماشینها هیچ مشکلی به وجود نمیآید.
ماشینهای مجازی در حین فعالیت خود به منابع سختافزاری و نرمافزاری دستگاه میزبان خود وابسته است؛ اما این منابع ابتدا مجازی میشوند و سپس بین ماشینهای مجازی متناسب با نیاز آنها توزیع میشوند. کاربران در حین استفاده از ماشینهای مجازی مختلف و سیستمعاملهای در حال اجرا در آنها اصلاً احساس نمیکنند در حال کار کردن با سیستمعاملها و دستگاههای مجازی هستند.
سیستمعاملهای در حال اجرا در ماشینهای مجازی و اپلیکیشنهای موجود در آنها میتواند درست مانند سیستمعاملها و اپلیکیشنهای حقیقی بهروزرسانی شوند و حذف یا نصب اپلیکیشنها روی این سیستمعاملها نیز بهراحتی امکانپذیر است؛ انجام این فرایندها بههیچوجه سیستمعامل دستگاه میزبان یا سیستمعامل سایر ماشینهای مجازی را تحت تأثیر قرار نمیدهد.
جالب است بدانید که منابع سختافزاری سیستم مانند سیپییو، رم و هارد میتوانند در ماشین مجازی درست به همان شکلی که توسط سیستم فیزیکی استفاده میشوند، به کار گرفته شود؛ البته ممکن است گاهی اوقات مشکلاتی مثل اجرا نشدن اپلیکیشنها در محیط نرمافزاری ماشینهای مجازی رخ دهد؛ اما بهندرت شاهد چنین مشکلاتی هستیم.
میزبانی از ماشینهای مجازی توسط کامپیوتر نیازمند استفاده از یک نرمافزار «هایپروایزر» (hypervisor) است (کلمه هایپروایزر به معنی ناظر ارشد یا فرا ناظر است). این نرمافزار سیپییو، رم، هارد، شبکه و سایر قطعات نرمافزاری کامپیوتر را بهصورت مجازی شبیهسازی میکند و با این روش منابع سختافزاری لازم را متناسب با نیاز ماشینهای مجازی در اختیار آنها قرار میدهد.
این نرمافزار میتواند از چند پلتفرم سختافزاری مجازی پشتیبانی کند که هر یک از آنها بهصورت کاملاً مستقل و مجزا از یکدیگر عمل میکنند. هایپروایزر با استفاده از این پلتفرمها اجرای همزمان سیستمعاملهایی مانند لینوکس و ویندوز سرور (مجموعه سیستمعاملهای سرور که توسط مایکروسافت طراحی و تولید میشود) روی یک دستگاه فیزیکی را امکانپذیر میکند.
هایپروایزر منابع موجود را مدیریت میکند و آنها را به ماشین یا ماشینهای مجازی در حال کار روی دستگاه اختصاص میدهد. در ضمن این نرمافزار در زمانبندی تعیین روش اختصاص منابع بر اساس نحوه پیکربندی هایپروایزر و ماشینهای مجازی را نیز بر عهده دارد و قادر است منابع اختصاصدادهشده به هر یک از ماشینهای مجازی را بر اساس تغییر نیازهای آنها تغییر دهد.
اکثر هایپروایزرها را میتوان به دو دسته اصلی تقسیم کرد که شامل موارد زیر میشود:
- هایپروایزر برهنه (bare-metal hypervisor): این نوع هایپروایزر مستقیماً روی دستگاه فیزیکی میزبان اجرا میشود و به سختافزار آن دسترسی مستقیم دارد. این نوع هایپروایزر معمولاً روی کامپیوترهای سرور اجرا میشود و نسبت به نوع دوم آن کارآمدتر است و عملکرد بهتری دارد و به همین دلیل برای ایجاد ماشین مجازی روی کامپیوترهای سرور و دسکتاپ و همچنین مجازیسازی اپلیکیشنها گزینه مناسبی هستند. Hyper-V مایکروسافت و VMware ESXi نمونهای از هایپروایزر برهنه هستند.
- هایپروایزر میزبانیشده (hosted hypervisor): این نوع هایپروایزر روی سیستمعامل دستگاه میزبان نصب و برای مدیریت فراخوانیهای مختلف برای دسترسی به منابع سختافزاری مختلف استفاده میشود. هایپروایزر میزبانیشده معمولاً برای کاربردهای خاص روی دستگاههای کاربران استفاده میشود؛ بهعنوانمثال ممکن است یک توسعهدهنده برای ایجاد یک محیط خاص برای ساخت یک اپلیکیشن، از هایپروایزر میزبانیشده استفاده کند یا یک فرد تحلیلگر داده برای آزمایش کردن اپلیکیشنی در محیط ایزوله نیز آن را به کار گیرد.
منظور از محیط ایزوله محیطی است که با محیط نرمافزاری دستگاه فیزیکی و محیط سایر ماشینهای مجازی هیچ ارتباطی ندارد و VMware Workstation و Oracle VirtualBox نمونههایی از هایپروایزر میزبانیشده هستند.
بسیاری از هایپروایزرها نیازمند سختافزار خاصی نیستند؛ اما کامپیوتری که آنها را اجرا میکند باید منابع لازم برای پشتیبانی از ماشینهای مجازی و همچنین پشتیبانی از فعالیتهای عملیاتی و هایپروایزرها و فعالیتهای عملیاتی خود دستگاه فیزیکی میزبان را در اختیار داشته باشد؛,
کاربردهای ماشینهای مجازی
سازمانهای مختلف بهطور معمول برای پشتیبانی از میزان گستردهای از کاربردهای مختلف و همچنین افزایش همچنین افزایش تحمل سیستم در برابر سطوح مختلف بار کاری، در سرورهای خود از ماشینهای مجازی استفاده میکنند. مهمترین کاربردهای ماشینهای مجازی به شرح زیر است:
یکپارچهسازی سرورها و استفاده بهتر از منابع سختافزاری
یک سرور میتواند فعالیت همزمان چند ماشین مجازی با یکدیگر را امکانپذیر کند و به همین دلیل سازمانها میتوانند روی یک سرور از منابع مختلف بهصورت کارآمدتری استفاده کنند. با این روش نیاز به توزیع بار کاری در میان سرورهای مختلف که معمولاً بار کاری ایجادشده روی آنها کمتر از ظرفیت آنها است، کمتر میشود. سازمانها میتوانند با این روش هزینههای عملیاتی خود را کمتر و سرمایه خود را حفظ کنند.
ایجاد محیطهای ایزوله
ماشینهای مجازی میتوانند سیستمعاملهای مختلفی را روی یک سرور اجرا کنند. سازمانها میتوانند بسته به نیاز و اهداف موردنظرشان سیستمعاملهای موردنظرشان را در محیطهای ایزوله توسط ماشینهای مجازی اجرا کنند و برای انجام این کار نیازی به خریداری چند سرور برای ایجاد چند محیط مختلف نیز نیست.
تسهیل تخصیص منابع بین بخشهای مختلف متناسب با فشار کاری روی آنها
استفاده از ماشینهای مجازی به دلیل امکانپذیر کردن این امر در سیستمهای رایانش ابری و سیستمهای زیرساختی چند پوششی (hyper-converged infrastructure یا HCI)، امری ضروری است.
سیستمهای زیرساختی چندپوششی، سیستمهای یکپارچه نرمفزاری هستند که تمام عناصر سیستمهای متداول زیرساختی مثل دیتاسنترها، سیستمهای ذخیرهسازی و محاسباتی و شبکه و مدیریت در آنها با یکدیگر ترکیب شدهاند
افزایش امنیت سرورها بهمنظور محافظت از آنها در برابر تهدیدات سایبری
چنانچه هکرها به یک ماشین مجازی دسترسی پیدا کنند، میتوان آن را بهراحتی حذف کرد یا دادههای آن را پاک کرد و آخرین بکاپ گرفته شده را در آن بازیابی کرد. به دلیل اینکه ماشین مجازی دارای محیط ایزوله است و کاملاً مستقل از دستگاه فیزیکی میزبان و سایر ماشینهای مجازی فعال در یک سیستم عمل میکند، درصورت نفوذ هکرها به کل سیستم تنها ماشین هکشده در معرض خطر قرار دارد و سایر ماشینها از خطر مصون هستند.
تسهیل مدیریت محیطهای مختلف اختصاصدادهشده به اجرای سیستمعاملهای مختلف
به دلیل اینکه در سیستمهای دارای چند سرور، بار کاری بین سرورهای مختلف تقسیم میشود، برای انجام عملیات در آنها از سیستمهای فیزیکی کمتر استفاده میشود. در اکثر پلتفرمهای مجازیسازی مدیریت ماشینهای مجازی از طریق یک رابط کاربری امکانپذیر است.
نکته مهمی که در مورداستفاده از ماشینهای مجازی باید بدانید این است که اگرچه این ماشینها و هایپروایزرها نیاز به سختافزار خاصی ندارند؛ اما درصورتیکه بخواهید از کامپیوتری برای میزبانی چند ماشین مجازی استفاده کنید، کامپیوتر موردنظر در مقایسه با کامپیوترهای سرور و دسکتاپ معمول و متداول نیازمند اینترنتی با پهنای باند بیشتر و همچنین حافظه و قدرت پردازشی بیشتر است.
در ضمن هر یک ماشینهای مجازی در حال فعالیت روی دستگاههای فیزیکی میزان متفاوتی از منابع را مصرف میکنند؛ بهعنوانمثال ممکن است یک ماشین فضای زیادی از حافظه کامپیوتر میزبان را اشغال کند و ماشین دیگر فضای کمتری را نسبت به آن اشغال کند.
به همین دلیل متخصصان IT باید در سیستمهای دارای چند ماشین مجازی، میزان مصرف هر یک از آنها را متناسب با منابع موجود و در دسترس متوازن کنند. پلتفرمهای مجازیسازی این فرایند را آسانتر کردهاند.
دستهبندی ماشینهای مجازی
ماشینهای مجازی بر اساس هایپروایزر مورداستفاده برای مدیریت آنها یا میزان بار کاری که پشتیبانی میکنند به دو دسته تقسیم میشوند که به شرح زیر است:
- ماشین مجازی پردازشی (Process VM): ماشین مجازی پردازشی یک محیط برنامهنویسی موقت است که به هیچ پلتفرمی وابسته نیست و برای اجرای یک عملیات پردازشی بهعنوان یک اپلیکیشن استفاده میشود. ماشین مجازی پردازشی در هنگام آغاز فعالیت پردازشی ایجاد و در هنگام پایان آن، نابود میشود.
ماشین مجازی جاوا (Java Virtual Machine) که بخشی از پلتفرم جاوا است و ماشین مجازی زمان اجرای زبان مشترک (Common Language Runtime) که برای چهارچوب دات نت (.NET Framework) استفاده میشود، نمونههایی از ماشینهای مجازی پردازشی هستند
- ماشین مجازی سیستمی (System VM): این نوع ماشین مجازی یک محیط کاملاً مجازیسازیشده است که روی یک دستگاه فیزیکی پشتیبانی میشود و سیستمعامل خودش را اجرا میکند. این دسته از ماشینهای مجازی درست مانند دستگاههای فیزیکی یک محیط کامل برای اجرای اپلیکیشنها و سرویسها ایجاد میکنند. آنها برای مجازیسازی منابع سختافزاری و قرار دادن آنها در اختیار ماشینهای مجازی، وابسته به یک هایپروایزر هستند. ماشینهای مجازی VMware vSphere و Microsoft Hyper-V نمونههایی از ماشینهای مجازی سیستمی هستند.
مزایای ماشینهای مجازی
ماشینهای مجازی به دلیل برخورداری از چند مزیت شاخص بهصورت گسترده در اندازههای مختلف برای کاربردهای مختلف توسط سازمانها استفاده میشوند: مزایای این ماشینها به شرح زیر است:
- کاهش نیاز به استفاده از سیستمهای سختافزاری
- استفاده بهینهتر ماشینهای مجازی از منابع سختافزاری در مقایسه با دستگاههای فاقد سیستمعامل و دارای دسترسی مستقیم به سختافزارها
- اجرای همزمان انواع مختلف اپلیکیشنها و سیستمعاملها روی یک سرور
- حذف نیاز به استفاده از چند سرور مختلف
- برطرف کردن نگرانیهای مربوط به حفاظت از امنیت سیستمهای سختافزاری در مقابل حملات سایبری و نفوذ هکرها
- آسان بودن فرآیند انتقال ماشینهای مجازی بین سرورهای مختلف و همچنین اختصاص دادن آنها به سرورهای مختلف و کپی کردن آنها (درضمن انجام این فرایندهای مرتبط با انتقال ماشینهای مجازی در سیستمهای ابری و سیستمهای ایجادشده در شبکههای محلی نیز آسان است)
- تسهیل مدیریت به شیوههای مختلف و تسهیل بهکارگیری ماشینهای مجازی توسط مدیران سیستمها، توسعهدهندگان، افراد فعال در حوزه آزمایش و بررسی اپلیکیشنها
- سهولت مدیریت ماشینهای مجازی از طریق یک رابط کاربری مرکزی و متمرکزشده
- تسهیل فرایند بکاپگیری توسط مدیران و همچنین تسهیل بهکارگیری وظایف ساده و پایه مدیریتی سیستم توسط مدیران سیستم
- ایجاد محیط ایزوله شده و کنترلشده که باعث ایجاد یک لایه امنیتی برای کل سیستم و محافظت از آن در برابر هکرها و حملات سایبری میشود.
- تسهیل امکانپذیر شدن دسترسی مجدد به زیرساختهای IT پس از وقوع بلایای طبیعی
- آسان بودن فرآیند بازیابی و بازگرداندن یک ماشین مجازی در مواقعی که مورد حمله سایبری قرار گرفته یا آسیب دیده است.
نحوه ایجاد یک ماشین مجازی
انتخاب یک فرایند مناسب ایجاد یک ماشین مجازی به پلتفرم مجازیسازی مورداستفاده بستگی دارد. بسیاری از پلتفرمها دارای یک ویزارد نرمافزاری هستند که مراحل لازم برای ایجاد و بهکارگیری یک ماشین مجازی در آنها توضیح داده شده است؛ بهعنوانمثال در ماشین مجازی VMware vSphere، ادمین (مدیر سیستم) میتواند ماشین مجازی را با استفاده از یک قالب (Template) یا یککپی (Clone) ایجاد یا آن را از نو ایجاد کند.
ماشین مجازی vSphere همراه با یک ویزارد مجازی جدید تحت عنوان New Virtual Machine wizard ارائه شده که توضیحات لازم در آن برای ایجاد یک ماشین مجازی، بهصورت مرحلهبهمرحله بیان شده است.
در پلتفرم مجازیسازی Red Hat Virtualization روش کاملاً متفاوتی برای ایجاد یک ماشین مجازی مطرح شده است بهعنوانمثال کاربر باید برای اینجا یک ماشین مجازی لینوکس مراحل زیر را به ترتیب دنبال کند:
- ایجاد یک ماشین مجازی خالی
- افزودن یک حافظه ذخیرهسازی مجازی برای ذخیره دادهها
- افزودن یک رابطه کاربری شبکه برای متصل کردن ماشین مجازی به شبکه
- نصب سیستمعامل مهمان
- ثبت کردن ماشین مجازی با یک شبکه تحویل محتوای دیجیتالی (Content Delivery Network) و افزودن اشتراکات لازم به این شبکه
- نصب هرگونه عامل (Agent) یا درایور مهمان لازم
به دلیل اینکه ایجاد یک ماشین مجازی در هر پلتفرم مجازیسازی به روش خاصی انجام میشود، کاربر باید قبل از ایجاد و بهکارگیری هرگونه ماشین مجازی، دستورالعملهای لازم در پلتفرم مجازیسازی موردنظر را بخواند و آن ها را انجام دهد.
مدیریت ماشینهای مجازی
در هنگام ایجاد ماشینهای مجازی باید بهخوبی آنها را مدیریت کنید و مراقب باشید اینجا تعداد زیادی از آنها روی یک سیستم فیزیکی باعث افزایش فشار روی سختافزارها و ازکارافتادن آنها نشود. در ضمن باید بهصورت دورهای از اطلاعات ماشینهای مجازی بکاپگیری شود تا در صورت آسیب دیدن ماشینهای مجازی یا حمله سایبری به آنها، بازیابی اطلاعات بهراحتی امکانپذیر باشد.
معرفی تعدادی از بهترین پلتفرمهای مجازیسازی
بهترین پلتفرمهای مجازیسازی متعلق به ویامویر (VMware)، سیتریکس (Citrix)، مایکروسافت و رد هت (Redhat) است که به شرح زیر هستند:
- VMware vSphere: این پلتفرم مجازیسازی بهصورت گسترده پیادهسازی شده است و میتواند از اپلیکیشنهای کارآمدی مثل SAP HANA (اپلیکیشن مدیریت پایگاه داده یا دیتابیس) پشتیبانی کند.
- Citrix Hypervisor: این هایپروایزر یک هایپروایزر کارآمد محسوب میشود که برای اجرای اپلیکیشن مجازی و همچنین مدیریت بار کاری روی کامپیوترهای دسکتاپ و همچنین بار کاری روی سرور های لینوکس و ویندوز بهینهسازی شده است.
- Microsoft Hyper-V: این پلتفرم مجازیسازی برای مجازیسازی سختافزارها به کار میرود و سیستمعاملهای سرور ویندوز مختلفی را ایجاد میکند که ادمینها با استفاده از آن میتوانند ماشینهای مجازی را ایجاد و مدیریت کنند. Hyper-V هم از ماشینهای مجازی لینوکس و هم از ماشینهای مجازی ویندوز پشتیبانی میکند و دارای ویژگیهای مفیدی است که انجام فرایندهایی مثل انتقال دادن، توزیع و کپی کردن ماشینهای مجازی را آسان میکند.
- Red Hat Virtualization: این پلتفرم یک پلتفرم مجازیسازی سازمانی است که میتواند از اپلیکیشنهای استراتژیک و لازم برای موفق شدن یک کسبوکار و همچنین فعالیتهایی که منابع سختافزاری را بهشدت مصرف درگیر خود میکند، پشتیبانی کند.
پلتفرمهای مجازیسازی متنباز بسیار زیاد دیگری هم وجود دارد که صحبت در مورد آنها و معرفی آنها در این مقاله نمیگنجد.
تفاوت ماشین مجازی با کانتینر (Container)
کانتینرها هم شبیه به ماشینهای مجازی هستند با این تفاوت که آنها تنها میتوانند سیستمعامل را مجازی کنند و قادر به مجازیسازی منابع سختافزاری نیستند. کانتینرهایی که دربردارنده کدها، ابزارهای سیستم و کتابخانههای سیستمی هستند، میتوانند مانند ماشین مجازی چند اپلیکیشن را روی یک سیستمعامل اجرا کند.
کانتینرها در مقایسه با ماشینهای مجازی منابع سختافزاری کمتری را مصرف میکنند. دستگاه میزبان کانتینر باید از سیستمعامل موردنظر برای اجرای شدن با کانتینر پشتیبانی کند؛ اما ماشین مجازی درصورتیکه دستگاه از سیستمعاملهای موردنظر پشتیبانی نکند، باز هم میتواند سیستمعاملهای مختلفی را اجرا کند.
در ضمن ماشین مجازی در مقایسه با کانتینر از امنیت بیشتری برخوردار است و در صورت لزوم تعدادی از آنها میتوانند برای برقراری ارتباط با یکدیگر در یک سیستم پیکربندی شوند. همچنین این ماشینها در مقایسه با کانتینرها در زمینه اجرای همزمان چند اپلیکیشن عملکرد بهتری دارند لازم به ذکر است ماشین مجازی و کانتینر میتوانند همراه با یکدیگر استفاده شوند تا بهترین نتیجه ممکن حاصل شود.