معماری مایکروسرویس
معماری مایکروسرویس (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
مطالعه مقاله کامل معماری مایکروسرویس