میکروسرویس چیست؟

میکروسرویس یک معماری در توسعه نرم افزار است. امروزه با نیاز رو به رشدی که به اپلیکیشنهای بزرگ به وجود آمده است، مفهومی تحت عنوان میکروسرویس هم در صنعت توسعهٔ نرمافزار رواج یافته است چرا که دولوپرها برای توسعهٔ سیستمهای بزرگ تجاری چارهای جز بکارگیری این معماری ندارند.
برای اینکه با مفهوم میکروسرویس آشنا شوید ابتدا باید بدانید که معماری monolithic چیست.
معماری Monolithic چیست؟
بطور کلی، در این معماری سه لایه وجود دارد:
- Model (منطق اپلیکیشن)
- View (خروجی اپلیکیشن)
- Controller (رابط مابین خروجی و منطق اپلیکیشن)
این نوع معماری که تحت عنوان معماری MVC هم شناخته میشود دارای یکسری نواقصی است. به عبارت دیگر، تمامی لایهها زیر پرچم یک پلتفرم واحد مدیریت میشوند و ارتباط بسیار تنگاتنگی با یکدیگر دارند و مثلاً به سادگی نمیتوان Model یک اپلیکیشنی که تحت معماری MVC نوشته شده را برداشته و در پروژهٔ دیگری استفاده کرد.
در معماری Monolithic یک هستهٔ مرکزی داریم که کاربران و حتی دیگر سرویسها از روش های مختلف میتوانند با آن ارتباط برقرار سازند و میبینیم گرچه خودِ این هستهٔ مرکزی ماژولار است، اما همگی تحت یک پلتفرم واحد کنار یکدیگر قرار گرفتهاند و امکان جداسازی این ماژولها وجود ندارد و یا اگر هم چنین امکانی وجود داشته باشد، بسیار دشوار خواهد بود.
اگرچه در معماری MVC کدها ماژولار هستند و نسبت به گذشته که تمامی فایلها در یک پوشه گذاشته میشدند و اصلاً مفهومی تحت عنوان ماژول در کار نبود شرایط به مراتب بهتر است، اما همانطور که گفته شد، هر ماژول برای کارکرد صحیح و اصولی خود نیاز به سایر ماژولها دارد. بطور کلی، مشکلات مرتبط با معماری Monolithic را میتوان به دستههای زیر تقسیمبندی کرد:
- از آنجا که یک سورسکد اصلی بیشتر وجود ندارد، تکتک اعضای تیم، از دولوپر فرانتاند گرفته تا برنامهنویسهای سمت سرور و غیره، باید روی یک سورسکد کار کنند و بطور مثال اگر کسی بخواهد صرفاً روی بخش مدیریت کاربران کار کند، باید کل پروژه را دریافت کرده و شروع بکار روی پروژه کند.
- یک تغییر کوچک در یکی از ماژولها، ممکن است عملکرد دیگر ماژولها را تحتتأثیر خود قرار دهد.
- در طول زمان این سه لایه آنقدر با یکدیگر عجین خواهند شد که به سختی میتوان مرز مشخصی مابین آنها ایجاد کرد.
- کامپوننتها را به سادگی نمیتوان با یک معماری جدید و بهینهتر جایگزین کرد چرا که کل معماری نرمافزار باید تغییر کند.
- تنوع تکنولوژی از جمله زبانهای برنامهنویسی، دیتابیسهای مختلف، لایبرریها و فریمورکهای مختلف وجود نخواهد داشت و اگر هم اینگونه باشد، ارتباط برقرار کردن مابین آنها بسیار سخت خواهد بود.
- یک باگ در یکی از ماژولها، به احتمال زیاد کل پروژه را تحت تاثیر خود قرار خواهد داد.
اینجا است که برای رفع این مشکلات معماری میکروسرویس به میدان می آید.
معماری Microservice چیست؟
میکروسرویس روشی بمنظور تقسیمبندی کردن یک اپلیکیشن به بخشها یا سرویسهای کوچک، سبک، مستقل از یکدیگر و قابل مدیریت است. به عبارت دیگر، میکروسرویس یک معماری توسعهٔ نرمافزار به اصطلاح Distributed است.
در این معماری هر سرویس صرفاً برای انجام یک وظیفه خاص طراحی میشود. بطور مثال، یک سرویس صرفاً وظیفهٔ مدیریت کاربران را دارا است و سرویس دیگر فقط و فقط برای بخش جستجوی سایت کاربرد دارد و با توجه به اینکه میکروسرویسها مجزا و مستقل از یکدیگر هستند، براحتی قادر خواهیم بود تا آنها را با زبانهای برنامهنویسی مختلفی نوشته و برای ذخیرهسازی دادههای مرتبط با آنها نیز از سیستمهای مدیریت دیتابیس مختلفی استفاده کنیم.
حال ممکن است این پرسش مطرح شود که سرویسهای مختلف یک اپلیکیشن با معماری میکروسرویس چگونه با یکدیگر ارتباط برقرار میکنند؟ با استفاده از ریکوئستهایی از جنس HTTP و یکسری API به اصطلاح RESTful این ارتباط برقرار خواهد شد.
مزایای استفاده از میکروسرویس
مهمترین مزایای استفاده از معماری میکروسرویس عبارتند از:
- بر خلاف معماری مونولیتیک، در یک اپلیکیشنی که در آن از معماری میکروسرویس استفاده شده باشد سرویسها هرگز بر اساس معماری MVC تقسیمبندی نمیشوند بلکه بر اساس کاری که انجام میدهند به بخشهای مختلف تقسیم میشوند.
- یکی دیگر از مزیتهای میکروسرویسها این است که ما مجبور به استفاده از صرفاً یک زبان برنامهنویسی یا فناوری در کل پروژه نمیشویم. در واقع، با توجه به اینکه امروزه برخی زبانهای برنامهنویسی برای حوزههای خاصی تخصصیتر هستند و استفاده از زبانی که اختصاصاً برای کار خاصی طراحی شده کارائی اپلیکیشن ما را بالاتر میبرد.
- میکروسرویسها Scalable هستند. ماهیت مستقل ماژولهای مختلف یک میکروسرویس این امکان را برای ما فراهم میآورند تا با استفاده از زبانی خاص، دیتابیسی خاص و همچنین سروری خاص به توسعهٔ اپلیکیشن مد نظر خود بپردازیم و در صورت نیاز صرفاً منابع همان پلتفرم را ارتقاء دهیم.
- با توسعه پلتفرم های کلاد می توانید از معماری Serverless تحت سرویس FaaS استفاده نموده و هزینه های خود را به میزان زیادی کنترل نمایید.
جمع بندی
استفاده از معماری میکروسرویس بخصوص در اپلیکیشن های بسیار بزرگ، بدلیل وجود تعداد سرویس های زیاد، فرآیند مانیتور کردن، debug و لاگ گیری آنها را نسبت به گذشته سخت تر می کند. به همین دلیل از همان ابتدای راه اندازی نیاز به یک استراتژی مناسب دارید تا در روند بزرگ شدن اپلیکیشن دچار مشکل نشوید.




