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

در مورد Container و مطالب مرتبط با آن نظیر Docker بسیار صحبت شده است. آنچه به‌عنوان مزیت برای Container مطرح می‌شود (سرعت ساخت و راه‌اندازی) بی هزینه نیست. «یکی از نقاط ضعف Container در مقایسه با ماشین مجازی ایزوله سازی ضعیف‌تر آن است؛ تا این حد که برای رسیدن به ایزوله سازی درست Container ها را در ماشین مجازی اجرا می‌کنند.»

این مقاله بر روی مشکل سرعت ساخت و اجرای ماشین مجازی تمرکز کرده است. مجموعه راهکارهای ارائه‌شده در این مقاله منجر به ساخت اکوسیستمی مبتنی بر Xen شده است که در آن یک ماشین مجازی در زمان ۲.۳ میلی‌ثانیه بوت (سریع‌تر از Docker!) می‌شود. زمان موردنیاز برای مهاجرت (migration) ماشین مجازی ۶۰ میلی‌ثانیه و زمان لازم برای pause و resume آن به ترتیب ۳۰ و ۲۵ میلی‌ثانیه است.  

مشخصات مقاله

نوع: کنفرانس (SOSP17)
نویسندگان: Filipe Manco, Costin Lupu, Florian Schmidt, Jose Mendes, Simon Kuenzer, Sumit Sati, Kenichi Yasukata, Costin Raiciu, Felipe Huici
لینک دانلود مقاله: اینجا
لینک دانلود اسلاید: اینجا

ویدیو ارائه در کنفرانس (لینک Youtube)

مسئله

مسئله ساده است؛ آیا می توان در عین حفظ ویژگی isolation برای ماشین مجازی به کارایی (سرعت ساخت و اجرای) Container دست یافت؟  

نوآوری

این مقاله نوآوری خیلی ویژه ای جز دقت در فرایند ساخت و راه اندازی ماشین مجازی بر روی Xen و یافتن گلوگاه های اتلاف وقت در آن ندارد! این مقاله نشان می دهد قدمت یک پروژه لزوما به معنی کارایی بالای آن نیست. همچنان می توان با تغییراتی در طراحی و پیاده سازی یک نرم افزار به نسخه کاراتری دست یافت. راه کارهای افزایش کارایی ماشین مجازی پیشنهاد شده در این مقاله به صورت فهرست وار عبارت است از:

  1. کاهش اندازه فایل image و مصرف حافظه ماشین مجازی؛ اغلب ماشین های مجازی برای راه اندازی یک برنامه کاربردی مورد استفاده قرار می گیرند و در حقیقت سرورهای موجود منابع را هدر می دهند. در این مقاله دو روش پیشنهاد شده است یکی استفاده از Unikernel و دیگری استفاده از ابزاری به نام Tinyx. برای تولید یک توزیع لینوکس کوچک از ابزار Tinyx استفاده شده است. میزان مصرف حافظه لینوکس ساخته شده به وسیله Tinyx برابر با ۱.۶ مگابایت (در مقایسه با ۸ مگابایت Debian استفاده شده در آزمون) است.
  2. باز طراحی Xen با حذف XenStore به عنوان مرکز نگهداری اطلاعات مدیریت ماشین های مجازی؛ به دلیل ذات متمرکز این بخش با افزایش تعداد ماشین های مجازی توجهی تعاملات با XenStore به طور قابل توجهی افزایش می یابد. چون Xen با دید بهینه سازی کارایی طراحی نشده است، پروتکل بکارگرفته شده در XenStore پرهزینه است. در این کار تعاملات متمرکز با XenStore به ارتباطات مستقیم با استفاده از حافظه مشترک تبدیل شده است.
  3. جداسازی فازهای ساخت ماشین مجازی به دو بخش؛ این دو بخش آماده سازی (prepare) و اجرا (execute) نامگذاری شده است. بخش آماده سازی برای همه ماشین های مجازی مشترک است. فاز آماده سازی از قبل انجام شده و برای ساخت ماشین مجازی تنها نیاز به فاز اجرا است. (زمان ساخت کاهش می یابد)

تحلیل

یکی از کارهای خوب این مقاله همراه کردن چهار کاربرد ممکن برای ماشین مجازی سبک طراحی شده است. دیوار آتش شخصی، ایجاد سرویس در زمان (JITSU)، سرویس TLS در CDN و ساخت واحد محاسباتی نظیر AWS Lambda. همانطور که در بخش نوآوری آمده است می توان دید تنها با اعمال چند راهکار نسبتا ساده برای رفع گلوگاه ها کارایی به میزان چشم گیری بهبود می یابد.   یکی از آیتم های مقایسه در این مقاله Docker بوده است. سوالی که مطرح می شود این است که آیا Docker هم بهینه است یا نیاز به تغییراتی برای حصول بهینگی دارد. در این صورت آیا باز هم LightVM بهتر از Docker عمل خواهد کرد (البته مزیت isolation همچنان به قوت خود باقی است)  LightVM نشان داد که با حفظ isolation خوب می توان به کارایی در حد (یا بهتر از) Container دست یافت. یه کار خوب مهندسی از آزمایشگاه NEC که متن باز هم هست!

بررسی دیگران

یه بررسی روی وب پیدا کردم که می تونید اون رو از اینجا مطالعه بفرمایید.  

مطالب مرتبط:

مراجع مهم

۱. Paul Barham, Boris Dragovic, Keir Fraser, Steven Hand, Tim Harris, Alex Ho, Rolf Neugebauer, Ian Pratt, and Andrew Warfield. 2003. Xen and the Art of Virtualization. SIGOPS Oper. Syst. Rev. 37, 5 (Oct. 2003), 164–۱۷۷. https://doi.org/10.1145/1165389.945462
۲. D. R. Engler, M. F. Kaashoek, and J. O’Toole, Jr. 1995. Exokernel: An Operating System Architecture for Application-level Resource Management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles (SOSP ’۹۵). ACM, New York, NY, USA, 251–۲۶۶. https://doi.org/10.1145/224056.224076
۳. Joao Martins, Mohamed Ahmed, Costin Raiciu, Vladimir Olteanu, Michio Honda, Roberto Bifulco, and Felipe Huici. 2014. ClickOS and the Art of Network Function Virtualization. In 11th USENIX Symposium on Networked Systems Design and Implementation (NSDI ’۱۴). USENIX Association, Seattle, WA, 459–۴۷۳. https://www.usenix.org/conference/nsdi14/technical-sessions/presentation/martins
۴. Anil Madhavapeddy and David J. Scott. 2013. Unikernels: Rise of the Virtual Library Operating System. Queue 11, 11, Article 30 (Dec. 2013), 15 pages. https://doi.org/10.1145/2557963.2566628