ایکون سایت امیر مهجوریان

معماری مایکروسرویس (Microservices Architecture) چیست؟

1) تعاریف و مفاهیم معماری مایکروسرویس

1-1) تاریخچه و تعاریف

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

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

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

  • مایکروسرویس­‌ها یک تکنیک توسعه نرم‌­افزار مشتق شده از سبک معماری سرویس­‌گرا است که از مجموعه‌­ای از سرویس­‌های خوش­‌تعریف تشکیل شده است. در معماری مایکروسرویس پروتکل‌­های ارتباطی سبک و مستقل از پلتفرم هستند و سرویس‌­ها دامنه و مسئولیت معیین و مشخصی دارند، مزایای این معماری بهبود ماژولاریتی سیستم و تسهیل توسعه، استقرار و تست سیستم است؛ همچنین سیستم توسعه­‌یافته دارای مقیاس­‌پذیری بالا و سرعت بالاتر اعمال تغییر است. این معماری با رویکرد DevOps در توسعه و پشتیبانی نرم‌­افزارها هماهنگی دارد. (Wikipedia)
  • سبک معماری مایکروسرویس رویکردی برای توسعه یک نرم­‌افزار متشکل از تعدادی سرویس کوچک و مستقل است که هر سرویس به­‌اتکاء منابع و زیرساخت خودش اجرا شده و از طریق پروتکل‌­های سبک مبتنی بر HTTP با دیگران ارتباط دارد. این­ سرویس­‌ها براساس قابلیت­‌های کسب­‌وکار طراحی و ساخته می­‌شوند و بر بسترهای فناوری با زبان­های برنامه‌­نویسی مختلفی قابل استقرار هستند. این سرویس‌­ها حداقل نیاز به مدیریت متمرکز را دارند و هر سرویس پایگاه داده مخصوص به خود را مدیریت می­کند. (Martin Fowler)
  • مایکروسرویس­‌ها به ­صورت خلاصه سرویس­‌های دانه‌­ریز و خودمختاری هستند که با یکدیگر همکاری می‌­کنند. هر سرویس باید بتواند مستقلا تغییر کند بدون اینکه منجر به تغییر دیگر سرویس‌­های مرتبط یا استفاده‌­کنندگان از سرویس شود. (Sam Newman)
  • معماری مایکروسرویس یک رویکرد مهندسی مبتنی بر شکست یک نرم­‌افزار به ماژول‌­های تک-کارکردی است که مستقلا تولید و مستقر می­‌شوند و با واسط­ه‌ای خوش­ تعریف با دیگر سرویس‌­ها ارتباط دارند. این سرویس‌­ها توسط تیم­‌های کوچکی تولید و پشتیبانی می­شوند که از تمام چرخه حیات سرویس پشتیبانی می­‌کند (IBM)
  • معماری مایکروسرویس از مجموعه‌­ای از سرویس‌­های خودمختار و کوچک تشکیل شده است که هر سرویس مستقل بوده و یک قابلیت کسب­‌وکار را پیاده‌­سازی می­نماید (Microsoft)
  • معماری مایکروسرویس یک رویکرد چابک و ماژولار به توسعه نرم­‌افزار است که برخلاف نرم‌­افزارهای یک‌­تکه – که همه مولفه­‌ها و قابلیت‌­های سیستم با یکدیگر آمیخته شده­‌اند- مبتنی بر مجموعه‌­ای از سرویس‌­های کوچک­تر و مستقل از هم با ارتباط سست است. هر سرویس مسوول انجام وظایف و پردازش خود است و یک کارکرد مشخص از کل سیستم را پشتیبانی می­‌کند و با دیگر سرویس‌­ها از طریق  API ارتباط دارد (Oracle)

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

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

Microservices Architecture

1-2) اصول و ویژگی­‌های معماری مایکروسرویس

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

  • هر سرویس مسوول یک دامنه مشخص و به­‌خوبی تعریف‌­شده از سیستم(صورت­‌مساله) است که مستقلا تولید(Build) و استقرار(Deploy) می­یابد.
  • هر سرویس از فناوری­ها و ابزارهای مناسب خود بهره­ می‌­برد و لزومی ندارد همه سرویس‌های یک سیستم از یک فناوری، زبان ­برنامه‌­نویسی یا پلتفرم استفاده کنند.
  • سرویس­‌ها با واسط­‌های خوش تعریف و سبک با یکدیگر تعامل دارند، خروجی هر سرویس باید بتواند ورودی سرویس­های دیگری قرار گیرد.
  • هر سرویس مسوول مدیریت داده‌­های خود است و می­تواند از انواع ابزارهای DBMS استفاده نماید.
  • اصول کلی معماری سرویس‌­گرا در این معماری نیز صادق است.
  • ترجیح استفاده از روش پیام­رسانی غیرهمزمان(Asynchronous) نسبت به همزمان
  • ترجیح استفاده از روش همکاری کاریگرافی(Choreography) نسبت به ارکستریشن

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

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

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

1-4) طراحی و استخراج مایکروسرویس­ها

مهمترین موضوع در معماری مایکروسرویس، نحوه استخراج و دانه‌­بندی سرویس‌­ها است بگونه‌­ای که این سرویس­‌ها کاملا خودمختار بوده و حداقل نیاز به مدیریت مرکزی(متمرکز) در سیستم وجود داشته باشد، برای استخراج سرویس فضای مساله به مجموعه‌­ای از دامنه‌­ها شکسته شده و هر تیم مسوول طراحی-پیاده‌­سازی-پشتیبانی یکی از دامنه‌­ها خواهد بود که با مفاهیم DevOps نیز همخوانی دارد؛ برای استخراج سرویس و انتخاب دامنه‌­ها در معماری مایکروسرویس معمولا از چندین روش و تکنیک استفاده می‌­شود که معروف­ترین آن­ها طراحی مبتنی‌­بر دامنه (Domain Driven Design) است، کتاب­های مختلفی در این حوزه وجود دارد که معروف­ترین آن­ها نوشته Eric Evans[4] می­باشد. علاوه بر متد گفته شده مجموعه‌­ای از تکنیک­‌های شناسایی سرویس مبتنی بر معماری سرویس‌­گرا و شی‌ء­گرایی نیز مورد استفاده قرار می‌­گیرد که در بخش‌­های بعدی معرفی خواهند شد.

صرف­ نظر از تکنیک و روش شناسایی سرویس در معماری مایکروسرویس، این اصل پذیرفته شده است که برای چابکی در توسعه و تغییرات سرویس، برای هر مجموعه از سرویس­‌های مرتبط یک تیم تخصصی با رویکرد DevOps اختصاص یابد(شکل زیر).

DevOps Microservices

1-5) ارتباط معماری سرویس­ گرا با معماری مایکروسرویس

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

برای بررسی موضوع نگاهی می­کنیم به تعریف معماری سرویس­‌گرا توسط IBM که در سال­ 2002 ارایه شده بود و نویسنده نیز در پایان­‌نامه کارشناسی ارشد[5] و کتابی[6] که بعدا در سال 1389 منتشر نمود، به آن ارجاع داد:

“معماری سرویس­‌گرا رهیافتی برای ساخت سیستم های توزیع شده است که کارکردهای نرم افزاری را در قالب سرویس ارائه می کند. این سرویس ها هم توسط دیگر نرم افزارها قابل فراخوانی هستند و هم برای ساخت سرویس های جدید مورد استفاده قرار می گیرند، این رهیافت برای یکپارچه سازی فناوری ها در محیطی که انواع مختلفی از سکوهای نرم افزاری و سخت افزاری وجود دارد ایده آل است.”

با مقایسه تعریف فوق از معماری سرویس‌­گرا با اصول و تعاریفی که درباره معماری مایکروسرویس ارایه شد، به روشنی مشخص می­شود که تقابل(تفاوت) عمده­ای بین این دو نیست، و شاید بتوان معماری مایکروسرویس را گونه­ کامل­‌تر و اصولی‌­تر از تحقق معماری سرویس­‌گرا نسبت به فناوری وب-­سرویس و استانداردهای آن دانست که طی دو دهه گذشته معرفی شدند.

1-6) نتایج و مزایای معماری مایکروسرویس

مهمترین مزایا و نتایج حاصل از معماری مایکروسرویس به قرار زیر است:

حق ­انتخاب فناوری/ابزار:

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

پایداری سیستم:

  • یکی از ویژگی­های اصلی سیستم‌­های پایدار امکان ادامه فعالیت سایر سرویس‌­ها (مایکروسرویس­‌ها) در صورت از کار افتادن یک سرویس است(و در صورت نیاز جایگزینی سرویس ازکار افتاده با نمونه مشابه یا پشتیبان)، این موضوع در معماری مایکروسرویس به دلیل خودمختاری و عدم وابستگی سرویس­‌ها محقق می‌­شود.

مقیاس­‌پذیری بالا و هدفمند:

  • امکان مقیاس‌­پذیری سیستم در سیستم­‌های یک­‌تکه به­‌صورت همه یا هیچ است، اما در معماری مایکروسرویس امکان مقیاس­‌پذیری موثر به ازای هر سرویس دلخواه میسر است. بنابراین هر بخش از سیستم که بار(load) کاری بیشتری داشته باشد، متناسبا می­تواند منابع پردازشی بیشتر نیز دراختیار گیرد و نیازی نیست برای همه مولفه‌­های سیستم مقیاس­‌پذیری یکنواخت انجام شود.

توسعه و تغییرات:

  • امکان تغییر در منطق  هر سرویس بدون نگرانی از تاثیرات منفی در سایر سرویس‌­ها به دلیل خودمختاری سرویس‌­ها ساده­‌تر است، این موضوع البته برای تغییر منطق داخلی است و در صورتیکه واسط سرویس تغییر کند باید به سایر سرویس‌­ها (استفاده­‌کنندگان) اطلاع داده شود.

استفاده­ مجدد و ترکیب­‌پذیری:

  • به­‌مانند معماری سرویس­‌گرا یکی از اهداف اصلی از توسعه سرویس‌­ها، امکان استفاده مجدد و ترکیب سرویس­های موجود برای ایجاد سرویس­های جدید است.

تطابق با معماری سازمان سرویس‌­گرا:

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

سهولت جابجایی و جایگزینی سرویس­ ها:

  • با توجه به خودمختاری کارکردی و فناوری سرویس­ها، به سادگی می­توان یک سرویس را که عملکرد آن مناسب نبوده با نمونه بهتر جایگزین نمود یا یک سرویس را به­ تنهایی به یک محیط/سیستم دیگر منتقل نمود و از آن استفاده نمود

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

2-1) Containers

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

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

  • Kubernetes
  • Docker Swarm
  • Amazon ECS
  • Azure Service Fabric
  • Cloud Foundry
  • Google Cloud Functions
  • IBM Bluemix OpenWhisk
  • Oracle Application Container

2-2) 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

شکل زیر مثال ساده ­ای از یک سیستم مبتنی بر معماری مایکروسرویس متشکل از تعدادی سرویس خودمختار و یک دروازه(Gateway) دسترسی است.

API Gateway

2-3) روش­های احرازهویت و مجازشماری

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

  • Token based solution
  • 3rd party Authentication Federation
  • API Gateway A&A services
  • Cognito

2-4) روش­های شناسایی و کشف سرویس

از جمله روش­های شناسایی و کشف(Discovery) سرویس برای سرویس ­گیرندگان:

  • Client Side-Service Discovery
  • Application Load Balancer-based Service Discovery
  • DNS-Based Service Discovery
  • Service Discovery using ECS Event Stream

2-5) متدلوژی­­های تحلیل و طراحی

در حوزه مایکروسرویس‌‌­ها متاسفانه متدلوژی­های شناخته شده و مدونی برای تحلیل و طراحی سرویس وجود ندارد(متدلوژی حاصل سال­ها تجربه آموزی است و به دلیل جدید بودن این معماری، در سال­های آینده باید منتظر انتشار متدلوژی­های مایکروسرویس باشیم)، اما مجموعه‌­ای از منابع و رهنمودهای قابل استفاده را می­‌توان به صورت زیر معرفی نمود:

  • روش­های طراحی مبتنی بر دامنه(DDD) خصوصا کتاب­های آقای Eric Evans
  • مانیفست واکنشگر (Reactive Manifesto)
  • مفاهیم و تکنیک­های DevOps از جمله Twelve-Factor App
  • الگوهای کارکردی سرویس (Functional Decomposition Pattern)
  • تئوری CAP

2-6) پلتفرم­های طراحی و تولید

از جمله پلتفرم‌­های طراحی و تولید مایکروسرویس‌­ها:

  • Ballerina
  • Netflix OSS
  • MSF4J
  • Akka
  • Vert.X
  •  Fabric8
  • Cocaine
  • Deis
  • Lightbend
  • OpenWhisk
  • VAMP

علاوه بر موارد گفته شده، برای طراحی موفق در معماری مایکروسرویس نیاز به دانستن تکنیک‌­ها، استانداردها و مفاهیم مهم دیگری نیز هست که تشریح آن­ها از حوصله این نوشته خارج است و تنها به صورت تیتر-وار به آنها اشاره می­شود: Bounded Context ، Conway’s Law ، Platform Services ، SOEA ، MDM ، BCM ، Command Query Responsibility Segregation ،Data-Access pattern  ، EDA ، NoSQL Data Design و …

3) چالش­ها و راهکارهای پیشنهادی

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

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

3-1) چالش‌­های معماری مایکروسرویس

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

چالش­های معماری:

  • مانیتورینگ، مدیریت نسخه‌‌­ها، تضمین امنیت و کنترل مایکروسرویس‌­ها به مراتب سخت‌­تر از سایر معماری­‌ها و سیستم­های متمرکز یا لایه‌­ای است.
  • پیاده­‌سازی معماری­‌های توزیع‌­شده (با سرویس‌­های خودمختار) نیاز به ابزارها و متدهای پیچیده‌­تری برای پیاده‌­سازی و نگهداشت دارد.
  • به­ دلیل اینکه هر مایکروسرویس خودمختاری بالایی دارد، حجم زیادی از دوباره‌­کاری در برنامه ­نویسی هر سرویس برای اعمال مکانیزم­‌های کنترلی-امنیتی-مشترک باید انجام شود.

چالش­‌های سازمانی:

  • پیاده‌­سازی معماری­ مایکروسرویس نیازمند نیروی انسانی بسیار ماهر و توانمند است که تامین آن برای هر سازمانی ممکن نیست.
  • ساختار سازمانی بیشتر واحدهای فناوری اطلاعات و تیم‌­های توسعه نرم‌­افزار مبتنی بر تقسیم افقی فناوری‌­ها-ابزارها (UI-Application-Database) شکل گرفته است و تغییر این ساختار به تیم­های مبتنی بر DevOps با یک دامنه محدود کسب­وکار، سخت و زمان­بر است.
  • انتخاب سبک مناسب معماری بنا بر نیاز هر سازمان یکی از چالش­های قدیمی است، هر صورت­ مساله‌­ای نیاز به راهکار مناسب خود دارد و قرار نیست هر سیستم کوچک یا بزرگی مبتنی بر مایکروسرویس باشد. انتخاب بین معماری‌­ها-راهکارهای مختلف و نحوه یکپارچگی بین آن­ها از جمله دغدغه‌­های مدیران و تصمیم­‌گیران است.

چالش­‌های فناوری/ابزار:

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

3-2) راهکارها و الزامات بکارگیری معماری مایکروسرویس

همانطور که در ابتدای این بخش گفته‌­شد، پارادایم سرویس‌­گرایی(به صورت عام) و معماری مایکروسرویس (به‌­صورت خاص) روندهای آینده‌­دار صنعت فاوا هستند که در دنیای رقابتی و سرویس­-محور کسب­‌وکار نیز تضمین‌­کننده همراستایی بین کسب‌­وکار با فاوا هستند، اما برای بکارگیری هدفمند و موفق این معماری، الزامات(قوانین) زیر پیشنهاد می­شود:

  • قانون اول اینکه همه­‌جا و هر سیستمی نباید مایکروسرویسی باشد، برای هر صورت-­مساله‌­ای باید نیازمندی‌­های معماری(وظیفه­‌مندی-غیروظیفه­‌مندی)، محدودیت­‌ها-اجبارها و مجموعه شرایط محیطی-زمینه­‌ای توسط معمار ارشد تحلیل شود و سبک(راهکار) مناسب معماری انتخاب شود.
  • قانون دوم اینکه در صورت انتخاب معماری مایکروسرویس باید بدانیم که ضمن تبعیت از اصول اصلی این معماری، انتخاب‌­های مهم و سختی وجود دارد که نحوه(مدل) معماری منطقی و فیزیکی سیستم را مشخص خواهد کرد، لذا معماری مایکرو­سرویس به اشکال و چیدمان‌­های متنوعی قابل پیاده­‌سازی است که انتخاب نامناسب در این مرحله نتایج جبران­‌ناپذیری دارد.
  • قانون سوم اینکه نباید فریب عناوین ابزار-فناوری-پروتکل­ را خورد؛ هر شرکت نرم­‌افزاری که ادعا می­کند محصولات مبتنی بر معماری مایکرو­سرویس تولید کرده باید راست آزمایی شود و صرف استفاده از چند ابزار و پلتفرم مرتبط با معماری مایکروسرویس به معنای تولید سیستم سرویس­‌محور منطبق با اصول مایکروسرویس‌­ها نیست (همچنان که هنوز بعد از گذشت بیش از یک دهه از ظهور معماری سرویس‌­گرا، درصد کمی از سیستم‌­هایی که با این عنوان طراحی و فروخته­ شده‌­اند، واقعا طبق اصول سرویس­‌گرایی طراحی و پیاده‌­سازی شده‌­اند)
  • قانون چهارم اینکه “استقرار و به‌­نتیجه ­رسیدن” یک سبک معماری جدید در سازمان نیازمند تغییر فرهنگ و معماری کسب‌­وکار در آن سازمان است، تحقق ایده‌­ال معماری مایکروسرویس نیازمند بازنگری معماری سازمانی با رویکرد سرویس­‌گرا است. تغییرات می­‌توان از هر دو طرف شروع شود و به طرف دیگر سرایت نماید. یکی از دلایل موفقیت شرکت­هایNetflix ، Amazon در پیاده­‌سازی معماری مایکروسرویس، ماهیت سرویس‌­گرا کسب‌­وکار این شرکت­‌ها ارزیابی می­شود.
  • قانون پنجم اینکه انتخاب و دانه‌­بندی مناسب سرویس­‌ها از مهمترین عوامل موفقیت در طراحی و استقرار معماری مایکروسرویس است که متاسفانه متدلوژی‌­های مدون و استانداردی هنوز برای آن ارائه نشده است، بنابراین سازمان­‌ه ا(تیم­ها) باید قبل از شروع پیاده‌­سازی، نسبت به تدوین یک متدلوژی داخلی(بومی) از مجموعه مراجع-کتاب­‌ها-تجارب داخلی یا بین­‌المللی اقدام نمایند. رابطه معنادارای بین عدم بکارگیری یک متدلوژی مناسب با شکست پروژه‌­های سرویس­‌گرا وجود دارد.


4) منابع و مراجع

Books:

  1. Building Microservices, Sam Newman (2015)
  2. Microservices for the Enterprise, Kasun Indrasiri & Prabath Siriwardena (2018)
  3. Vertically Integrated Architectures, Jos Jong (2019)
  4. Building Microservices with ASP.NET Core, Kevin Hoffman (2017)
  5. Building Evolutionary Architectures: Support Constant Change, Neal Ford, Rebecca Parsons, and Patrick Kua (2017)

Papers and Presentations:

  • Essential Capabilities behind Microservices, Kim Kao (2019)
  • Microservices: Powered by Containers-as-a-Service, Chris Rosen (2017)
  • Implementing Microservices on Oracle Cloud, Lucas Jellema (2018)
  • Microservices, containers and event-driven architecture, Simon Green (2018)
  • Microservices: The Journey So Far and Challenges Ahead, Pooyan Jamshidi, C. Pahl, N. Mendonca, J. Lewis, S. Tilkov (2018)
  • MicroServices Architecture, Araf Karsh Hamid (2018)
  • Pragmatic approach to MicroServices, David Hymers (2019)
  • Microservices, Containers, Databases and Persistence Models, Kuassi Mensah and Paul Parkinson (2018)
  • Comparison of different architecture styles, Attila Balogh-Biró (2016)

Websites:

  1. https://microservices.io
  2. https://developer.ibm.com/technologies/microservices
  3. https://www.mulesoft.com/resources/api/what-are-microservices
  4. https://en.wikipedia.org/wiki/Microservices
  5. https://www.redhat.com/en/topics/microservices
  6. https://www.docker.com/solutions/microservices
  7. https://aws.amazon.com/microservices/
  8. https://martinfowler.com/articles/microservices.html
  9. https://www.nginx.com/learn/microservices
  10. https://docs.oracle.com/en/solutions/learn-architect-microservice/index.html
  11. https://wso2.com
  12. https://camunda.com/learn/whitepapers/microservices-and-bpm
  13. https://dzone.com
  14. https://dotnet.microsoft.com/learn/web/microservices-architecture
  15. https://www.tibco.com/solutions/microservices
  16. https://www.infoq.com/microservices
  17. https://www.microservices.com
  18. https://www.cloudfoundry.org/microservices
  19. https://samnewman.io

[1] Forrester Data Global Business Technographics® Developer Survey, 2017

[2] Redhat 2017 Microservices Survey

[3] Global Microservices Trends: A Survey of Development Professionals

[4] Domain-Driven Design: Tackling Complexity in the Heart of Software

[5] پایان نامه کارشناسی ارشد با عنوان ” تدوین متدولوژی معماری سازمانی سرویس گرا در جهت پوشش به  چارچوب زکمن”

[6] کتاب ” اصول، مبانی و روش های معماری سازمانی سرویس گرا ” انتشارات دانشگاه شهید بهشتی: نویسندگان دکتر فریدون شمس و امیررضا مهجوریان

اشتراک‌گذاری پست: