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

معماری مایکروسرویس­ (Microservice Architecture) یا به­اختصار مایکروسرویس­ها که در منابع فارسی گاهی به نام میکروسرویس­ها­ نیز ترجمه شده است، در چندسال اخیر به­شدت در حال گسترش و فراگیری در میان توسعه­دهندگان و معماران است. اگرچه اولین اشاره مستقیم به واژه "مایکروسرویس­ها" به سال 2011 و در یک کارگاه معماری نرم­افزار بر­می­گردد، اما داغ شدن این موضوع در طی سال­های 2014 و 2015 بود؛ هم­اکنون مایکروسرویس­ها یکی از موضوعات جذاب در دنیای نرم­افزار و معماری محسوب می­شود و هرماه مقالات، کتاب­ها و ارایه­های جدیدی از آن منتشر می­شود و در کنفرانس­ها یا سمینارهای تجاری-علمی نیز علاقمندان زیادی را به خود جذب می­کند؛ حتی بر اساس گزارش­های گوگل از میزان رشد جستجوی عبارات مرتبط با مایکروسرویس­ها می­توان به نقش محوری آن در معماری و توسعه سیستم­ها پی­ برد.

در دنیای تجاری نیز شرکت­های مطرحی پیشگام پیاده­سازی و استقرار آن بوده­اند که از جمله می­توان به شرکت­های Uber ، Netflix ، Amazon ، Ebay و Sound Cloud اشاره نمود. بر اساس تحقیقاتی متفاوتی که توسط   Forrester ،  Redhat و Dimensional Research انجام شده است، بیش از 70 درصد پرسش­شوندگان اعلام کرده­اند که برنامه­ای برای توسعه و پیاده­سازی معماری مایکروسرویس دارند.

 

تعاریف معماری مایکروسرویس:

v    مایکروسرویس­ها یک تکنیک توسعه نرم­افزار مشتق شده از سبک معماری سرویس­گرا است که از مجموعه­ای از سرویس­های خوش­تعریف تشکیل شده است. در معماری مایکروسرویس پروتکل­های ارتباطی سبک و مستقل از پلتفرم هستند و سرویس­ها دامنه و مسئولیت معیین و مشخصی دارند، مزایای این معماری بهبود ماژولاریتی سیستم و تسهیل توسعه، استقرار و تست سیستم است؛ همچنین سیستم توسعه­یافته دارای مقیاس­پذیری بالا و سرعت بالاتر اعمال تغییر است. این معماری با رویکرد DevOps در توسعه و پشتیبانی نرم­افزارها هماهنگی دارد. (Wikipedia)

v    سبک معماری مایکروسرویس رویکردی برای توسعه یک نرم­افزار متشکل از تعدادی سرویس کوچک و مستقل است که هر سرویس به­اتکاء منابع و زیرساخت خودش اجرا شده و از طریق پروتکل­های سبک مبتنی بر HTTP با دیگران ارتباط دارد. این­ سرویس­ها براساس قابلیت­های کسب­وکار طراحی و ساخته می­شوند و بر بسترهای فناوری با زبان­های برنامه­نویسی مختلفی قابل استقرار هستند. این سرویس­ها حداقل نیاز به مدیریت متمرکز را دارند و هر سرویس پایگاه داده مخصوص به خود را مدیریت می­کند. (Martin Fowler)

v    مایکروسرویس­ها به­صورت خلاصه سرویس­های دانه­ریز و خودمختاری هستند که با یکدیگر همکاری می­کنند. هر سرویس باید بتواند مستقلا تغییر کند بدون اینکه منجر به تغییر دیگر سرویس­های مرتبط یا استفاده­کنندگان از سرویس شود. (Sam Newman)

v    معماری مایکروسرویس یک رویکرد مهندسی مبتنی بر شکست یک نرم­افزار به ماژول­های تک-کارکردی است که مستقلا تولید و مستقر می­شوند و با واسط­های خوش­تعریف با دیگر سرویس­ها ارتباط دارند. این سرویس­ها توسط تیم­های کوچکی تولید و پشتیبانی می­شوند که از تمام چرخه حیات سرویس پشتیبانی می­کند (IBM)

v    معماری مایکروسرویس از مجموعه­ای از سرویس­های خودمختار و کوچک تشکیل شده است که هر سرویس مستقل بوده و یک قابلیت کسب­وکار را پیاده­سازی می­نماید (Microsoft)

v    معماری مایکروسرویس یک رویکرد چابک و ماژولار به توسعه نرم­افزار است که برخلاف نرم­افزارهای یک­تکه - که همه مولفه­ها و قابلیت­های سیستم بایکدیگر آمیخته شده­اند- مبتنی بر مجموعه­ای از سرویس­های کوچک­تر و مستقل از هم با ارتباط سست است. هر سرویس مسوول انجام وظایف و پردازش خود است و یک کارکرد مشخص از کل سیستم را پشتیبانی می­کند و با دیگر سرویس­ها از طریق  API ارتباط دارد (Oracle)

 

در جمع­بندی تعاریف شده می­توان گفت: "معماری مایکروسرویس، سبک خاصی از معماری نرم­افزار و مشتق­شده از معماری سرویس­گرا است که هدف آن خودمختاری بالای سرویس­ها از نظر منطق کارکردی-داده­ای و نیز پلتفرم پیاده­سازی و اجرا است. این سبک معماری علاوه بر معماری سرویس­گرا از مفاهیم معماری رخداد محور و سیستم­های توزیع­شده نیز بهره­برده است."

نمونه­ای از عناصر یک سیستم ساده فروش اینترنتی مبتنی بر معماری مایکروسرویس در شکل زیر نشان داده شده است.

شکل 1-1: نمونه­ سیستم ساده فروش اینترنتی مبتنی بر معماری مایکروسرویس

 

معماری مایکروسرویس دربرابر معماری یک­تکه(Monolithic)

بسیاری از کتاب­ها و مقالاتی که درباره معماری مایکروسرویس­ وجود دارد، برای توضیح ویژگی و تمایز معماری مایکروسرویس از مقایسه با معماری یک­تکه استفاده کرده­اند. بر مبنای نظر این نویسندگان در سیستم­های یک­تکه، مجموعه مولفه­ها-سرویس­ها-داده­ها چنان در هم آمیخته است که نمی­توان بلوک­های سازنده این سیستم­ها را مستقلا از هم جدا کرده و یا تغییر(جایجا) نمود؛ اما در معماری مایکروسرویس هدف این است که یک سیستم به مجموعه­ای از ماژول(سرویس) کاملا مستقل(خودمختار) تقسیم شود که هر سرویس همه محاسبات، داده­ها و قوانین مورد نیاز را در خود داشته باشد و برای اجرا به سایر سرویس­ها نیاز نداشته باشد یا حداقل وابستگی وجود داشته باشد.(شکل زیر)

شکل 1-2: مقایسه مفهومی معماری یک­تکه در برابر مایکروسرویس

اصول و ویژگی­های معماری مایکروسرویس

مهمترین اصول و ویژگی‌های معماری مایکروسرویس­ به قرار زیر است:

·        هر سرویس مسوول یک دامنه مشخص و به­خوبی تعریف­شده از سیستم(صورت­مساله) است که مستقلا تولید(Build) و استقرار(Deploy) می­یابد.

·        هر سرویس از فناوری­ها و ابزارهای مناسب خود بهره­ می­برد و لزومی ندارد همه سرویس­های یک سیستم از یک فناوری، زبان­برنامه­نویسی یا پلتفرم استفاده کنند.

·   سرویس­ها با واسط­های خوش تعریف و سبک با یکدیگر تعامل دارند، خروجی هر سرویس باید بتواند ورودی سرویس­های دیگری قرار گیرد.

·        هر سرویس مسوول مدیریت داده­های خود است و می­تواند از انواع ابزارهای DBMS استفاده نماید.

·        اصول کلی معماری سرویس­گرا در این معماری نیز صادق است.

·        ترجیح استفاده از روش پیام­رسانی غیرهمزمان(Asynchronous) نسبت به همزمان

·        ترجیح استفاده از روش همکاری کاریگرافی(Choreography) نسبت به ارکستریشن

 

 

متدها و ابزارهای مرتبط با معماری مایکروسرویس

Containers

کانتینرها(Containers)، یک روش استاندارد برای بسته­بندی(Package) نرم­افزار-سرویس و همه متعلقات و اجزاء آن است به­صورتیکه بتوان آن را به محیط-پلتفرم­های دیگری منتقل و بدون مشکل اجرا نمود. کانتینرها باعث می­شوند فناوری داخل هر سرویس از محیط بیرون مخفی مانده و بدین صورت سرویس­ها در عین استفاده از فناوری­ها-سکوهای مختلف، از نظر بیرونی به روش استاندارد قابل استفاده و تعامل باشند.

از جمله ابزارها و فناوری­های مدیریت کانتینرها مبتنی بر ابر(Cloud) :

·        Kubernetes

·        Docker Swarm

·        Amazon ECS

·        Azure Service Fabric

·        Cloud Foundry

·        Google Cloud Functions

·        IBM Bluemix OpenWhisk

·        Oracle Application Container

 

API Gateway

اگرچه هر سرویس با حداکثر خودمختاری مسوول انجام یک کارکرد مشخص در دامنه سیستم است اما مدیریت کل سیستم و انجام اموری نظیر احرازهویت، تقسیم­بار، مجوزدهی، لاگ­گیری، مانیتورینگ،  و .. نیاز به یک مدیریت/ابزار متمرکز غیر از سرویس­ها دارد که می­تواند توسط API Gateway پیاده­سازی ­شود، درصورتیکه از این الگو(روش) استفاده نشود، کلیه موارد مدیریتی ذکرشده به صورت کاملا توزیع­شده توسط سرویس­ها مدیریت خواهد شد.

از جمله ابزارهای مطرح برای API Gateway :

·        Apigee API Management

·        Amazon API Gateway

·        IBM API Connect

·        WSO2 API Management

·        MuleSoft Anypoint API Management

·        Oracle API Manager

·        Kong API Gateway

·        Azure API Gateway

 

روش­های احرازهویت و مجازشماری

از جمله روش­های احراز هویت(Authentication) و مجازشماری(Authorization) :

·        Token based solution

·        3rd party Authentication Federation

·        API Gateway A&A services

·        Cognito

 

مطالعه مقاله کامل معماری مایکروسرویس