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

تهیه‌کننده مقاله : پگاه حسینی

5 دقیقه زمان مطالعه
1401/01/09
0 نظر

در این مقاله قصد داریم به مزایا و معایب استفاده از معماری میکروسرویس (MicroService) و مقایسه‌ آن با معماری یکپارچه (Monolithic) که بسیاری از افراد با آن آشنایی دارند، بپردازیم.

 میکروسرویس (MicroService) چیست؟

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

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

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

اگر در حال توسعه یک سیستم پیچیده و Server Side باشیم، این سیستم باید طیف وسیعی از کلاینت‌ها را پوشش دهد؛ مانند کلاینت‌های Desktop و کلاینت‌های Mobile و …

از طرف دیگر ممکن است که همین نرم‌افزار، APIهایی را برای استفاده در نرم‌افزارهای مختلف دیگر داشته باشد و یا حتی توسط یک وب‌سرویس با سیستم‌های دیگر در ارتباط باشد.

چنین نرم‌افزاری می‌تواند به یک درخواست http از لایه Business، ارتباط با بانک اطلاعاتی و یا تبادل پیام با سیستم‌های دیگر با فرمت‌های html / json / xml پاسخ دهد.

در واقع این سیستم با اجزای منطقی مختلفی که متناسب با عملیات مختلف، با یکدیگر در تعامل هستند.

اکنون برای چنین سیستمی باید از چه معماری نرم‌افزاری استفاده کنیم؟

اکنون برای چنین سیستمی باید از چه معماری نرم‌افزاری استفاده کنیم؟

در حالت کلی دو نوع معماری نرم‌افزار را می‌توان برای این سیستم ارائه داد:

الف) معماری Monolithic

 در این معماری کل سیستم به صورت یک نرم‌افزار یکپارچه (Integrated) پیاده سازی می‌شود. در این معماری به طور اساسی از یک معماری سه لایه استفاده شده است:

لایه‌ نمایش (Presentation layer) 

لایه‌ کسب و کار (Business layer) 

لایه‌ دسترسی به داده‌ها (Data Access layer)

ب) معماری Micro Services

 در این معماری، سیستم مجموعه‌ای از یک هسته اصلی و سرویس‌هایی کوچک است که هر کدام از این اجزا، به صورت مستقل توانایی انجام کار دارند.

هر یک از این سرویس‌ها می‌توانند توسط گروه‌های جداگانه‌ با پلتفرم‌های توسعه، زبان برنامه‌نویسی و بانک اطلاعاتی جداگانه‌ای توسعه داده شوند و با یک مکانیزم سبک وزن مانند http با یکدیگر در ارتباط باشند.

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

محدودیت‌های معماری Monolithic

محدودیت‌های معماری Monolithic

  1. در این معماری، در هر اجرایی از نرم‌افزار، کل برنامه با تمام وابستگی‌هایی که دارد، اجرا می‌شود.
  2. کلیه اجزای سیستم بر اساس یک زبان برنامه‌نویسی مشخص، برای یک فریم‌ورک مشخص نوشته می‌شوند.
  3. این برنامه‌ها به اصطلاح چند سکویی نیستند و کامپوننت‌های نوشته شده برای آن‌ها، فقط در فریم‌ورک جاری قابل استفاده مجدد هستند.
  4. برای هر تغییری در برنامه‌های مبتنی بر این معماری، به Build و Deploy مجدد کل برنامه نیاز است، که احتمال از دسترس خارج شدن برنامه را هم به وجود می‌آورد.
  5. امکان اجرای بخش‌هایی از سیستم بر روی کامپیوترهای دیگر وجود ندارد.
  6. اگر بخشی از سیستم از کار بیفتد، احتمال توقف عملکرد کل سیستم وجود دارد .
، وجود چندین تیم توسعه در معماری یکپارچه کار توسعه را دشوار می‌کند؛ چون خروجی تنها یک فایل است و همه کدها باید در یک Repository قرار بگیرند، سپس فرایند Deploy طی شود.

تصویر بالا نشان می‌دهد، وجود چندین تیم توسعه در معماری یکپارچه کار توسعه را دشوار می‌کند؛ چون خروجی تنها یک فایل است و همه کدها باید در یک Repository قرار بگیرند، سپس فرایند Deploy طی شود.

وجود باگ یا خطا در کار هر کدام از این تیم‌‌ها سبب معطل شدن کار بقیه می‌شود.

 محدودیت‌های معماری MicroService

  1. به دلیل وجود تعداد زیادی از سرویس‌ها و بخش‌های مختلف در این معماری، توسعه و تنظیمات آن کاری بسیار فرسایشی و زمان‌بر است.
  2. عملکرد سرویس‎ها به خاطر ارتباطات بین سرویس‌ها در بستر شبکه، کند است.
  3. به دلیل ارتباطات شبکه‌ای، احتمال آسیب‌های امنیتی در این نوع برنامه‌ها بیش‌تر است.
  4. نوشتن سرویس‌هایی که در بستر شبکه با سایر سرویس‌ها در ارتباط هستند کار سختی است و مشکلات مخصوص به خود را دارد. به صورتی که برنامه‌نویس در این شرایط درگیر برقراری ارتباط، رمزگذاری داده‌ها  و decode کردن آن‌ها می‌شود.
  5. در کل س‍‍رعت برنامه‌های نوشته شده با معماری MicroService کندتر از برنامه‌های نوشته شده با معماری Monolithic است. دلیل این موضوع محیط اجرایی برنامه‌هاست؛ زیرا برنامه‌هایی با معماری Monolithic بر روی حافظه سرور پردازش می‌شوند.
 با توجه به نیازهای پروژه‌های بزرگ (Enterprise) بهترین و مناسب‌ترین راهکار ممکن، استفاده از معماری MicroService نسبت به معماری Monolithic است.

نتیجه: با توجه به نیازهای پروژه‌های بزرگ (Enterprise) بهترین و مناسب‌ترین راهکار ممکن، استفاده از معماری MicroService نسبت به معماری Monolithic است.

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

  1. از آن جایی که یک نرم‌افزار Enterprise در مقابل از کارافتادگی بخش‌هایی از سیستم بی‌تاثیر می‌ماند، قابلیت Fault Isolation  در سیستم افزایش می‌یابد.
  2. ارتقا و بروزرسانی هر یک از سرویس‌ها جدا از کل سیستم بوده است و به نسبت معماری Monolithic زمان کم‌تری نیاز دارد .
  3. درک عملکرد یک سرویس برای یک توسعه‌دهنده سیستم ساده تر از درک کل سیستم خواهد بود.
  4. مدیریت استفاده از منابع سخت‌افزاری در معماری MicroService بسیار بهینه‌تر از معماری Monolithic است.
مزایای معماری MicroService
مقایسه مزایای معماری MicroService

جمع‌بندی
در این مقاله با دو روش توسعه Monolithic  و MicroService  و مزایا و معایب هر کدام از این روش‌ها آشنا شدیم.

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

منابع:

  • سری مقالات آقای علیرضا ارومند
    قسمت اول میکروسرویس‌ها: آشنایی با میکروسرویس‌هادر این نوشته و چند قسمت آینده قصد داریم با میکروسرویس‌ها به عنوان یکی از پرطرفدارترین روش‌های توسعه نرم افزار آشنا شویم.
    virgool.io
    ۲- سایت microservices.io
    What are microservices? Microservices – also known as the microservice architecture – is an architectural style that structures an application as a collection of loosely coupled services, which implement business capabilities. The microservice architecture enables the continuous delivery/deployment of large, complex applications. It also enables an organization to evolve its technology stack.microservices.io

۳-Microservice Architecture
۴-What is Microservices Architecture?
۵-Microservices architecture: advantages and drawbacks
۶-Microservice Architectures Dr. Andreas Schroeder

مشاهده فرصت‌های شغلی در آسا مشاهده فرصت‌های شغلی در آسا