معماری میکروسرویس (MicroService) یکی از انواع روشهای معماری نرم افزار است که در آن، اجزای سازنده یک نرمافزار به سرویسهای کوچک و مجزا تقسیم میشوند که هم به صورت مستقل و هم به صورت یکپارچه امکان فعالیت دارند. در این مقاله از بلاگ آسا قصد داریم به مزایا و معایب استفاده از معماری میکروسرویس (Microservice) و مقایسه آن با معماری یکپارچه (Monolithic) که بسیاری از افراد با آن آشنایی دارند، بپردازیم.
میکروسرویس (Microservice) چیست؟
معماری میکروسرویس (Microservice) در واقع یک شیوه منحصر به فرد در توسعه سیستمهای نرمافزاری است که در سالهای اخیر رشد قابل توجهی داشته است. این روش از سوی بسیاری از توسعهدهندگان در پیادهسازی اپلیکیشنهای بزرگ و پیچیده استفاده میشود. میکروسرویسها (که به عنوان معماری میکروسرویس شناخته میشوند)، نوعی از معماری هستند که در آن برنامه، مجموعهای از سرویسهای مختلف است که دارای ویژگیهایی اعم از استقلال عملکردی، وابستگی کم و نگهداری راحت هستند و توسط تیمهای مختلف توسعه پیدا میکنند.
تعریف معماری میکروسرویس به زبان ساده
برای پیادهسازی یک سیستم نرمافزاری باید از یک راه حل علمی و تکنیکی استفاده کرد که به آن معماری نرمافزار میگویند. در واقع معماری نرمافزار مجموعهای از تصمیمها است که این تصمیمها میتوانند بر چگونگی سرعت، امنیت و کنترلپذیری پروژه و موفقیت آن تاثیر به سزایی داشته باشد.
- اگر در حال توسعه یک سیستم پیچیده و Server Side باشیم، این سیستم باید طیف وسیعی از کلاینتها را پوشش دهد؛ مانند: کلاینتهای Desktop و کلاینتهای Mobile
- از طرف دیگر ممکن است که همین نرمافزار، APIهایی را برای استفاده در نرمافزارهای مختلف دیگر داشته باشد و یا حتی توسط یک وبسرویس با سیستمهای دیگر در ارتباط باشد.
- چنین نرمافزاری میتواند به یک درخواست http از لایه Business، ارتباط با بانک اطلاعاتی و یا تبادل پیام با سیستمهای دیگر با فرمتهای html / json / xml پاسخ دهد.
- در واقع این سیستم متشکل از اجزای منطقی مختلفی است که متناسب با عملیات مختلف، با یکدیگر در تعامل هستند.
اکنون برای چنین سیستمی باید از چه معماری نرمافزاری استفاده کنیم؟
مقایسه معماری Monolithic با Microservices
در حالت کلی میتوانیم دو نوع معماری نرمافزار را برای این سیستم ارائه دهیم:
معماری Monolithic
در این معماری کل سیستم به صورت یک نرمافزار یکپارچه (Integrated) پیادهسازی میشود. در این معماری به طور اساسی از یک معماری سه لایه استفاده شده است:
- لایه نمایش (Presentation layer)
- لایه کسب و کار (Business layer)
- لایه دسترسی به دادهها (Data Access layer)
معماری Microservices
در این معماری، سیستم مجموعهای از یک هسته اصلی و سرویسهایی کوچک است که هر کدام از این اجزا، به صورت مستقل توانایی انجام کار دارند. هر یک از این سرویسها میتوانند توسط گروههای جداگانه با پلتفرمهای توسعه، زبان برنامهنویسی و بانک اطلاعاتی جداگانهای توسعه داده شوند و با یک مکانیزم سبک وزن مانند http با یکدیگر در ارتباط باشند.
این راه پیادهسازی، قابلیت مقیاسپذیری و قابلیت تست را بالا میبرد و توسعه و نگهداری سیستم را آسان میکند. دلیل این امر نیز واضح است؛ چون هر سرویس یک وظیفه مشخص دارد و تیم توسعه، به صورت کامل بر روی آن مسلط است. با توجه به این که این سرویسها کوچک هستند، تغییرات، تست نرم افزار و نگهداری آنها نیز آسان است.
محدودیتهای معماری Monolithic
- در این معماری در هر اجرا از نرمافزار، کل برنامه با تمام وابستگیهایی که دارد، اجرا میشود.
- کلیه اجزای سیستم بر اساس یک زبان برنامهنویسی مشخص، برای یک فریمورک مشخص نوشته میشوند.
- این برنامهها به اصطلاح چند سکویی نیستند و کامپوننتهای نوشته شده برای آنها، فقط در فریمورک جاری قابل استفاده مجدد هستند.
- برای هر تغییری در برنامههای مبتنی بر این معماری، به Build و Deploy مجدد کل برنامه نیاز است، که احتمال از دسترس خارج شدن برنامه را هم به وجود میآورد.
- امکان اجرای بخشهایی از سیستم بر روی کامپیوترهای دیگر وجود ندارد.
- اگر بخشی از سیستم از کار بیفتد، احتمال توقف عملکرد کل سیستم وجود دارد.
تصویر بالا نشان میدهد که وجود چندین تیم توسعه در معماری یکپارچه کار توسعه را دشوار میکند؛ چون خروجی تنها یک فایل است و همه کدها باید در یک Repository قرار بگیرند، سپس فرایند Deploy طی شود. وجود باگ یا خطا در کار هر کدام از این تیمها سبب معطل شدن کار بقیه میشود.
محدودیتهای معماری Microservice
- عملکرد سرویسها به خاطر ارتباطات بین سرویسها در بستر شبکه، کند است.
- به دلیل ارتباطات شبکهای، احتمال آسیبهای امنیتی در این نوع برنامهها بیشتر است.
- نوشتن سرویسهایی که در بستر شبکه با سایر سرویسها در ارتباط هستند، کار سختی است و مشکلات مخصوص به خود را دارد. به صورتی که برنامهنویس در این شرایط درگیر برقراری ارتباط، رمزگذاری دادهها و decode کردن آنها میشود.
- در کل سرعت برنامههای نوشته شده با معماری Microservice کندتر از برنامههای نوشته شده با معماری Monolithic است. دلیل این موضوع محیط اجرایی برنامهها است؛ زیرا برنامههایی با معماری Monolithic بر روی حافظه سرور پردازش میشوند.
مزایای معماری Microservice
- از آن جایی که یک نرمافزار Enterprise در مقابل از کارافتادگی بخشهایی از سیستم بیتاثیر میماند، قابلیت Fault Isolation در سیستم افزایش مییابد.
- ارتقا و به روزرسانی هر یک از سرویسها جدا از کل سیستم بوده است و به نسبت معماری Monolithic زمان کمتری نیاز دارد .
- درک عملکرد یک سرویس برای یک توسعهدهنده سیستم، سادهتر از درک کل سیستم خواهد بود.
- مدیریت استفاده از منابع سختافزاری در معماری Microservice بسیار بهینهتر از معماری Monolithic است.
نتیجه: با توجه به نیازهای پروژههای بزرگ (Enterprise)، بهترین و مناسبترین راهکار ممکن، استفاده از معماری Microservice نسبت به معماری Monolithic است.
جمعبندی
در این مقاله با دو روش توسعه Monolithic و Microservice و مزایا و معایب هر کدام از این روشها آشنا شدیم. در مجموع ساخت برنامههای پیچیده سخت و دشوار است. یک معماری Monolithic فقط برای برنامههای ساده و کم حجم کاربرد دارد. اگر از آن برای برنامههای پیچیده استفاده کنید، دچار چالش خواهید شد. الگوی معماری Microservice با وجود موانع و چالشهای زیاد پیادهسازی، بهترین انتخاب برای برنامههای پیچیده و در حال توسعه است.
منبع: www.microservices.io
دیدگاهتان را بنویسید