میکروسرویس Microservice چیست + مزایا و معایب آن
میکروسرویس Microservice یک معماری طراحی نرم افزار بسیار محبوب است که سیستم های یکپارچه (Monolithic) را از هم جدا می سازد. اپلیکیشن ها به عنوان مجموعه ای از سرویس های آزاد ساخته می شوند و هر میکروسرویس Microservice مسئولیت اجرای یک مولفه را بر عهده می گیرد. ارتباط بین آنها نیز از طریق پروتکل هایی نظیر HTTP و TCP برقرار می شود. امروز قصد داریم میکروسرویس را معرفی کرده و کاربردهای آن را نیز مورد بررسی قرار دهیم.
میکروسرویس چیست؟
Microservice بر مبنای اصول معماری سرویس محور (SOA) طراحی شده است. اگرچه هیچ استاندارد رسمی برای SOA موجود نیست اما اساس آن از کتابی به نام SOA: Principles of Service Design به نویسندگی توماس ارل اقتباس شده است :
- قرارداد سرویس استاندارد (سرویس ها از توضیحات استاندارد تبعیت می کنند)
- اتصالات آزاد (حداقل وابستگی)
- چکیدگی سرویس ها (سرویس ها Logic درونی خود را مخفی می کنند)
- قابلیت استفاده مجدد از سرویس ها (ساختار سرویس ها طبق اصول DRY تنظیم می شود)
- خودمختاری سرویس (سرویس ها Logic خود را به صورت درونی کنترل می کنند)
- بی تابعیتی سرویس (سرویس ها از شرح ریکوئست های قبلی خودداری می کنند)
- قابلیت کشف سرویس (سرویس ها همراه با متادیتای قابل کشف یا یک سرویس رجیستری ارائه می شوند)
- سازگاری سرویس (سرویس ها در کنار هم استفاده می شوند)
اگرچه میکروسرویس ها و SAO از اصول مشترکی پیروی می کنند، رابطه موجود بین آنها کمتر مورد بحث قرار گفته است. برخی از توسعه دهندگان بر شباهت بین آن دو تاکید داشته و میکروسرویس ها را به عنوان زیر شاخه SAO تلقی می کنند در حالی که گروه دیگری بر تفاوت آنها تاکید کرده و معتقدند هرکدام کاربردهای متفاوتی دارند. طبق نظر آنها SAO دامنه سازمانی داشته ولی Microservice ها دامنه اپلیکیشن دارند و طبق دامنه سازمانی اپلیکیشن ها با یکدیگر ارتباط برقرار می کنند.
مزایای Microservice
1- استفاده از میکروسرویس ها در طی چند سال اخیر بسیار فراگیر شده است و دلیل اصلی آن مزایای فوق العاده ای است که در حوزه کانتینر سازی و گردآوری فضای ابری برای توسعه دهندگان به ارمغان می آورد. شما می توانید هر میکروسرویس را در پلتفرم های مختلف به کار گرفته و از آن در کنار زبان های برنامه نویسی و ابزارهای دیگر استفاده کنید. علاوه بر این میکروسرویس ها با استفاده از API ها و پروتکل های ارتباطی با یکدیگر تعامل می کنند در حالی که هرگز به یکدیگر متکی نیستند.
2- مهم ترین مزیت استفاده از معماری میکروسرویس ها این است که تیم برنامه نویسی می تواند عملیات توسعه، نگهداری و استقرار نمودن را به طور مستقل بر روی هر میکروسرویس انجام دهد. ویژگی تک مسئولیتی Microservice ها منجر به مزایای دیگری نیز می شود. برای مثال اپلیکیشن هایی که با معماری میکروسرویس ایجاد می شوند را می توان به مراتب بهتر گسترش و توسعه داد چرا که به راحتی می توان هر بخش از آن را به طور جداگانه توسعه داد
3- میکروسرویس ها همچنین با سرعت بخشیدن به پروسه CI/CD Pipeline، زمان عرضه اپلیکیشن به بازار را به طور چشمگیری کاهش می دهند و سرانجام منجر به چابکی تیم توسعه دهنده می شود.
4- نگهداری و باگ یابی یک Microservice سبک نیز از بررسی و تعمیر یک اپلیکیشن پیچیده کار بسیار ساده تری است.
معایب میکروسرویس
1- از آنجایی که میکروسرویس ها به شدت متکی به ارسال پیام هستند با مشکلات عدیده ای روبرو خواهند شد. برقراری ارتباط بدون استفاده از اصول پیشرفته ای مانند تفکر Agile امکان پذیر نیست. برای کنترل شبکه باید از ابزارهای DevOps نظیر سرورهای CI/CD ، پلتفرم های مدیریت Config و ابزارهای APM استفاده کرد. این موضوع برای کمپانی های بزرگ که قبلاً از این متدها استفاده کرده اند یک مزیت محسوب می شود در حالی که برای کمپانی های کوچک یک چالش سخت به شمار می رود.
2- تعمیر و نگهداری از شبکه میکروسرویس ها به مشکلاتی دیگری نیز منجر می شود. در حقیقت سادگی میکروسرویس های Single-Responsibility باعث پیچیدگی در شبکه یا حداقل بخشی از شبکه می شوند. برای مثال در حالی که میکروسرویس های مستقل تحمل خطای بیشتری نسبت به اپلیکیشن های یکپارچه دارند اما از شبکه ضعیف تری نیز برخوردار هستند.
3- تعامل بین میکروسرویس ها در برخی مواقع منجر به عملکرد ضعیف اپلیکیشن می شود چرا که برای ارسال پیام پردازش بیشتری انجام می شود. اگرچه توسعه دهندگان قادر به انتخاب زبان و پلتفرم دلخواه خود هستند اما در هر صورت امکان همکاری بین آنها باید فراهم باشد.
مثال میکروسرویس
1- میکروسرویس در جاوا
جاوا یکی از بهترین زبان های برنامه نویسی برای توسعه Microservice محسوب می شود. این زبان چندین فریم ورک میکروسرویس دارد که عبارتند از :
- Dropwizard
- JHipster
- فریم ورک Spark
- فریم ورک Spring
- Swagger
- فریم ورک Play
- Vert.x
استفاده از اسپرینگ بوت بهترین روش برای توسعه میکروسرویس در جاوا محسوب می شود که معمولاً در بستر فریم ورک Spring ساخته می شود و امکان توسعه اپلیکیشن های مستقل اسپرینگ را به همراه حداقل کانفیگ در اختیار برنامه نویسان قرار می دهد. علاوه بر این به علت کانفیگ اتوماتیک و کتابخانه های ثالث در توسعه اپلیکیشن از اتلاف وقت جلوگیری می شود.
برای مثال مقاله ای که توسط Paul Chapman در نشریه Spring منتشر شده یک مثال بارز از میکروسرویس محسوب می شود که در آن برای توسعه یک اپلیکیشن از فریم ورک Spring، اسپرینگ بوت و اسپرینگ کلاد استفاده شده است. این مقاله به طور خلاصه بیانگر موارد زیر است :
- ساخت رجیستری از طریق سرور Eureka به منظور ایجاد تعامل سرویس ها با یکدیگر
- ساخت اکانت مدیریتی از طریق اسپرینگ بوت با هدف نظارت بر میکروسرویس
- ساخت وب سرویس از طریق RestTemplate class با هدف دسترسی به میکروسرویس
نمونه ای از ساختار اپلیکیشن ایجاد شده توسط فریم ورک اسپرینگ با کمک معماری Microservice :
البته این مثال یک نمونه کاملاً انتزاعی محسوب می شود و در واقعیت برای ساخت اپلیکیشن بیش از یک میکروسرویس مورد استفاده قرار می گیرد.
2- میکروسرویس در داکر (Docker)
یکی از ترندهای پرطرفدار در حوزه توسعه اپلیکیشن کانتینرسازی داکر نام دارد. Docker به عنوان محبوب ترین پلتفرم در زمینه کانتینرسازی یک از بهترین ابزارها برای تولید میکروسرویس به شمار می رود. برنامه نویسان می توانند از روش های مختلف میکروسرویس ها را در بستر داکر توسعه دهند.
برای مثال شما می توانید هر میکروسرویس را در کانتیر مخصوص به خود مستقر کنید و یا اینکه یک Microservice را به به فرآیندهای مختلف تقسیم کرده و هرکدام را در یک کانتینر جداگانه اجرا کنید. علاوه بر این می توانید با استفاده از داکر Compose، اپلیکیشن های Multi-Container را پیاده سازی کنید که باعث صرفه جویی در زمان می شود. شما همچنین قادر خواهید بود از طریق فایل های YAML، پیکربندی میکروسرویس اپلیکیشن مورد نظر را انجام دهید.
اگر در حال توسعه اپلیکیشنی با مقیاس بالا و کانتینرهای چندگانه هستید، امکان استفاده از پلتفرم ارکستراسیون (Orchestration) نیز در اختیار شما قرار دارد. دو ابزار محبوب داکر به نام های سوارم (Swarm) و Kubernetes امکان بارگذاری میکروسرویس در چند سیستم کامپیوتری را در اختیار برنامه نویسان قرار می دهد. داکر سوارم در درون موتور داکر تعبیه شده است و سازگاری مطلوبی با اکوسیستم آن دارد، در حالیکه Kubernetes همراه با امکانات سفارشی سازی از تحمل (tolerance) بیشتری برخوردار بوده و از طرف کمپانی گوگل نیز پشتیبانی می شود.
البته برای توسعه اپلیکشن های در مقیاس کوچکتر نیازی به استفاده از ابزار ارکستراسیون نیست ولی برای کنترل کانتینرهای چندگانه باید از ابزارهای مدیریت کانتینر استفاده کرد.
3- میکروسرویس در Cloud
میکروسرویس ها کم حجم و مقیاس پذیر هستند به همین دلیل از آنها به عنوان اپلیکیشن های Cloud نیز می توان استفاده کرد. پلتفرم های کلاد دارای ویژگی های زیر هستند :
- منابع بر اساس تقاضا
- پرداخت پیش از موعد
- کدهای زیرساختی
- استقرار و توسعه مستمر
- سرویس های مدیریتی (مانند بروزرسانی های خودکار، بهینه سازی و پیکربندی نرم افزار و مقیاس پذیری)
- بازه انتخابی وسیع از بین زبان های برنامه نویسی، سیستم عامل ها و تکنولوژی های مربوط به دیتابیس
- مجهز به ابزارهای داخلی مانند داکر و Kubernetes
میکروسرویس ها در فضای Cloud اغلب در یک کانتینر مستقر می شوند به گونه ای که شما می توانید بیشترین بهره وری را از زیر ساخت ها داشته باشید. علاوه بر این چون کانتینرها به صورت جداگانه فعالیت می کنند، شما می توانید محیط هایی قابل پیش بینی را توسعه دهید.
علاوه بر این استقرار میکروسرویس ها در فضای Cloud بدون استفاده از کانتینر نیز امکان پذیر است. اگرچه این موضوع خیلی بین توسعه دهندگان رواج ندارد اما برخی اوقات بهترین گزینه محسوب می شود. برای مثال اپلیکیشن WeatherBug بدون استفاده از کانتینر، میکروسرویس را در آمازون EC2 پیاده سازی کرده است.
نتیجه گیری
میکروسرویس ها بهترین ابزار برای ساخت اپلیکیشن هایی با مقیاس بزرگ به شمار می روند در حالی که برای نرم افزارهای کوچکتر بهتر است از کدهای یکپارچه (Monolithic) استفاده کنید. اگرچه توسعه و نگهداری از میکروسرویس های مستقل ساده است اما مدیریت شبکه سطح بالای از تلاش تیم را می طلبد. همچنین می توان گفت پلتفرم های کانتینر، عملیات DevOps و پردازش فضای Cloud در درک بهتر Microservice ها موثر هستند.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.