مایکرو سرویس‌ها - قسمت 1 - معرفی
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: سه دقیقه

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

مایکرو سرویس چیست ؟

در یک تعریف کوتاه، در معماری مایکرو سرویس، توسعه یک نرم افزار به‌صورت مجموعه‌ای از سرویسهای کوچک می‌باشد که این سرویسها به‌صورت کاملا مستقلی قابلیت استقرار دارند و هر کدام از این سرویسها می‌توانند توسط تیم‌های جداگانه‌ای با پلتفرم توسعه و زبان برنامه نویسی و بانک اطلاعاتی جداگانه‌ای توسعه داده شوند  و با یک مکانیزم سبک  وزن مانند Http با یکدیگر در ارتباط باشند.

این روش پیاده سازی قابلیت مقیاس پذیری و تست پذیری را بالا میبرد و توسعه و نگهداری سیستم را آسان می‌کند. دلیل آن هم کاملا مشخص است؛ هر سرویس یک وظیفه مشخص دارد و تیم توسعه‌ی آن کاملا بر آن مسلط می‌باشد و با توجه به اینکه این سرویسها خیلی بزرگ نیستند، تغییرات و تست و نگهداری آن آسان میشود .

چرا معماری مایکرو سرویس؟

مایکرو سرویس‌ها به شما قابلیت چابکی بیشتری می‌دهند و شما را قادر میسازند تا به‌صورت بهتری بتوانید یک سیستم بزرگ، پیچیده و در مقیاس بزرگ را نگهداری کنید.
این سرویس‌ها به تنهایی قابلیت scaling دارند و برخلاف یک سیستم یکپارچه که برای scaling باید تمام سیستم را به عنوان یک واحد scale out کرد، در مایکرو سرویس‌ها شما می‌توانید سرویس‌هایی را که بیشتر مورد استفاده قرار می‌گیرند، بصورت کاملا مستقلی scale out کنید و به این صورت چابکی شما در مواجه با تغییرات که از خصوصیات اصلی یک سیستم نرم افزاری می‌باشد، بالا می‌رود. 
با توجه به توضیحات بالا تصویر زیر گویای همه‌ی این موارد هست:

مقایسه سیستم یکپارچه با مایکروسرویسدر مطالب بعدی در موردی مشخصه‌های مایکرو سرویس‌ها صحبت خواهیم کرد.

  • #
    ‫۷ سال و ۳ ماه قبل، دوشنبه ۲۹ خرداد ۱۳۹۶، ساعت ۱۴:۱۰
    سلام . این مبحث چه تفاوتی با مبحث SOA  دارد ؟ 
    و یک سوال مهم اینکه لطفا معایب این روش رو هم شرح دهید . 
    • #
      ‫۷ سال و ۳ ماه قبل، سه‌شنبه ۳۰ خرداد ۱۳۹۶، ساعت ۰۷:۰۳
      سلام.
      مایکرو سرویس یکی از مشتقات SOA می‌باشد. اما تفاوت هایی هم تو این دیدگاه نسبت به SOA وجود دارد
      1. اندازه سرویسها در این دو متفاوت می‌باشد در مایکرو سرویسها اندازه یک سرویسها کوچکتر از اندازه سرویسها در SOA می‌باشد
      2. سرویها در مایکرو سرویس می‌توانند کاملا مستقل از هم قابل استقرار باشندو مکانیزم استقار بصورت خودکار می‌باشد درحالی که در SOA  این امکان وجود ندارد
      3. در SOA  برای بررسی قوانین کسب و کار  و ادغام سیستم‌های یکپارچه  تمرکزبر روی ESB  می باشد ، در حالی که این امر در مایکرو سرویس‌ها یک anti pattern  به شمار می‌آید و دیدگاه  آنها عدم انتقال قوانین کسب کار به مکانیزم ارتباطی می‌باشد (smart endpoints and dumb pipe)
      در مورد معایب این روش در آینده صحبت خواهیم کرد اما میتوان گفت که پیاده سازی این معماری هزینه زیادی دارد هم از لحاظ زمانی و هم از لحاظ پیچیدگی در پیاده سازی.
      • #
        ‫۶ سال و ۱۱ ماه قبل، دوشنبه ۱ آبان ۱۳۹۶، ساعت ۲۲:۱۹
        سلام،
        اینکه اندازه سرویس در مایکروسرویس‌ها کوچکتر از اندازه سرویس‌ها در معماری SOA است، به چه معنی است؟
        لطفا مثال بزنید
        • #
          ‫۶ سال و ۱۱ ماه قبل، سه‌شنبه ۲ آبان ۱۳۹۶، ساعت ۰۴:۱۲
          با سلام منظور از اندازه سرویس‌ها در معماری SOA  مثلا سیستم فروش که شامل فروش -خرید تخفیف -موجودی انبار -هشدار در مورد تعداد کالای x  در انبارو Logger    و نوع فروش  و ... اما در معماری مایکرو سرویس این‌ها به سرویس‌های جدا گانه مثل هشدار یا همون notification  سرویس Logger و ... این طوری تقسیم می‌شن درست مثل تقسیم یک تابع بزرگ به تابع‌های کوچک‌تر با تفاوت اینکه این تقسیم‌ها باید در فضای Rest  اتفاق بیفته یعنی هیچ یک از سرویس‌ها ارتباط bınary رو ندارد و هر کدام به صورت خود مختار عمل می‌کنند مثال دیتابیس فروش Sql  هستش اما Logger مثلا mongo هستش و همشون با پروتکل http  در ارتباط هستند