در مقاله قبل تعریفی مقدماتی از مدل معماری میکروسرویس ها ارائه شد. در این تعریف به “مجموعه ای از سرویس های خودمختار (autonomous) که در تعامل با یکدیگر برای انجام یک هدف کلی کار می کنند” اشاره شده است. اما سوال اینجاست که سرویس خودمختار یا مستقل چیست و چه سطوحی از خودمختاری را بر حسب نوع اپلیکیشن ها می توان فراهم کرد؟

مفهوم Service Autonomy یا خودمختاری سرویس از مفاهیم اولیه معماری سرویس گرا می باشد. به طور کلی سرویسی خودمختار محسوب می شود که توانایی تصمیم گیری، کنترل و عملکرد کاملا مستقل بدون نیاز به دخالت یا همکاری سایر سرویس ها یا منابع بیرونی داشته باشد.

هر چه سرویس مستقل تر عمل کند، قابلیت پیش بینی و اعتماد به آن بیشتر خواهد بود. برای مثال زمان اجرای یک درخواست در سرویسی که سطح بالایی از خودمختاری دارد، بطور دائمی زمانی ثابت خواهد بود که همین امر موجب افزایش قابلیت پیش بینی و اعتماد به آن خواهد شد. از طرفی در سرویسی که در سطح پایینی از خودمختاری است (یعنی برای پردازش یک درخواست، نیاز به فراخوانی سرویس های دیگر دارد و یا از منابع اشتراکی استفاده می کند) امکان پیش بینی زمان پاسخ کاهش پیدا می کند و قابلیت اعتماد به آن سرویس نیز پایین می آید. چرا که زمان انتظار پاسخ از سرویس های بیرونی یا دیتابیس اشتراکی به زمان پردازش داخلی سرویس اضافه می شود و هربار برحسب شرایط، ممکن است این زمان متغیر باشد. بنابراین درجه خودمختاری و استقلال یک سرویس، دو مزیت قابلیت پیش بینی رفتاری و اعتماد سرویس را افزایش می دهد.

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

انواع خودمختاری سرویس ها

Service Contract Autonomy

خودمختاری در سطح قرارداد سرویس به این معناست که سرویس از نظر کارکردی همپوشانی با سرویس دیگری نداشته باشد. این سطح خودمختاری با رعایت اصول طراحی استاندارد سازی یا نرمال سازی قرارداد و “Service Loose Coupling” قابل دستیابی است.

autonomy4 - مدل معماری میکروسرویس ها - خودمختاری سرویس
سرویس سمت چپ نرمال سازی شده است ولی سرویس سمت راست متدهای تکراری دارد
autonomy5 - مدل معماری میکروسرویس ها - خودمختاری سرویس
انباره سرویسی که نرمال سازی شده باشد،تعداد سرویس کمتر و مشخص تری در مقایسه با انباره سرویس نرمال نشده، دارد

Service Logic Autonomy

در این سطح خودمختاری کامپوننت های سرویس که مسئول اجرا و کنترل منطق هستند، به صورت انحصاری و کاملا مجزا تولید می شوند ولی در سطح دیتابیس، دایرکتوری ها یا سایر منابع هنوز اشتراکی هستند.

autonomy1 - مدل معماری میکروسرویس ها - خودمختاری سرویس
سرویس A، B و C هر کدام در پیاده سازی و اجرای منطق داخلی خود از کامپوننت های مستقل تشکیل شده اند ولی از دیتابیس اشتراکی استفاده می کنند.

ریسک های زمان اجرا:

  • زمان دسترسی به دیتای مورد نظر در فراخوانی های همزمان، غیر قابل پیش بینی خواهد شد
  • قفل (lock) روی یک رکورد یا جدول رخ می دهد
  • زمان اجرای کوئری ها طولانی خواهد شد

رخداد هریک از موارد بالا منجر به افزایش زمان پاسخ، رفتار تصادفی و غیر قابل پیش بینی سیستم و مقیاس پذیری کمتر از حد قابل پذیرش سیستم خواهد شد که در نهایت روی کارایی و عملکرد سیستم تاثیر گذار می باشد.

Shared Autonomy

در بسیاری مواقع نوشتن سرویس ها از نو سخت و ناشدنی است. چرا که ممکن است سازمان از قسمت های مختلف تشکیل شده باشد که از تکنولوژی های قدیمی و جدید استفاده می کنند و یا بخشی از سرویس ها به صورت سفارشی سازی شده تولید شده باشند. در این شرایط integration اجتناب ناپذیر است. برای مثال ممکن است سرویس جدیدی که با این رویکرد تولید می شود، در جریان پردازش یک درخواست لازم باشد، سرویس legacy فراخوانی کند و یا دیتا را از دیتابیس اشتراکی واکشی نماید.  

autonomy6 - مدل معماری میکروسرویس ها - خودمختاری سرویس
سرویس A هم با یک اپلیکیشن legacy یکپارچه سازی شده و هم در لایه دیتا با سرویس دیگر مشترک است

Pure Autonomy

در این سطح خودمختاری، سرویس هم از لحاظ کارکردی و هم از لحاظ اجرایی کاملا مستقل است. استقلال کارکردی یعنی کنترل روی منطق و دستیابی به لایه دیتای اختصاصی و استقلال اجرایی یعنی اجرای سرویس در محیط عملیاتی اختصاصی در زمان اجرا. این نوع خودمختاری کامل Absolute Isolation نامیده می شود. اما در برخی مواقع به دلیل محدویت های محیط عملیاتی، اختصاص سرور به یک سرویس خاص امکان پذیر نمی باشد که در اینصورت می گوییم خودمختاری functional Isolation است یعنی سرویس فقط در کارکرد (منطق و دیتا) مستقل عمل می کند.

autonomy2 - مدل معماری میکروسرویس ها - خودمختاری سرویس
خودمختاری functional که سرویس ها با وجود استقلال کارکردی، همگی روی یک سرور عملیاتی مستقر شده اند
autonomy3 - مدل معماری میکروسرویس ها - خودمختاری سرویس
خودمختاری absolute Isolation که سرویس ها کاملا از نظر کارکردی ومحیط عملیاتی استقلال دارند.

حال که با انواع خودمختاری سرویس ها آشنا شدیم، بهتر می توانیم به اهمیت طراحی سرویس ها و نقش اساسی آن ها در مدل معماری میکروسرویس ها پی ببریم. اگرچه رسیدن به خومختاری بالا در سیستم های رایج سخت به نظر می رسد، اما رعایت اصول طراحی سرویس ها و best practice  های رایج کمک شایانی در مواجهه با چالش های این مدل معماری خواهد نمود.

با ما همراه باشید تا در مقالات بعدی به اصول طراحی سرویس ها و best practice های مدل معماری میکروسرویس ها عمیق تر بپردازیم.