میکروسرویس‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به ناوبری پرش به جستجو

در رایانش، میکروسرویس‌ها نوعی الگوی معماری است که در آن برنامه‌های پیچیده به بخش‌های کوچک و مستقلی شکسته می‌شوند که از طریق APIهای مستقل از زبان با هم در ارتباط هستند.[۱] این سرویس‌ها کوچک هستند و سطح بسیار خوبی از استقلال را دارند (یعنی decoupledند). به علاوه تمرکز هر یک بر روی انجام یکی از آن کارهای کوچک است.[۲]

جزئیات[ویرایش]

ویژگی‌های معماری میکروسرویس‌ها عبارت است از:

  • سرویس‌ها را به راحتی می‌توان جایگزین کرد.
  • سرویس‌ها حول قابلیت‌ها شکل می‌گیرند، مثلاً در رابطه با واسط کاربری، محصولات مشابه و توصیه شده با کاربر وب، صورت حساب و …
  • سرویس‌ها را می‌توان با زبان‌های برنامه‌نویسی، پایگاه‌داده‌ها، محیط سخت‌افزاری و نرم‌افزاری مختلف و متعددی پیاده‌سازی کرد. انتخاب هر یک بستگی به کاربرد و مسئلهٔ مورد نظر دارد.
  • معماری مبتنی بر میکروسرویس‌ها:
    • بر یک روند توسعهٔ نرم‌افزاری تکیه دارد که در آن ارائهٔ پیوسته (continuous delivery) اهمیت دارد.
    • متفاوت از معماری SOA یا همان معماری سرویس محور است. زیرا که در SOA تلاش برای یکپارچه سازی چندین برنامهٔ کاربردی است در حالی که چندین میکروسرویس تنها متعلق به یک برنامه هستند.

فلسفه[ویرایش]

فلسفهٔ معماری مبتنی بر میکروسرویس‌ها:

  • سرویس‌ها کوچکند و به اندازهٔ کافی ریزدانه هستند (fine grained) ولی نه ریزتر به گونه‌ای که یک هدف تجاری و کاربردی خاص را انجام می‌دهند. این روند شبیه فلسفهٔ Unix است که تلاش می‌کند که «یک چیز را انجام دهد و فقط آن را به خوبی انجام دهد».
  • فرهنگ سازمان باید خودکار سازی deployment و تست نرم‌افزار را مشتاقانه بپذیرد زیرا که در این معماری نیاز به چنین رویکردی وجود دارد. به این ترتیب بار از روی مدیریت، مدیران سیستمی و اجرائیات برداشته می‌شود.
  • فرهنگ و الگوهای طراحی باید فرهنگ حل شکست و خطا داشته باشند و پیوسته در راستای بهبود سرویس‌ها تلاش کنند.
  • سرویس‌ها باید منعطف، واکنش‌گر، با قابلیت ترکیب شدن با بقیهٔ سرویس‌ها، و در انجام تک وظیفه‌ای که دارند کامل باشند.[۳][۴][۵]

انتقاد[ویرایش]

معماری میکروسرویس‌ها به خاطر برخی دلایل مورد انتقاد قرار گرفته است:

  • سرویس‌ها گونه‌ای از موانع برای اطلاعات ایجاد می‌کنند.[۶]
  • این معماری پیچیدگی مضاعفی ایجاد می‌کند و مشکلات جدیدی همچون تأخیر در شبکه، قالب پیغام‌ها، تقسیم بار و قابلیت تحمل خطا[۷]به وجود می‌آورد. نادیده گرفتن هر یک از این‌ها منجر به مشکلاتی می‌شود که در «خطاهای مربوط به پردازش توزیع شده» آمده است.
  • تست کردن و بردن به محیط عملیاتی (deployment) پیچیده‌تر است.
  • پیچیدگی برنامهٔ monolithic به شبکه‌ای از میکروسرویس‌ها منتقل شده است، ولی همچنان وجود دارد:
    • شما می‌توانید آن را جابه‌جا کنید، ولی آن همچنان وجود دارد. -- رابرت آنت: پیچیدگی کجاست؟

زبان‌های برنامه‌نویسی[ویرایش]

  • زبان Jolie به منظور توسعهٔ برنامه‌های توزیع شده مبتنی بر میکروسرویس‌ها طراحی شده است.[۸]
  • Vert.X یک چارچوب توسعهٔ برنامهٔ مبتنی بر رویداد و چند زبانی (polyglot) است که بر روی JVM اجرا می‌شود.[۹]

کاربران[ویرایش]

منابع[ویرایش]

  1. Martin Fowler. "Microservices".
  2. Sam Newman. Building Microservices. ISBN 978-1-4919-5035-7.
  3. Lucas Krause. Microservices: Patterns and Applications. ASIN B00VJ3NP4A.
  4. Lucas Krause. "Philosophy of Microservices?". Archived from the original on 12 November 2016. Retrieved 26 June 2015.
  5. Jim Bugwadia. "Microservices: Five Architectural Constraints".
  6. Jan Stenberg (11 August 2014). "Experiences from Failing with Microservices".
  7. ۷٫۰ ۷٫۱ ۷٫۲ "Microservices" (PDF).[پیوند مرده]
  8. "Jolie".
  9. "Vertx".