با شنیدن اسم کانتینر احتمالا یاد کانتینرهای حمل بار میفتیم!یعنی محفظههایی که هر یک مجموعه کالاهای متفاوتی را حمل میکنند اما همگی از یک کشتی برای انتقال استفاده میکنند.
اما کانتینر چه ربطی به توسعهی نرم افزار دارد؟
میتوان گفت پیش از حضور و معرفی کانتینرها در حوزهی نرمافزار،دولوپرها زندگی سختی داشتند!چرا؟دولوپرها همیشه با این مشکل دست و پنجه نرم میکردند که نرم افزاری را بر روی سیستم خودشان کدنویسی،دیباگ،تست و اجرا میکردند و از صحت عملکر آن کاملا مطمئن میشدند ولی با انتقال نرم افزار به یک محیط یا پلتفرم دیگر مانند سرور جهت استقرار،با ارورها و باگهای زیادی رو به رو میشدند و باید تمام کتابخانهها و فریمورکها و وابستگیهای دیگر را دستی چک میکردند تا از یکسان بودن آنها با محیط سیستم خودشان مطمئن شوند و باگها و ارورهای مربوطه رفع شوند.
اما پس از معرفی کانتینر، دولوپرها دیگر نگرانی دربارهی Deploy کردن نرم افزارها پس از اطمینان از صحت عملکردشان بر روی سیستم خودشان نداشتند.چرا؟
کانتینر یک واحد استانداردسازی شده از نرم افزار است که بسته های کد و هر آن چه به آن نیاز دارد تا اپلیکیشن به سرعت و پایدار اجرا شود و از یک واحد پردازش به واحد دیگر منتقل گردد را در خود گنجانده است؛بنابراین هر یک از نرم افزارها در کانتینر خود ایزوله میشوند.
کانتینر این اطمینان را ایجاد میکند که نرمافزار روی هر پلتفرمی از جمله سیستم دولوپر، محیط تست و... که اجرا شود عملکرد کاملا درستی داشته باشد.
چه دلیلی دارد که نرمافزار پس از حصول اطمینان از عملکردش هنگام دیپلوی در محیطهای مختلف دچار مشکل شود؟
فرض کنید دولوپر از ورژنی بالاتر از .NET نسبت به .NET موجود بر روی سرور بریا کد زدن استفاده کرده است و از عملکرد نرمافزار بر روی سیستم خودش اطمینان دارد،زمانی که این برنامه بدون استفاده از کانتینر بر روی سرور دیپلوی میشود، مسلما به مشکل میخورد.
کانتینر درواقع یک محیط اجرای کامل است که نرمافزار به همراه تمامی وابستگیهایش مانند لایبرریها، فریمورکها، فایلهای پیکرهبندی و غیره را شامل میشود که در قالب یک پکیج ارائه میشود؛ بنابراین این توانایی را به دولوپر میدهد تا نرمافزار درون کانتینر را فارغ از محیط یا زیرساختی که میخواهد در آن اجرا شود،به راحتی بین محیطها مختلف حرکت دهد و نرمافزار عملکرد کاملا درستی داشته باشد.
کانتینر مانند یک حباب یا محیط محاسباتی است که دور نرمافزار را گرفته و آن را از محیط اطرافش جدا میکند.اساسا یک محیط کاملا کاربردی و قابل حمل است.
کانتینرها یک جایگزین برای کد زدن بر روی یک پلتفرم یا سیستم عامل هستند که باعث سختی انتقال نرمافزار به محیطها و پلتفرمهای دیگر میشد چرا که با آنها تطابق نداشتند؛در نتیجه باعث هدر رفت زمان زیادی می شد و بهره وری کاهش پیدا میکرد.
با بستهبندی یک نرمافزار در یک کانتینر که میتوان آن را در میان پلتفرمها و زیرساختها جابهجا کرد، آن نرمافزار را میتوانیم در هر کجا که آن را جابهجا کنیم مورد استفاده قرار دهیم زیرا همه چیزهایی را که برای اجرای موفقیتآمیز در آن محیط نیاز دارد، دارد.
جالب است بدانیم ایده جداسازی فرآیندها برای مدت طولانی وجود داشت، اما زمانی که Docker موتور Docker را در سال 2013 معرفی کرد، استانداردی را برای استفاده از کانتینر با ابزارهایی که استفاده از آنها برای دولوپرها آسان بود معرفی کرد همچنین یک رویکرد جهانی برای بستهبندی(Packaging) تعیین کرد که باعث تسریع پذیرش و استفاده از کانتینرها شد.امروزه دولوپرها میتوانند با توجه به نیازمندیهایشان از میان پلتفرمهای Cotainerization و ابزارهایی که از استانداردهای تعیین شده توسط داکر یعنی Open Container Initiative بهره میبرند،استفاده کنند.
کانتینرها اغلب به عنوان "سبک وزن" شناخته می شوند، به این معنی که هسته سیستم عامل(Kernel) دستگاه را به اشتراک می گذارند و نیازی به هزینه سربار نصب یک سیستم عامل به ازای هر برنامه ندارند؛ بنابراین کانتینرها از نظر ظرفیت به فضای کمتری نسبت به یک ماشین مجازی نیاز دارند(ماشینهای مجازی فضایی از اوردر گیگابایت نیاز دارند واین در حالیست که نیاز کانتینرها در حد مگابایت است) علاوه بر این به زمان راه اندازی کمتری نیاز دارند. در مقایسه با تعداد ماشینهای مجازی که میتوانند همزمان با هم بر روی منابع سخت افزاری موجود اجرا شوند،کانتینرها به دلیل کم حجم بودن از همان میزان منابع با بهره وری بالاتری استفاده میکنند و تعداد بیشتری کانتینر به صورت همزمان میتوانند بر روی سرور اجرا شوند. این کار باعث افزایش راندمان سرور می شود و به نوبه خود هزینه های سرور و مجوز را کاهش می دهد.ایزوله بودن کانتینرهای مختلف از یکدیگر احتمال اینکه کد مخرب موجود در یک کانتینر روی کانتینرهای دیگر تأثیر بگذارد یا به سیستم میزبان حمله کند را کاهش میدهد.
بنابراین می توان متوجه شد که چرا شرکت ها به سرعت از کانتینرسازی به عنوان یک رویکرد برتر برای توسعه و مدیریت برنامه استفاده می کنند. Containerization به دولوپرها این امکان را می دهد که برنامه ها را سریعتر و ایمن تر ایجاد و استقرار دهند، خواه برنامه یکپارچه سنتی(traditional monolith) (یک برنامه نرم افزاری تک لایه) باشد یا یک میکروسرویس ماژولار (مجموعه ای از خدمات با اتصال آزاد(loosely coupled)). نرم افزارهای جدید مبتنی بر ابر را میتوان از ابتدا بهعنوان میکروسرویسهای کانتینری ساخت و یک برنامه پیچیده را به مجموعهای از خدمات تخصصی و قابل مدیریت کوچکتر تقسیم کرد. برنامه های موجود را می توان در کانتینرها(یا میکروسرویس های کانتینری) که از منابع به شکل کارآمدتری استفاده می کنند، دوباره بسته بندی کرد.
Containerization مزایای قابل توجهی را برای توسعه دهندگان و تیم های توسعه ارائه می دهد. از جملهی آنها میتوان به موارد زیر اشاره کرد:
استقرار و مدیریت دستی کانتینرها در تعداد کم آسان است اما در اکثر سازمانها تعداد برنامههایی که از کانتینر استفاده میکنند به سرعت در حال رشد است؛بنابراین مدیریت آنها در مقیاس به ویژه به عنوان بخشی از CI/CD و خط لولهی DevOps بدون اتوماسیون امکان پذیر نیست.
هماهنگ کننده کانتینر تهیه، استقرار، شبکه سازی، مقیاس بندی، در دسترس بودن و مدیریت چرخه حیات کانتینرها را خودکار می کند. امروزه، Kubernetes محبوبترین پلتفرم هماهنگسازی کانتینر است و اکثر ارائهدهندگان پیشرو ابر عمومی - از جمله خدمات وب آمازون (AWS)، پلتفرم Google Cloud، IBM Cloud و Microsoft Azure - خدمات مدیریتشده Kubernetes را ارائه میکنند. از دیگر ابزارهای هماهنگ کننده کانتینر می توان به Docker Swarm و Apache Mesos اشاره کرد.
در حالی که تفاوتهایی در روشها و قابلیتها بین ابزارها وجود دارد، ارکستراسیون کانتینر اساساً یک فرآیند (یا چرخه، زمانی که بخشی از خط لوله چابک تکراری یا DevOps باشد) سه مرحلهای است.
اکثر ابزارهای هماهنگ کننده کانتینر از یک مدل پیکربندی اعلامی پشتیبانی می کنند: توسعه دهنده یک فایل پیکربندی می نویسد (بسته به ابزار، بهYAML یا JSON) که وضعیت پیکربندی دلخواه را تعریف می کند و ابزار هماهنگ کننده کانتینر فایل را اجرا می کند از هوش درونی خود برای رسیدن به آن حالت استفاده می کند. فایل پیکربندی معمولا
ابزار هماهنگ کننده، استقرار کانتینرها (و کپی از کانتینرها، برای انعطاف پذیری) را بر روی یک میزبان برنامه ریزی می کند و بهترین میزبان را بر اساس ظرفیت CPU موجود، حافظه، یا سایر الزامات یا محدودیت های مشخص شده در فایل پیکربندی انتخاب می کند.هنگامی که کانتینرها مستقر شدند، ابزار هماهنگ کننده چرخه حیات برنامه کانتینری را بر اساس فایل تعریف کانتینر (اغلب یک Dockerfile) مدیریت می کند که شامل:
احتمالاً واضح است که مزیت اصلی هماهنگ کننده کانتینر، اتوماسیون است - نه تنها به این دلیل که تلاش و پیچیدگی مدیریت یک برنامه کاربردی بزرگ را کاهش میدهد بلکه با خودکار کردن عملیات، هماهنگ کننده از یک رویکرد چابک یا DevOps پشتیبانی میکند که به تیمها اجازه میدهد در چرخههای سریع و تکراری، توسعه یافته و مستقر شوند و ویژگیها و قابلیتهای جدید را سریعتر منتشر کنند.
علاوه بر این، هوشمندی ابزار هماهنگ کننده می تواند بسیاری از مزایای ذاتی کانتینرسازی را افزایش داده یا گسترش دهد. به عنوان مثال، انتخاب میزبان خودکار و تخصیص منابع بر اساس پیکربندی اعلامی، استفاده کارآمد از منابع را به حداکثر میرساند. نظارت بر سلامت خودکار و جابجایی کانتینرها، در دسترس بودن را به حداکثر می رساند.
ابزاری برای containerization است که به صورت متن باز ارائه میشود و در واقع معرفی این ابزار و دستور العملهایش بود که انقلاب در استفاده از کانتینرها به وجود آورد.
داکر یک پلت فرم باز برای توسعه، جابهجایی و اجرای برنامه ها است. داکر شما را قادر می سازد تا برنامه های کاربردی خود را از زیرساخت خود جدا کنید تا بتوانید نرم افزار را به سرعت تحویل دهید. با داکر، می توانید زیرساخت خود را به همان روشی که برنامه های خود را مدیریت می کنید، مدیریت کنید. با استفاده از روشهای داکر برای ارسال، آزمایش و استقرار سریع کد، میتوانید تأخیر بین نوشتن کد و اجرای آن را به میزان قابل توجهی کاهش دهید.
داکر توانایی بسته بندی و اجرای یک برنامه کاربردی را در یک محیط کاملاً ایزوله به نام کانتینر فراهم می کند. ایزوله بودن و امنیت به شما این امکان را می دهد تا چندین کانتینر را به طور همزمان روی یک میزبان مشخص اجرا کنید. کانتینرها سبک وزن هستند و شامل همهی چیزهای مورد نیاز برای اجرای برنامه هستند، بنابراین نیازی نیست به آنچه در حال حاضر روی هاست نصب شده است وابسته باشید. در حین کار میتوانید به راحتی کانتینرها را به اشتراک بگذارید، و مطمئن باشید که همه کسانی که با آنها اشتراکگذاری میکنید، همان کانتینری را دریافت میکنند که به درستی کار میکند.
همانطور که در بالا ذکر شد، Kubernetes محبوب ترین پلت فرم هماهم کننده کانتینر است. همراه با ابزارهای دیگر در اکوسیستم کانتینری، Kubernetes یک شرکت را قادر میسازد تا یک پلتفرم بهعنوان یک سرویس (PaaS) بسیار پربازده ارائه کند که به بسیاری از وظایف و مسائل مربوط به زیرساختها و عملیات مربوط به توسعه برنامههای کاربردی ابری میپردازد.بنابراین تیم های توسعه می توانند منحصراً بر روی کدنویسی و نوآوری تمرکز کنند.
مزایای Kubernetes نسبت به سایر راه حل های ارکستراسیون، به دلیل نتیجه عملکرد جامع تر و پیچیده تر آن در چندین زمینه است، از جمله:
هم روش: این شرکت، با استفاده از کوبرنتیز، بستر ابری استقرار نرمافزار را برای کسبوکارها فراهم میکند. همچنین امکان ارائهی خدماتی از جمله پشتیبانی شبانهروزی، سیستم پایش داخلی و خارجی، سیستم لاگ و پشتیبانگیری در این بستر، برای مشتریان وجود دارد.
دارکوب سرویس PaaS همروش است که به برنامهنویسان و شرکتهای نرمافزاری این قابلیت را میدهد که سرویس خود را بدون دشواری و نیاز به درگیرشدن با مسائل زیرساختی روی کلاسترهای کوبرنتیزی همروش در داخل و خارج کشور اجرا کنند. این سیستم در دو نسخهی CE و EE قابل ارائه به شرکتها و اشخاص میباشد. هدف دارکوب بهبود تجربه و افزایش بهرهوری برنامهنویسان در فرآیند توسعه و نگهداری سرویسهایشان هست.
زیرساخت قدرتمند، امکان بالاآوردن ساده داکر ایمیجها، تجربه کاربری مناسب، پشتیبانی از زبانهای برنامهنویسی گوناگون، بیلد و دیپلوی خودکار کد (CI/CD)، محاسبه هزینه بر اساس زمان استفاده، مقیاسپذیری ساده، بکاپگیری روزانه خودکار و جمعآوری نگهداری متریکها و لاگها از جمله امکاناتی است که در دارکوب فراهم شدهاست.
ابر آروان:ابر آروان شرکتی هایتک در حوزهی فناوری ابری است که کار خود را از سال ۱۳۹۴ آغاز کرده است و با دهها محصول و قابلیت ابری مختلف مانند شبکه توزیع محتوا (CDN)، سرور ابری، پلتفرم ویدیویی، کانتینر ابری و آبجکت استوریج، زیرساخت کسبوکارهای آنلاین، سازمانها و استارتآپها را تامین میکند.
ابر آروان با در اختیار داشتن ۴۰ پاپسایت در سراسر ایران و جهان، پاسخگوی نیازهای زیرساختی بیش از ۶۰ هزار مشتری داخلی و خارجی است و تلاش میکند با قیمتگذاری اقتصادی و ارایهی بستههای رایگان در هر محصول، از کسبوکارهای نوپا و در حال رشد نیز حمایت کند.
سرویسدهی به بسیاری از پربازدیدترین وبسایتهای ایرانی، پخش زندهی مهمترین رویدادهای ملی، ارایهی خدمات امنیتی به سامانههای حساس دولتی و همچنین جلوگیری از حملات سایبری به بسیاری از بانکها و سامانههای کشور از جمله خدماتی است که این شرکت در اختیار کاربران قرار میدهد.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
https://www.ibm.com/cloud/learn/containerization
https://www.redhat.com/en/topics/cloud-native-apps/what-is-containerization
https://www.ibm.com/cloud/learn/container-orchestration
https://www.redhat.com/en/topics/containers/what-is-container-orchestration