اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
سه دقیقه
در نرم افزارهای Enterprise، توسعه محصول، چالش اصلی تیم نمیباشد. اصلیترین چالش، بعد از استقرار نرم افزار و زیر بار رفتن آن بهوجود میآید؛ مسائلی نظیر مدیریت تغییرات و scaling و چنانچه نرم افزار بصورت صحیحی توسعه نیافته باشد، میتوان گفت که انجام موارد ذکر شده بسیار سخت یا شاید غیر ممکن شوند و باید نرم افزار، بازنویسی شود.
برای روشن شدن موضوع یک مثال میزنم.
فرض کنید یک نرم افزار جامع بیمه (Core Insurance) داریم که بصورت یک نرم افزار یکپارچه (Monolithic) ارائه شده است. بعد از چند سال قرار است در زیر سیستمهای مختلف تغییراتی انجام شود؛ مثلا زیر سیستمهای بیمه عمر، بیمه مسافرتی و بیمه درمان، نیاز به تغییر دارند. فرض کنید تغییرات در بیمه درمان سریعتر انجام شده و آماده استفاده برای مشتری میباشد؛ اما به دلیل یکپارچه بودن سیستم، این انتشار نسخه باید تا اتمام کار زیر سیستمهای دیگر، به تعویق بیفتد. یا اینکه به دلیل بالا رفتن تعداد کاربران میخواهیم سیستم را scale out کنیم. برای این منظور باید چند نسخه از کل سیستم را در پروسههای مجزایی قرار دهیم.
با توجه به توضیحات بالا متوجه این منظور میشویم که مدیریت تغییرات، بخاطر وابستگیهای بیش از حد سیستم، با کندی روبه رو میشود و همچنین هزینه Scale سیستم با توجه به اینکه باید کل سیستم را در پروسههای مختلفی نصب کرد، بالا میباشد.
اگر این سیستم یکپارچه به زیر سیستمهای مجزایی شکسته میشد، هزینه تغییرات و Scale آن به مراتب کمتر میشد. حتی از این جلوتر بریم و هر کدام از این زیر سیستمها قابلیتهای کسب و کار (Business Capabilities) خودشان را بهصورت سرویسهای مجزایی ارائه دهند، هزینه تغییرات و نگهداری آنها چگونه خواهد بود؟!
برای مثال اگر زیر سیستم بیمه عمر را تصور و آنرا به سه قسمت درخواست بیمه نامه ، صدور بیمه نامه و بخش خسارت تقسیم کنیم که هر کدام از این قسمتها به تنهایی قابل ارائه به مشتری باشند.
برای مثال درخواست بیمه نامه شامل پر کردن فرم پیشنهاد، بررسی اطلاعات وارد شده توسط پزشکان بیمه و اعلام نظر کار شناسان بیمه برای افزایش نرخ بیمه نامه بر اساس ریسکهای پزشکی و شغلی بیمه شده میباشد که در نهایت بعد از چند روز، یک فرم پیشنهاد به تایید کارشناسا ن رسیده و تازه به بیمه نامه تبدیل میشود. همانطور که میبینید این بخش به تنهایی میتواند در اختیار نمایندگیهای شرکت بیمه قرار گرفته و قسمت اولیه فروش بیمه نامه را پشتیبانی کند. حالا اگر نیاز به تغییرات یا scaling سیستم وجود داشته باشد، انجام دادن آنها به مراتب راحتتر و کم هزینهتر میباشد.
مایکرو سرویس چیست ؟
در یک تعریف کوتاه، در معماری مایکرو سرویس، توسعه یک نرم افزار بهصورت مجموعهای از سرویسهای کوچک میباشد که این سرویسها بهصورت کاملا مستقلی قابلیت استقرار دارند و هر کدام از این سرویسها میتوانند توسط تیمهای جداگانهای با پلتفرم توسعه و زبان برنامه نویسی و بانک اطلاعاتی جداگانهای توسعه داده شوند و با یک مکانیزم سبک وزن مانند Http با یکدیگر در ارتباط باشند.این روش پیاده سازی قابلیت مقیاس پذیری و تست پذیری را بالا میبرد و توسعه و نگهداری سیستم را آسان میکند. دلیل آن هم کاملا مشخص است؛ هر سرویس یک وظیفه مشخص دارد و تیم توسعهی آن کاملا بر آن مسلط میباشد و با توجه به اینکه این سرویسها خیلی بزرگ نیستند، تغییرات و تست و نگهداری آن آسان میشود .
چرا معماری مایکرو سرویس؟
مایکرو سرویسها به شما قابلیت چابکی بیشتری میدهند و شما را قادر میسازند تا بهصورت بهتری بتوانید یک سیستم بزرگ، پیچیده و در مقیاس بزرگ را نگهداری کنید.
این سرویسها به تنهایی قابلیت scaling دارند و برخلاف یک سیستم یکپارچه که برای scaling باید تمام سیستم را به عنوان یک واحد scale out کرد، در مایکرو سرویسها شما میتوانید سرویسهایی را که بیشتر مورد استفاده قرار میگیرند، بصورت کاملا مستقلی scale out کنید و به این صورت چابکی شما در مواجه با تغییرات که از خصوصیات اصلی یک سیستم نرم افزاری میباشد، بالا میرود.
با توجه به توضیحات بالا تصویر زیر گویای همهی این موارد هست:
در مطالب بعدی در موردی مشخصههای مایکرو سرویسها صحبت خواهیم کرد.