کانتینر چیست و چگونه کار می کند ؟
کانتینر (Container)
کانتینر سازی یک رویکرد جدید به منظور ارائه نرم افزارهای کاربردی برای بسیاری از شرکت ها می باشد و نیازمند درکی اساسی از چگونگی کار با آن بر اساس تفاوت ها و جوانب مثبت و منفی است.
📝 به منظور دستیابی به یک تعریف دقیقتر از کانتینر می توانید به نوشته های قبلی درباره تعریف کانتینر و تفاوت ماشین مجازی با کانتینر مراجعه نمایید.
کانتینرها یک جایگزین جذاب برای سرورهای فیزیکی و ماشین های مجازی ارائه می دهند که بسیاری از شرکت های فناوری را به فکر استفاده از آن ها برای توسعه نرم افزارهای کاربردی واداشته است. اما کانتینرها چیستند و چگونه با نرم افزارها و زیرساخت ها ارتباط برقرار می کنند ؟
نصب اساسی نرم افزار فیزیکی پایه، نیازمند سرور، ذخیره ساز، تجهیزات شبکه و دیگر سخت افزارهای فیزیکی که بر روی آن سیستم عاملی نصب شده است، می باشد. پشته نرم افزاری (سرور نرم افزار کاربردی، یک پایگاه داده و مواردی دیگر) نرم افزار را قادر به اجرا می کنند. یک شرکت یا سازمان باید منابع خود را نیز برای حداکثر حجم کاری و قطع توان و فشار بالای بیهوده خارج از آن زمان تامین کند و یا در صورت تامین منابع برای حجم کاری متوسط، انتظار می رود که در زمان اوج ترافیک مشکلات عملکردی ظاهر گردد.
ماشین های مجازی برخی از این مشکلات را با خود به همراه دارند. یک ماشین مجازی یک سیستم منطقی را ایجاد می کند که بالاتر از پلتفرم فیزیکی می نشیند. هایپروایزر نوع نخست، از قبیل VMware ESXi یا Microsoft Hyper-V، هر یک از ماشین ها را با سخت افزار مجازی ارائه می دهند. ماشین مجازی یک سیستم عامل میهمان را اجرا می کند، و پشته (stack) نرم افزاری همه زیر مجموعه ها را مانند پشته فیزیکی تعریف می کند. مجازی سازی منابع را بهتر از وضعیت فیزیکی به کار می گیرد. اما سیستم عامل مجزا برای هر ماشین مجازی افزونگی قابل توجهی را در عملکرد اساسی ایجاد می کند.
کانتینرها انعطاف پذیری بیشتری را نسبت به پشته سخت افزاری فیزیکی و مجازی ارائه می دهند. محیط یک کانتینر نرم افزار پایه همانطور که در شکل دوم دیده می شود بر روی سخت افزار فیزیکی (یا مجازی و فیزیکی)، سیستم عامل میزبان و لایه مجازی ساز کانتینر مستقیم بر روی سیستم عامل اجرا می شود. کانتینرها به جای اینکه به صورت اختصاصی یک سیستم عامل را اجرا کنند، سیستم عامل و توابع آن را به اشتراک می گذارند که منابع مورد نیاز هر نرم افزار را به شدت کاهش می دهد. داکر، Rkt (کانتینر سیستم عامل زمان اجرایی)، کانتینر لینوکس و کانتینرهای سرور ویندوز به شیوه مشابه ای عمل می کنند.
مزایایی که معایبی نیز به همراه دارند
اشتراک گذاری سیستم عامل موجب بروز مشکل برای کانتینرهای اولیه می شود. کدی که نیازمند دسترسی های ارتقاء یافته است در سطح سیستم عامل، راه کسب و کارها را به روی عوامل مخرب باز کرده و آن ها را در به دست گرفتن دسترسی ها و حمله به پایه و اساس پلتفرم به منظور از کار انداختن تمامی کانتینرها در محیط اقدام می کنند. برخی از سازمان ها به منظور مقابله با این مشکل، با استفاده از ماشین های مجازی از کانتینرها دوری جستند، اما مابقی بر سر نابودی اهداف کانتینرها با صورت پذیرفتن این کار بحث دارند. محیط کانتینرهای جدید این مشکلات امنیتی را بهبود بخشیدند، اما بسیاری از سازمان ها به دلایل امنیتی یا مدیریتی هنوز کانتینرها را در ماشین های مجازی میزبانی می کنند.
این واقعیت که نرم افزارهای کانتینر باید از یک سیستم عامل استفاده کنند نقطه قوتی است، و همینطور یک نقطه ضعف برای نرم افزارهای کانتینر شده می باشد. هر کانتینر کاربردی یک سیستم عامل را به اشتراک می گذارد، برای مثال نه تنها باید مبتنی بر سیستم عامل لینوکس، بلکه می بایست بر روی یک نسخه و اغلب سطح وصله (Patch) یکسان از آن توزیع لینوکس باشد. در واقعیت همیشه قابل کنترل نیست، چنانکه برخی از نرم افزارهای کاربردی نیازمندی هایی نسبت به سیستم عامل اختصاصی دارند.
کانتینرسازی سیستم
کانتینرهای سیستم موجود در یک فضای نام پیشکار (proxy namespace) که بر روی هسته سیستم عامل می نشیند.
شکل ۳: درخواست های نرم افزار تبادل کانتینرهای سیستم برای نگه داشتن منابع در کنار کانتینر کاربردی.
کانتینرسازی سیستم، که در شکل ۳ نشان داده شده است، این تداخلات را رفع می کند. کانتینرهای سیستم از قابلیت های اشتراک گذاری شده سیستم عامل پایه استفاده می کند. گاهی نرم افزار به برخی سطوح Patch یا کتابخانه های کاربردی نیاز دارد که پلتفرم پایه فاقد آن است، در این موقعیت فضای نام پیشکار (proxy namespace) تماس را از برنامه دریافت کرده و آن را به کد یا کتابخانه موردنیاز که در کانتینر مربوط به خود قرار گرفته است هدایت می کند.
کانتینرسازی سیستم از طریق Virtuozzo در دسترس است. مایکروسافت نیز از طریق کانتینرهای Hyper-V خودش، روشی مشابه آن را به منظور جداسازی ارائه می دهد.
چه چیزی کانتینرها را توانمند می سازد ؟
برنامه ها از طریق سخت افزارهای فیزیکی به ماشین های مجازی و سپس محیط های کانتینرسازی شده تکامل یافته اند. به ترتیب و اکنون کانتینرسازی هدایت معماری میکروسرویسها را به دست گرفته است.
میکروسرویسها موجودیت های تک تابعی (single-function) ایجاد می کند که خدماتی به محیط های تماس ارائه می دهد. برای مثال، در مقایسه با مجموعه ای از سیستم های مختلف که هر کدام شامل نسخه های داخلی از این قابلیت ها هستند، توابعی مانند تقویم، ایمیل و سیستم های تسویه مالی می توانند در کانتینرهای شخصی موجود در ابر برای هر سیستمی که به آن نیاز دارد، ساکن شوند.
مزایای عملکرد بواسطه میزبانی چنین توابعی در ابر. اشتراک گذاری منعطف منابع فیزیکی اساسی با دیگر توابع احتمال مواجهه با محدودیت منابع را کاهش می دهد.
میکروسرویسها همچنین روش هایی منعطف و پردازش محور به منظور رسیدگی به نیازهای کسب و کار در معماری برنامه را ارائه می دهد. بجای کدی که تلاش می کند تا در فرآیند کسب و کار تخمین بزند و محدودیت های آن را پایان بخشد، میکروسرویسها برنامه ای مرکب از توابع پویای کنار هم قرار گرفته را در زمان واقعی ایجاد کرده اند که یک کسب و کار را قادر می سازد تا به فشار بازار با سرعت سریع تر از توان برنامه های یکپارچه پاسخ دهد.
همانطور که در شکل ۴ نمایش داده شده است، کانتینر چیزی پیرامون کد فیزیکی (physical code) را در بر نمی گیرد، اما لیستی از توابع موردنیاز که بر حسب نیاز کنار هم قرار می گیرند. کانتینرها زمینه هایی نظیر قراردادهای فنی و فرآیند حسابرسی را مدیریت می کند.
متخصصان فناوری می توانند منتظر باشند و ببینند که چگونه کانتینرها از نقطه کنونی تکامل مییابند.
کانتینرها در یک دنیای فوق العاده پویا و در حال دگرگونی قرار دارند. آن ها مصرف منابع را بهینه می سازند و انعطاف به شدت موردنیاز خود را نسبت به نسل های پیشین بهتر ارائه می دهند، بنابراین شرکت های سازمانی فناوری باید برای استفاده از آن ها آماده شوند.
منبع : techtarget