معماری میکروسرویس (MicroService) ، درواقع یک شیوه منحصر بفرد در توسعه سیستمهای نرم افزاری است که در سالهای اخیر رشد چشمگیری داشته است. این روش از سوی بسیاری از توسعهدهندگان در پیاده سازی اپلیکیشنهای عظیم و پیچیده بکار گرفته میشود .
معماری میکرو سرویس
معماری نرم افزار درواقع فرایند معرفی یک راه حل علمی و تکنیکی است برای پیادهسازی یک سیستم نرمافزاری. به عبارتی دیگر معماری نرم افزار مجموعهای از تصمیمات است بر پایه عوامل متفاوت موجود، که این تصمیمات میتواند بر چگونگی سرعت، امنیت و کنترلپذیری کل پروژه و درنهایت موفقیت آن تأثیرات شگرفی داشته باشد.
فرض کنید که در حال توسعه یک سیستم پیچیده و Server-Side هستید، این سیستم بابد رنج وسیعی از کلاینتهای مختلف را پوشش دهد شامل کلاینتهای دسکتاپ و همچنین کلاینتهای موبایل، از طرفی ممکن است که همین نرم افزار API هایی را برای استفاده در نرمافزارهای دیگر داشته باشد و یا حتی توسط بک وب سرویس با سیستمهای دیگر در تراکنش باشد.
چنین نرم افزاری میتواند به یک درخواست Http از لایه business، ارتباط با بانک اطلاعاتی و یا تبادل پیام با سیستمهای دیگر با فرمتهای Html / Json / Xml پاسخ دهد. در واقع در این سیستم اجزای منطقی گوناگونی متناسب با عملیات متفاوت با یکدیگر در تعامل هستند.
اکنون برای چنین سیستمی باید از چه معماری نرمافزاری استفاده کنیم ؟
در حالت کلی دو نوع معماری نرم افرار را میتوان برای این سیستم پیشنهاد داد :
الف) معماری Monolithic : در این حالت کل سیستم بصورت یک نرم افرار یکپارچه پیاده سازی میشود.
ب) معماری Micro Services : در این معماری سیستم مجموعه ای است از یک هسته اصلی و ماژول ها (سرویس ها) ی کوچک که هر کدام از این اجزا بصورت کاملا مستقل توانایی استقرار دارند.
هر یک از این سرویس ها میتوانند توسط تیمهای جداگانهای با پلتفرم توسعه و زبان برنامهنویسی و بانک اطلاعاتی جداگانهای توسعه داده شوند و با یک مکانیزم سبک وزن مانند Http با یکدیگر در ارتباط باشند. این روش پیاده سازی قابلیت Scaling و testability را بالا میبرد و توسعه و نگهداری سیستم را آسان میکند. دلیل آن هم کاملا مشخص است؛ هر سرویس یک وظیفه مشخص دارد و تیم توسعهی آن کاملا بر آن مسلط میباشد و با توجه به اینکه این سرویسها خیلی بزرگ نیستند، تغییرات، تست و نگهداری آن آسان میشود.
محدودیتهای معماری Monolithic :
~ در هر اجرایی از نرم افزار کل برنامه با تمام متعلقاتی که دارد اجرا میشود.
~ کلیه اجزای سیستم بر اساس یک زبان برنامهنویسی مشخص، برای یک فریم ورک مشخص نوشته میشوند. این برنامهها اصطلاحا چند سکویی نیستند و کامپوننتهای نوشته شده برای آنها فقط در فریم ورک جاری قابل استفاده مجدد هستند.
~ برای هر گونه تغییر در برنامههای مبتنی بر این معماری، نیاز به Build و Deploy مجدد کل برنامه میباشد که احتمال از دسترس خارج شدن برنامه هم وجود دارد.
~ امکان اجرای بخشهایی از سیستم بر روی کامپیوترهای دیگر نیست و اگر بخشی از سیستم از کار بیوفتد احتمال توقف عملکرد کل سیستم وجود دارد .
محدودیتهای معماری MicroServices :
~ بدلیل تعدد سرویسها و بخشهای مختلف در این معماری، توسعه و تنظیمات آن کاری بسیار پرزحمت و زمان بر است.
~ امکان کندی عملکرد سرویس ها بدلیل ارتباطات بین سرویس ها در بستر شبکه .
~ به دلیل ارتباطات شبکهای، احتمال آسیب پذیریهای امنیتی در این نوع برنامهها بیشتر است .
~ نوشتن سرویسهایی که در بستر شبکه با سایر سرویسها در ارتباط هستند سختی و مشکلات خود را دارد. برنامهنویس در این شرایط، درگیر برقراری ارتباط، رمزگذاری دادهها و تبدیل آنها میشود.
~ در مجموع سرعت برنامههای نوشته شده با معماری Microservices کندتر از برنامههای نوشته شده با معماری Monolithic است. دلیل آن محیط اجرایی برنامهها است. برنامههایی با معماری Monolithic بر روی حافظه سرور پردازش میشوند.
نتیجه آنکه با توجه به نیازهای پروژه های عظیم ( Enterprise) و مزایایی که معماری MicroService نسبت به معماری Monolithic دارد بهترین و مناسب ترین راهکار ممکن است. در صورت بکارگیری معماری میکرو سیستم :
مزایای معماری MicroServices :
* قابلیت Fault Isolation در سیستم افزایش میابد . لذا یک نرم افزار اینترپراز در مقابل از کارافتادگی بخشهایی از سیستم بیتاثیر میماند .
* ارتقاء و بروزرسانی هر یک از سرویس ها مستقل از کل سیستم بوده و به نسبت معماری مونولتیک زمان کمتری را صرف می نماید .
* درک عملکرد یک سرویس برای یک توسعه دهنده سیستم ساده تر از درک کل سیستم خواهد بود.
* مدیریت استفاده از منابع سخت افزاری در معماری میکروسرویس بسیار بهینه تر از معماری مونولتیک است.