بررسی معماری ماشین مجازی با کانتینر
مفهوم Containerization رویکرد جدیدی در زمینه ارائه نرمافزار (Application delivery) محسوب میشود که به دنبال حداکثر سازی استفاده از منابع سیستم با استفاده از مجازیسازی سیستم عامل است. چند سالی از معرفی این فناوری نگذشته و در حال حاضر در حال تکامل تدریجی است. کانتینرها برخلاف ماشینهای مجازی از یک سیستم عامل مشترک استفاده میکنند و از همین طریق استفاده از منابع پردازشی، ذخیره سازی و شبکه را کاهش می دهند. اما چرا این فناوری معرفی شده است و آیا این تکنولوژی جایگزین ماشینهای مجازی خواهد شد؟ هر دو معماری در جای خود مفید و کاربردی هستند و قصد داریم در این مقاله به این سوال پاسخ بدهیم و معماری این دو راهکار را مقایسه کنیم.
معماری ماشینهای مجازی
ماشینهای مجازی در سطح Enterprise بر روی Hypervisor یا یک لایه مجازی (VMM) استقرار مییابند و از طریق این لایه به صورت مستقیم با سختافزار در ارتباط هستند. وظیفه کنترل تمامی منابع از پردازش تا شبکه بر عهده این لایه است و ماشینهای مجازی تمامی درخواستهای خود را بایستی با اجازه hypervisor دریافت نمایند. این سبک از معماری این امکان را فراهم میسازد تا hypervisor برای ماشینهای مجازی نقش سخت افزار مجازی شده را ایفا کند و امکان نصب و راهاندازی هر نوع سیستم عامل بر روی hypervisor فراهم شود. ماشینهای مجازی میتوانند انواع سیستم عاملهای مختلف و متنوع را داشته باشند و به جهت پشتیبانی مستقیم این سیستم عاملها توسط hypervisor قابلیتهایی نظیر DRS، HA، FT و یا Replication در اختیار ماشینها قرار بگیرد. همچنین از لحاظ امنیتی هر یک از ماشینها اطلاع درستی از نوع منابع و ماشینهای مجازی استقرار یافته دیگر در زیرساخت مجازی را ندارند و تنها مشغول ارائه سرویسی هستند که برای آن راهاندازی شدهاند. بدین سبک هیچ گونه تهدید بالقوهای در ماشینهای مجازی مستقر در زیرساخت به صورت مستقیم سایر ماشینهای مجازی را آسیب پذیر نمیسازد.
معماری کانتینرها
کانتینرها به دنبال دسترسی سریع و استفاده حداکثری از منابع هستند. از طریق مجازی سازی سیستم عامل یک سیستم عامل مابین چندین کانتینر به اشتراک گذاشته میشود و بدون نیاز به نصب، راهاندازی و پیکربندی کانتینر سایر کانیتنرها میتوانند از یک سیستم عامل مشترک شده استفاده کنند. در این رویکرد با استقرار یک لایه که نقش containerization engine را برای کانتینرها ایفا میکند، زمان بارگذاری کاهش و پردازش دادهها افزایش چشم گیری مییابد. علاوه بر این سرعت تهیه پشتیبان و بازیابی کانتینرها و ظرفیت deploy این بارهای کاری در تناسب به ماشینهای مجازی افزایش قابل توجهی خواهد داشت. در این سبک نرمافزار کاربردی نیز در کنار سیستمعامل تحویل داده میشود و برخی از مراحل توسعه نرمافزار نیز با استفاده از این معماری با به روزرسانی کانتینر اصلی بسیار تسهیل میشود.
نتایج بررسی
در هر دو رویکرد انتزاعی سازی بارهای کاری روی میدهد و هر دو فناوری به دنبال بهینهسازی استفاده از منابع هستند. جمعبندی این دو معماری نشان میدهد که هیچ کدام از این دو رویکرد نمیتوانند بزودی زود بر دیگری غالب شود و هر یک کاربرد تخصصی خود را دارند. ماشینهای مجازی برای بارهای کاری سنگین و اجرای نرمافزارهای حیاتی طراحی شدهاند و امکاناتی نظیر HA و DRS و غیره را از طریق بکارگیری bare-metal hypervisor فراهم میکنند که در معماری Containerization عملی نیست. علاوه بر این اجرای ایزوله شده ماشینهای مجازی سبب میشود تا امنیت بارهای کاری کاملا تامین شود و هیچ گونه منبعی با سایر همسایگان مجازی مشترک نشود. کانتینرها به جهت حجم کم، استفاده از حداقل منابع و سفارشیسازی سبب تسهیل ارائه نرمافزارهای کوچک به کاربران میشوند و میتوانند در فضای کوچکی به سرعت گسترش یابند و مورد استفاده قرار گیرند. از لحاظ امنیتی استفاده از سیستم عامل مشترک یکی از نقاط ضعف اساسی معماری کانتنر محسوب میشود و در صورتی که هر گونه حملهای در سطح سیستم عامل صورت پذیرد تاثیر این حمله در تمامی instance های دیگر به سرعت قابل مشاهده و گسترش است.
در ادامه به بررسی راهکارهای Containerization موجود خواهیم پرداخت تا با سیر تکامل این تکنولوژی بیشتر آشنا شویم.