هرجا سخنی از معماری میکروسرویس میشود نام داکر و یا کانتینرها را هم میشنویم
چرا داکر در کنار میکروسرویس استفاده میشود؟
در این مقاله مزیتهای که استفاده از داکر به معماری میکروسرویس اضافه می کند را بررسی میکنیم
اگر بامعماری میکروسرویسها آشنایی ندارید توصیه میکنم دوره رایگان آموزش میکروسرویس سایت باگتو را مشاهده نمایید.
معماری میکروسرویس یکی از مدرنترین و جدیدترین معماریهای نرمافزار است که بهتازگی وارد دنیای معماری نرمافزار شده است و روزبهروز شاهد رشد بیشتر این معماری هستیم
در حال حاضر میبینیم که پروژههای بزرگ دنیا مثل netflix ,uber ... و یا حتی پروژههای بزرگ داخل کشور از معماری میکروسرویس برای برطرفکردن مشکلات خود استفاده کردهاند.
اگر پروژههای که از معماری میکروسرویس استفاده کردهاند را بررسی کنیم متوجه میشویم که این معماری در پروژههای بزرگ استفاده میشود و در پروژههای کوچک شاید هیچ مزیتی نداشته باشد و دردسرهای زیادی هم برای ما ایجاد کند.
در ادامه با داکر آشنا میشویم و بعد بررسی میکنیم که داکر چه قابلیتهایی به معماری میکروسرویس اضافه میکند.
ما در دوره پیشرفته آموزش asp در فصل هفدهم داکر و بصورت کامل آموزش داده ایم برای یادگیری داکر به دوره ستارگان asp.net core مراجعه کنید.
در ادامه با داکر آشنا میشویم و بعد بررسی میکنیم که داکر چه قابلیتهایی به معماری میکروسرویس اضافه میکند.
وب اپلیکیشنی که ما توسعه میدهیم باید در یک محیط کاملاً ایزوله اجرا شود. منظور از ایزوله این است که تمامی منابع در اختیار اپلیکیشن ما باشد و اپلیکیشنهای دیگری در آن محیط در حال اجرا نباشند. بهعنوانمثال فرض کنید شما درحالتوسعه وب اپلیکیشن خود هستید و مجبورید دو نسخه مختلف از این اپلیکیشن را تست کنید.
هرکدام از نسخه نیازمندیهای خاص خود را دارند که باید بر روی سیستمعامل سرور نصب شوند و اگر شما هر دو نسخه را بر روی یک سرور مستقر کنید ممکن است این اختلاف ورژن نیازمندیها یا کتابخانهها برای شما دردسر ایجاد کند.
و یا تصور کنید درحالتوسعه اپلیکیشن با معماری میکروسرویس هستید و یکی از سرویسهای شما نیاز دارد بر روی سرور ویندوزی اجرا شود و یکی دیگر نیاز دارد بر روی سرور لینوکسی اجرا شود.
و حتی اگر اجرای چند اپلیکیشن در یک سرور از نظر اجرا شدن مشکلی نداشته باشند، این اپلیکیشنها میتوانند بر رویهم تأثیر بگذارند و مشکل در یک اپلیکیشن بر روی دیگری تأثیر بگذارد و باعث شود بقیه اپلیکیشنهای روی این سرور هم نتوانند خدمات خود را ارائه دهند.
به همین دلایل در معماری میکروسرویس بهتر است که هر سرویس را در محیطی کاملاً ایزوله اجرا کنیم.
با استفاده از bare metal شما یک سرور با منابع بالا را در اختیار دارید که میتوانید اپلیکیشن خود را بر روی آن مستقر کنید. این نوع سرورها معمولاً دارای منابع زیادی میباشند و به همین دلیل ماهیانه باید هزینه زیادی برای این نوع سرورها پرداخت کنید.
و اگر قرار باشد برای معماری میکروسرویس که از صدها میکرو اپلیکیشن ایجاد شده است از این نوع سرورها استفاده کنید ماهیانه هزینه بسیار زیادی باید برای سرورها پرداخت کنید که اصلاً مقرونبهصرفه نیست.
با استفاده از VM و یا همان ماشین مجازی میتوانیم محیطهای ایزوله متعددی بر روی یک سرور Bare-Metal ایجاد کنیم.
روش کار به این صورت است که ما روی یکلایه سیستمعامل با استفاده از نرمافزارهای مجازی سیستمعاملهای دیگری را نصب میکنیم که درصدی از منابع سرور اصلی را به آن اختصاص میدهیم و به همین صورت میتوانیم محیطهای مجازی ایزولهای داشته باشیم.
راهاندازی یک VM چندین دقیقه طول میکشد و شاید برای مقیاسپذیری در معماری میکروسرویسها مناسب نباشد.
کانتینر یکبخشی از سیستمعامل میباشد که یک محیط ایزوله برای اجرا شدن اپلیکیشنها در اختیار ما قرار میدهد. مفهوم Container از مدتها قبل درون سیستمعامل لینوکس وجود داشت و بعدها به سیستمعاملهای دیگر مثل ویندوز هم اضافه شد.
ما با استفاده از Containerهای که سیستمعامل در اختیارمان قرار داده است میتوانیم اپلیکیشنهای خودمان را در محیطی کاملاً ایزوله اجرا کنیم.
اجرا شدن یک کانتینر معمولاً چند ثانیه طول میکشد و بهترین گزینه برای مقیاسپذیری معماری میکروسرویسها میباشد.
اجرا شدن یک کانتینر معمولاً چند ثانیه طول میکشد و بهترین گزینه برای مقیاسپذیری معماری میکروسرویسها میباشد.
با مفهوم Containerها آشنا شدیم آنها یک محیط کاملاً ایزوله از سیستمعامل را برای اجرا شدن اپلیکیشنها در اختیار ما قرار میدهند.
اما مدیریت و کارکردن با Containerها کار پیچیدهای است و شاید ما بهراحتی نتوانیم از این Containerها استفاده کنیم. به یک ابزار قدرتمند نیاز داریم که بتوانیم Containerها را مدیریت کنیم و داکر یکی از ابزارهایی میباشد که برای مدیریت Containerهای سیستمعامل ایجاد شده است.
پس داکر فقط یک نرمافزار برای ایجاد، حذف و ویرایش، و مدیریت Containerها میباشد البته امکانات بیشتری در اختیار ما قرار میدهد که در دورهها و مقالات دیگر باگتو به آموزش کامل داکر میپردازیم.
در معماری میکروسرویس پروژه را تقسیم میکنیم به سرویسهای کوچک و مستقل از هم که هرکدام میتوانند با زبان برنامهنویسی مستقلی توسعه داده شوند و هر سرویس نیز دیتابیس اختصاصی خود را دارد.
پس در معماری میکروسرویسی نیاز داریم هرکدام از سرویسها را در محیطی ایزوله اجرا کنیم و برای Scale برنامه هم باید بتوانیم خیلی سریع نسخههای متعددی از هر سرویس را اجرا کنیم.
با بررسی شرایط معماری میکروسرویس از بین سه محیط ایزولهای که بررسی کردیم بهترین گزینه استفاده از Containerها میباشد و برای مدیریت Containerها هم بهترین گزینه موجود ابزار Docker میباشد و به همین دلیل است که همیشه در کنار معماری میکروسرویسها از داکر و Container هم استفاده میشود.
• اجرای سریع
اجرای Containerها یک فرایند سیستم عاملی است و یک Container در عرض ثانیه اجرا میشود. این در حالی است که راهاندازی یک VM ممکن است چندین دقیقه طول بکشد.
• استقرار با سرعت بیشتر
استقرار اپلیکیشنها در Containerهای داکر خیلی سریع انجام میشود چون همه نیازمندیها در یک image بستهبندیشدهاند و برای اجرا، فقط کافی است آن image را بارگذاری و اجرا کنیم.
• مدیریت ساده Containerها
مدیریت Containerهای سیستمعامل کار پیچیدهای است و داکر این کار پیچیده را برای ما راحت کرده است و با استفاده از داکر مدیرت Containerها به سادگی انجام میشود.
• مقیاسپذیری
اگر Containerهای شما محدود به چند عدد باشند و همه آنها روی یک سیستمعامل باشند مدیریت آنها شاید کار سختی نباشد. اما اگر شما صدها Container داشته باشید و آنها روی سرورها و سیستمعاملهای مختلفی باشند مدیریت آنها واقعاً کار سخت و پیچیدهای میشود. با استفاده از Docker Swarm میتوانیم تعداد زیادی Container روی سرورهای مختلف را مدیریت کنیم و بهراحتی بتوانیم Scale Out معماری میکروسرویس را انجام دهیم.
• پشتیبانی از سیستمعاملهای مختلف
در سیستمعاملهای لینوکس، ویندوز و مک مفهوم Container را داریم و با استفاده از داکر میتوانیم container سیستمعاملهای مختلف را مدیریت کنیم و محدود به یک سیستمعامل نیستیم.
نتیجهگیری
در معماری میکروسرویس ما دهها اپلیکیشن جدا از هم داریم که کاملاً بهصورت مستقل میتوانند اجرا شوند در نتیجه ارتباط بین این اپلیکیشنهای مستقل میتوانیم اپلیکیشن بزرگ را داشته باشیم.
در معماری میکروسرویس چون تعداد سرویسها زیاد میباشند ما به بحث Auto Scale هم نیاز داریم استفاده از VM نمیتواند گزینه مناسبی باشد و بهتر است که از Containerها برای محیط اجرای سرویسهای خود استفاده کنیم.
برای اینکه در بحث آموزش میکروسرویس حرفه ای شوید می توانید دوره ستارگان میکروسرویس سایت باگتو رو مشاهده کنید.