رفتن به محتوای اصلی
توضیح کوهستانمعماری ابریتوضیح و تشریح۸ شهریور ۱۴۰۵، ۲۲:۲۴· 5 دقیقه مطالعه· در فناوری

کانتینرها در مقابل ماشین‌های مجازی: تفاوت ماهوی در ایزوله‌سازی، سربار و قابلیت حمل

اگرچه کانتینرها و ماشین‌های مجازی اغلب به عنوان زیرساخت‌های ابری قابل تعویض بازاریابی می‌شوند، اما بر اساس اصول معماری کاملاً متفاوتی کار می‌کنند. درک تمایز مکانیکی بین مجازی‌سازی در سطح سخت‌افزار و مجازی‌سازی در سطح سیستم‌عامل برای بهینه‌سازی استقرار و امنیت برنامه‌ها حیاتی است.

به قلم دلناز نورانی

توسعه‌دهندگان ابری-بومی 40%معماران امنیت‌محور 30%اقتصاددانان زیرساخت 30%
توسعه‌دهندگان ابری-بومی
ارزش قائل شدن برای سرعت، قابلیت حمل و تکرار سریع که توسط کانتینرسازی سبک وزن امکان‌پذیر شده است، با در نظر گرفتن سربار ماشین مجازی به عنوان یک گلوگاه.
معماران امنیت‌محور
اولویت‌دهی به ایزوله‌سازی در سطح سخت‌افزار و مرزهای سخت‌گیرانه برای بارهای کاری حساس، با در نظر گرفتن هسته‌های مشترک به عنوان یک ریسک ذاتی.
اقتصاددانان زیرساخت
تمرکز بر به حداکثر رساندن چگالی محاسباتی و به حداقل رساندن هزینه‌های ابری از طریق تخصیص کارآمد منابع.

رایج‌ترین تصور غلط در رایانش ابری مدرن این است که کانتینر صرفاً یک ماشین مجازی کوچک است. مواد بازاریابی ارائه‌دهندگان بزرگ ابری اغلب مرزها را محو می‌کنند و هر دو را به عنوان نمونه‌های محاسباتی قابل تعویض می‌فروشند که به طور جادویی کد را در فضای ابری اجرا می‌کنند. اما از نظر مکانیکی، آن‌ها موجودات کاملاً متفاوتی هستند. ماشین مجازی دروغی است که به یک سیستم‌عامل گفته می‌شود تا آن را متقاعد کند که سخت‌افزار اختصاصی خود را دارد. کانتینر دروغی است که به یک برنامه گفته می‌شود تا آن را متقاعد کند که تنها نرم‌افزاری است که روی یک سیستم‌عامل اجرا می‌شود.[11]

این تفاوت ماهوی بین مجازی‌سازی در سطح سخت‌افزار و مجازی‌سازی در سطح سیستم‌عامل، همه چیز را در مورد نحوه ساخت، ایمن‌سازی و مقیاس‌دهی نرم‌افزار تغییر می‌دهد. برای درک اینکه چرا صنعت فناوری دهه گذشته را صرف وسواس در مورد کانتینرسازی کرده است، باید فراتر از هیاهوی کلمات پر زرق و برق «ابری-بومی» (cloud-native) نگاه کنیم و مکانیسم‌های معماری واقعی در حال اجرا را بررسی کنیم.[1][2]

بیایید با رویکرد قدیمی‌تر و سنگین‌تر شروع کنیم: ماشین مجازی (VM). یک ماشین مجازی به قطعه‌ای از نرم‌افزار به نام هایپروایزر (Hypervisor) متکی است. هایپروایزر مستقیماً روی سخت‌افزار سرور فیزیکی یا روی سیستم‌عامل میزبان آن قرار می‌گیرد و CPU، حافظه و فضای ذخیره‌سازی را به استخرهای مجزا و ایزوله‌شده تقسیم می‌کند.[3][4]

هنگامی که یک ماشین مجازی را راه‌اندازی می‌کنید، سیستم‌عامل «مهمان» (guest) کامل و مستقل خود را اجرا می‌کند. اگر سروری دارید که ده ماشین مجازی را اجرا می‌کند، در واقع ده کپی مجزا از لینوکس یا ویندوز را اجرا می‌کنید که هر کدام هسته (kernel)، سیستم فایل و فرآیندهای پس‌زمینه خود را دارند. این امر امنیت و ایزوله‌سازی فوق‌العاده‌ای را فراهم می‌کند – یک خرابی فاجعه‌بار یا نفوذ مخرب در یک ماشین مجازی به ندرت بر سایرین تأثیر می‌گذارد، زیرا هایپروایزر مرزهای سخت‌افزاری سخت‌گیرانه‌ای را اعمال می‌کند.[5][8]

ماشین‌های مجازی سخت‌افزار را مجازی‌سازی می‌کنند، در حالی که کانتینرها سیستم‌عامل را مجازی‌سازی می‌کنند.

با این حال، این ایزوله‌سازی با یک «مالیات هایپروایزری» عظیم همراه است. راه‌اندازی یک ماشین مجازی دقیقاً مانند روشن کردن یک کامپیوتر فیزیکی، دقایق طول می‌کشد. علاوه بر این، هر سیستم‌عامل مهمان، گیگابایت‌ها رم و فضای ذخیره‌سازی مصرف می‌کند، حتی قبل از اینکه یک خط کد برنامه اجرا شود. این سربار، ماشین‌های مجازی را ذاتاً سنگین می‌کند و تعداد آن‌ها را که می‌توانید روی یک سرور فیزیکی واحد قرار دهید، محدود می‌سازد.[6][7]

کانتینرها برای حل دقیقاً همین تورم و سربار رایج شدند. کانتینرها به جای مجازی‌سازی سخت‌افزار، سیستم‌عامل را مجازی‌سازی می‌کنند. آن‌ها برای ایزوله‌سازی فرآیندها از یکدیگر، در حالی که آن‌ها را روی همان پایه نگه می‌دارند، به ویژگی‌های خاص هسته لینوکس – یعنی «فضاهای نام» (namespaces) و «گروه‌های کنترل» (cgroups) – متکی هستند.[2][9]

در یک محیط کانتینری، هیچ هایپروایزر و سیستم‌عامل مهمانی وجود ندارد. هر کانتینر روی یک سرور، هسته سیستم‌عامل میزبان زیرین را به اشتراک می‌گذارد. کانتینر فقط شامل کد برنامه و وابستگی‌های فوری آن، مانند کتابخانه‌ها و فایل‌های پیکربندی خاص است.[1][10]

در یک محیط کانتینری، هیچ هایپروایزر و سیستم‌عامل مهمانی وجود ندارد.

دستاوردهای کارایی حیرت‌آور است. از آنجایی که آن‌ها مجبور نیستند یک سیستم‌عامل کامل را راه‌اندازی کنند، کانتینرها می‌توانند در عرض میلی‌ثانیه شروع به کار کنند. از آنجایی که هسته میزبان را به اشتراک می‌گذارند، به جای گیگابایت‌ها، مگابایت‌ها فضای دیسک مصرف می‌کنند. این امر به سازمان‌ها اجازه می‌دهد تا صدها یا حتی هزاران کانتینر را روی یک سرور واحد قرار دهند، در حالی که همان سرور ممکن است فقط از ده‌ها ماشین مجازی پشتیبانی کند.[6][7]

کانتینرها «مالیات هایپروایزری» را حذف می‌کنند و به طور چشمگیری تأخیر راه‌اندازی و سربار حافظه را کاهش می‌دهند.

اما مهندس شکاک باید بپرسد: معاوضه (trade-off) چیست؟ پاسخ، ایزوله‌سازی است. از آنجایی که کانتینرها هسته میزبان را به اشتراک می‌گذارند، یک آسیب‌پذیری در آن هسته می‌تواند به طور بالقوه توسط یک کانتینر مخرب مورد سوءاستفاده قرار گیرد تا کل میزبان و سایر کانتینرهای در حال اجرا روی آن را به خطر اندازد.[8][11]

به همین دلیل است که مؤسسه ملی استانداردها و فناوری (NIST) صراحتاً بین پروفایل‌های امنیتی این دو فناوری تمایز قائل می‌شود. ماشین‌های مجازی مرزهای اعمال‌شده توسط سخت‌افزار را ارائه می‌دهند و آن‌ها را به استاندارد طلایی برای اجرای کدهای غیرقابل اعتماد یا ایزوله‌سازی داده‌های بسیار حساس در محیط‌های چندمستأجری تبدیل می‌کنند.[1]

ارائه‌دهندگان ابری اغلب این واقعیت را با راه‌حل‌های ترکیبی پنهان می‌کنند. فناوری‌هایی مانند AWS Firecracker تلاش می‌کنند تا با بسته‌بندی کانتینرها در «میکرو ماشین‌های مجازی» (microVMs) فوق‌سبک، «بهترین‌های هر دو دنیا» را ارائه دهند. اگرچه این‌ها شگفتی‌های مهندسی هستند، اما اساساً اعترافی هستند مبنی بر اینکه کانتینرهای واقعی فاقد مرزهای امنیتی سخت‌گیرانه‌ای هستند که برای برخی از بارهای کاری سازمانی مورد نیاز است.[5][8]

قابلیت حمل، حوزه دیگری است که در آن بازاریابی اغلب از واقعیت پیشی می‌گیرد. وعده کانتینرها این است: «یک بار بساز، همه جا اجرا کن.» از آنجایی که یک کانتینر برنامه را با تمام وابستگی‌هایش بسته‌بندی می‌کند، باید از نظر تئوری به طور یکسان روی لپ‌تاپ یک توسعه‌دهنده، یک سرور داخلی یا یک ابر عمومی اجرا شود.[4][9]

قابلیت حمل کانتینرها به توسعه‌دهندگان اجازه می‌دهد تا محیط‌های ابری را به صورت محلی بازسازی کنند.

در عمل، این قابلیت حمل به شدت توسط معماری و هسته سیستم‌عامل محدود می‌شود. یک کانتینر لینوکس نمی‌تواند به طور بومی روی هسته ویندوز اجرا شود. هنگامی که توسعه‌دهندگان کانتینرهای لینوکس را روی macOS یا ویندوز اجرا می‌کنند، در واقع یک ماشین مجازی لینوکس پنهان در پس‌زمینه در حال اجرا است که سپس میزبان کانتینرها می‌شود. جادوی «همه جا اجرا کن» توهمی است که توسط مجازی‌سازی پس‌زمینه حفظ می‌شود.[2][11]

در نهایت، انتخاب بین کانتینرها و ماشین‌های مجازی یک بازی با حاصل جمع صفر نیست. زیرساخت‌های مدرن تقریباً همیشه از هر دو استفاده می‌کنند. مدل استاندارد استقرار در محیط‌های ابری سازمانی، تأمین ماشین‌های مجازی بزرگ و امن و سپس پر کردن آن ماشین‌های مجازی با کانتینرهای سبک و چابک است که توسط سیستم‌هایی مانند کوبرنتیس (Kubernetes) ارکستراسیون می‌شوند.[3][10]

با درک واقعیت مکانیکی – اینکه ماشین‌های مجازی سخت‌افزار را ایزوله می‌کنند در حالی که کانتینرها فرآیندها را ایزوله می‌کنند – معماران می‌توانند از برخورد با آن‌ها به عنوان محصولات رقیب دست بردارند و شروع به استفاده از آن‌ها به عنوان لایه‌های مکمل در یک پشته زیرساختی قوی کنند.[11]

نکات کلیدی

  1. ماشین‌های مجازی سخت‌افزار را با استفاده از هایپروایزر مجازی‌سازی می‌کنند و به یک سیستم‌عامل مهمان کامل برای هر نمونه نیاز دارند.
  2. کانتینرها سیستم‌عامل را مجازی‌سازی می‌کنند و هسته میزبان را به اشتراک می‌گذارند تا به دستاوردهای کارایی عظیمی دست یابند.
  3. ماشین‌های مجازی ایزوله‌سازی رمزنگاری و سخت‌افزاری برتری ارائه می‌دهند، که آن‌ها را برای کدهای غیرقابل اعتماد ایمن‌تر می‌سازد.
  4. کانتینرها در عرض میلی‌ثانیه شروع به کار می‌کنند و استقرارهای با چگالی بالا را امکان‌پذیر می‌سازند و معماری‌های میکروسرویس مدرن را پیش می‌برند.
  5. در عمل، اکثر محیط‌های سازمانی برای ترکیب چابکی با امنیت، کانتینرها را در داخل ماشین‌های مجازی اجرا می‌کنند.

اصطلاحات کلیدی

هایپروایزر (Hypervisor)
نرم‌افزاری که با جدا کردن سیستم‌عامل و برنامه‌های یک کامپیوتر از سخت‌افزار فیزیکی زیرین، ماشین‌های مجازی را ایجاد و اجرا می‌کند.
سیستم‌عامل مهمان (Guest OS)
یک سیستم‌عامل کامل که درون یک ماشین مجازی نصب شده و مستقل از سیستم‌عامل دستگاه میزبان عمل می‌کند.
فضاهای نام (Namespaces)
ویژگی هسته لینوکس که منابع هسته را به گونه‌ای تقسیم می‌کند که یک مجموعه از فرآیندها یک مجموعه از منابع را ببینند در حالی که مجموعه دیگری، منابع متفاوتی را مشاهده کنند.
گروه‌های کنترل (cgroups)
ویژگی هسته لینوکس که استفاده از منابع (CPU، حافظه، ورودی/خروجی دیسک) مجموعه‌ای از فرآیندها را محدود، حسابرسی و ایزوله می‌کند.
میکرو ماشین مجازی (MicroVM)
یک ماشین مجازی ساده‌شده که برای زمان‌های راه‌اندازی فوق‌العاده سریع و سربار کم بهینه‌سازی شده است و اغلب برای ایمن‌سازی رایانش بدون سرور استفاده می‌شود.

منابع

پوشش منابع

11 منبع

3 دیدگاه شناسایی‌شده

توسعه‌دهندگان ابری-بومی 40%معماران امنیت‌محور 30%اقتصاددانان زیرساخت 30%
  1. [1]NISTمعماران امنیت‌محور

    DRAFT Special Publication 800-180, NIST Definition of Microservices, Application Containers and System Virtual Machines

    مطالعه در NIST
  2. [2]Red Hatتوسعه‌دهندگان ابری-بومی

    Containers vs. VMs: Why not both?

    مطالعه در Red Hat
  3. [3]IBMاقتصاددانان زیرساخت

    Containers Versus Virtual Machines (VMs): What's The Difference?

    مطالعه در IBM
  4. [4]Google Cloudاقتصاددانان زیرساخت

    Containers vs. virtual machines (VMs)

    مطالعه در Google Cloud
  5. [5]AWSاقتصاددانان زیرساخت

    Containers vs VM - Difference Between Deployment Technologies

    مطالعه در AWS
  6. [6]ResearchGate

    (PDF) Virtual Machines vs. Container Technology: Trade-offs, Challenges, and Hybrid Solutions in Modern Data Centers

    مطالعه در ResearchGate
  7. [7]arXiv

    Comparative Study of Virtual Machines and Containers for DevOps Developers

    مطالعه در arXiv
  8. [8]Wizمعماران امنیت‌محور

    Containers vs. Virtual Machines (VMs): The Differences and Which to Choose

    مطالعه در Wiz
  9. [9]Atlassianتوسعه‌دهندگان ابری-بومی

    Containers vs Virtual Machines

    مطالعه در Atlassian
  10. [10]Scale Computingتوسعه‌دهندگان ابری-بومی

    Container Virtualization vs VMs: Benefits & Differences

    مطالعه در Scale Computing
  11. [11]تیم سردبیری کوهستان

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.