میکروسرویس چیست - راهنمای جامع و چالش های معماری Microservices

زمانی که یک پروژه نرم افزاری بزرگ رو به رشد است، مدیریت و توسعه آن با یک سیستم یکپارچه امکان پذیر نیست زیرا موجب ایجاد مشکلات و نقص های زیادی می شود. برای مقیاس پذیری بیشتر و انعطاف پذیری بالاتر، سیستم معماری " میکروسرویس" بوجود آمده است که با تقسیم هر بخش نرم افزار به سرویس های کوچکی که صورت مستقل کار می کنند، موجب توسعه راحت تر آن نرم افزار در زمان کمتری می شود. درست است که میکروسرویس در نگاه اول شگفت انگیز به نظر می رسد، اما با چالش هایی نیز همراه است که در این مقاله به مفهوم این سیستم و نکات مثبت و منفی استفاده از آن و چالش هایی که ممکن است با آن مواجه شوید را بررسی خواهیم کرد.
میکروسرویس Microservice چیست؟
میکروسرویس سبکی از معماری نرم افزار است که برنامه را به سرویس های کوچکی تقسیم می کند تا به صورت مستقل و بدون تاثیر بر کل سیستم، مستقر شده و به روز رسانی و یا راه اندازی مجدد شوند. هر میکروسرویس به علت مرزبندی، عملکرد و تعامل مشخص شده ای دارد و ارتباط بین آن ها توسط API های سبک وزن HTTP صورت می گیرد. برای درک و نگهداری بهتر و کم هزینه تر از دیتابیس، میکروسرویس ها طوری طراحی شده اند که با نیاز های کاربران هماهنگ باشند. میکروسرویس ها علاوه بر افزایش امنیت سیستم، با محیط های مختلف سازگاری داشته و موجب توسعه پر سرعت تر نرم افزار می شود.معماری میکروسرویس ها
درک اجزای معماری میکروسرویس، موجب تاثیر بهتری در اجرای آن می شود. موارد تشکیل دهنده اصلی آن شامل موارد زیر می شود:1_ سرویس ها
سرویس ها از اجزای اصلی معماری میکروسرویس ها محسوب می شوند و هر سرویس به صورت مستقل و برای عملکرد یا کار خاصی طراحی شده است. برای اینکه تغییرات ایجاد شده در یک سرویس بر روی سرویس دیگر تاثیر نگذارد ارتباط میان این سرویس ها به صورت ضعیف طراحی شده اند. اگر بخواهیم یک مثال بزنیم، سایت یک فروشگاه لباس که از قسمت های مختلفی از جمله ثبت نام، قسمت پرداخت، سبد خرید و غیره تشکیل شده است را در نظر بگیرید. هر کدام از این قسمت ها وظیفه و عملکرد متفاوتی دارند و تغییر در هر کدام از آن ها موجب تاثیر بر روی عملکرد دیگر نمی شود.2_ دیتابیس ها
هر میکروسرویس می تواند دیتابیس جداگانه و مستقل و یا مشترک داشته باشد. مدیریت هر سرویس به عهده خود سرویس است که این امر موجب بهبود عملکرد و کاهش خطا و استفاده از فناوری های مختلف می شود. مدیریت دیتا نیاز به پارتیشن بندی اطلاعات دارد که سبب تقسیم مجموعه به بخش های کوچک تر شده و مورد دوم، نیاز به ثبات نهایی دارد که این مورد هم تضمین کننده هم گرا شدن کپی های داده در طول زمان است.3_ API gateway
برای دسترسی کاربران به خدمات برنامه، دروازه API وجود دارد. API که به منظور ساده سازی تعاملات سرویس و بهبود بخشیدن امنیت و عملکرد ایجاد شده است، مسئولیت های زیاد دارد که در ادامه برخی از آن ها را آورده ایم:- مسیریابی درخواست به میکروسرویس های مناسب
- جمع آوری نتایج
- بازگردانی نتایج به درخواست کننده
- احراز هویت
- خاتمه SSL
- محدود کردن نرخ

4_ پروتکل های ارتباطی
ارتباط میان میکروسرویس ها به دو صورت همزمان مانند HTTP و REST و ناهمزمان مانند Apache Kafka است. ناهمزمان، برای رسیدگی به درخواست مشتریان و همکاری سرویس ها استفاده می شود که نمونه آن پلتفرم Apache Kafka است که از آن می توان برای موارد زیر بهره برد:- مقیاس بندی نتایج
- ذخیره داده و خصوصاً داده های IoT
- تجزیه تحلیل معاملات کاربر
5_ کشف خدمات
از آنجایی که سرویس ها در محیط ابری می توانند آدرس های IP خود را تغییر دهند، قابلیت کشف سرویس باعث ارتباط مطمئن سرویس ها با یکدیگر می شود.6_ کانتینر ها
کانتینر ها بسته هایی که حاوی میکروسرویس ها هستند، به صورت کدها و کتابخانه های هستند که مقیاس پذیری را آسان تر و سرعت آن را افزایش می دهند. از فناوری های کانتینر سازی می توان به Docker و Kubernetes اشاره کرد که داکر پلتفرمی برای مستقر شدن و توسعه سریع برنامه ها، و کوبرنتیز نقش سازماندهی پلتفرم هایی مانند داکر را دارد.7_ مدیریت پیکربندی
برای سازگاری میان محیط ها و ساده سازی مدیریت پیکربندی سیستم در هنگام افزایش تعداد، ابزار های مدیریت پیکربندی به مدیریت تنظیمات کمک می کنند.8_ یکپارچه سازی و استقرار مداوم (CI/CD)
برای سریع تر کردن روند توسعه و انتشار، شیوه CI/CD با امکان فراهم کردن به روز رسانی خدمات فردی در معماری میکروسرویس ها ایجاد شده اند.9_ نظارت و ثبت
برای درک رفتار برنامه و اطمینان از سلامت و بررسی مشکلات آن، ابزار ها و پلتفرم هایی بر عملکرد برنامه نظارت دارند.
چه شرکت هایی از فناوری میکروسرویس استفاده می کنند؟
در حال حاضر، شرکت های بزرگ و شناخته شده ای از معماری میکروسرویس استفاده می کنند که شامل موارد زیر است:- نتفلیکس (Netflix)
- آمازون (Amazon)
- اوبر (Uber)
- پی پال (PayPal)
- توییتر یا همان X
- eBay
معایب و چالش های معماری Microservices
در مطالب بالاتر در مورد این که چرا بهتر است از معماری میکروسرویس استفاده کنیم، صحبت کردیم. اما خوب است بدانید که در کنار مزایای آن، معایبی هم در این نوع از معماری نرم افزار وجود دارد که در ادامه به بررسی آن ها پرداحتیم:1_ پیچیدگی
مدیریت چندین سرویس نسبت به یک سرویس واحد سخت است و در فرآیند توسعه مشکل ایجاد می کند. از آن جایی که این پیچیدگی مشخص کننده استقرار و ارتباط بین سرویس ها و غیره است، پس مدیریت آن بسیار مهم است. اما برای برنامه های کوچک، نیازی به استفاده از میکروسرویس نیست و به کار بردن آن به صرفه نیست.2_ مدیریت داده
از آنجایی که هر سرویس، پایگاه داده خود را به صورت مستقل مدیریت می کند ممکن است در سازگاری و یکپارچه سازی داده های مشکلاتی بوجود بیاید و از طرفی اعمال کردن الگو های دیگر صرفاً موجب اضافه شدن لایه جدیدی از پیچیدگی می شود که در این حالت باید از الگوهایی استفاده کنیم که بدون نیاز به اتصال شدید، داده ها را به ثبات برساند.3_ شبکه
ارتباط بین میکروسرویس ها از طریق یک شبکه، باعث ایجاد مشکل بر عملکرد های دیگر برنامه از لحاظ پهنای باند می شود. برای حل این مشکل، نیاز داریم که در چنین ارتباطاتی خصوصاً ارتباطات همزمان، به درستی مدیریت کرده و دچار تاخیر در پاسخ دهی نشود.4_ امنیت
سیاست های امنیتی میکروسرویس ها بسیار پیچیده است و پیاده سازی آن ها باید طوری باشد که موجب افزایش پیچیدگی در عملکرد سرویس نشود. امنیت معماری میکروسرویس، باید شامل موارد زیر باشد:- حفاظت از تک تک سرویس ها
- حفاظت از ارتباطات میان هر سرویس
- حفاظت از داده های حساسا هنگام انتقال
- حفاظت در برابر نفوذ عوامل خارجی هنگام احراز هویت API ها

5_ نظارت
برای حفظ سلامت عملکرد سیستم، نیاز دارد که به صورت سراسری تمام اجزای سرویس ها، به صورت هماهنگ شده ردیابی و بررسی کند.