hamed sahami
خواندن ۴ دقیقه·۲ ماه پیش

Microservice Design Patterns

انواع مرسومِ الگوهای طراحی میکروسرویس‌ها که مجموعه‌ای از بهترین روش‌ها و راه‌حل‌ها برای طراحی و پیاده‌سازی سیستم‌های مبتنی بر معماری میکروسرویس هستند. این الگوها به توسعه‌دهندگان کمک می‌کنند تا چالش‌های رایج در این حوزه را مدیریت کنند.

الگوی تجزیه بر اساس کسب‌وکار و یا Domain-Driven Design - DDD

این الگو پیشنهاد می‌کند که سیستم بر اساس دامنه‌های کسب‌وکار (Business Domains) به میکروسرویس‌های کوچک‌تر تقسیم شود. هر میکروسرویس مسئول یک بخش خاص از کسب‌وکار است. این کار باعث می‌شود که هر سرویس مستقل و متمرکز بر یک وظیفه خاص باشد. البته برای اطلاع بهتر از این رویکرد حتما از مطالب مفید منتشر شده از بنیانگذار آن Eric Evans در وبسایت های مطرح مراجعه نمایید و مطابق صحبت های ارائه کننده این الگوی طراحی در سیستم هایی نظیر راه کارهای جامع کشتیرانی و برنامه ریزی بارگیری آنها که تغییر پذیری بالایی را به صورت ذاتی دارد توصیه میشود.

الگوی API Gateway

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

الگوی Circuit Breaker

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

الگوی Event Sourcing

در این الگو، تمام تغییرات حالت سیستم به‌صورت رویداد (Event) ذخیره می‌شوند. این کار به شما امکان می‌دهد تا در هر لحظه وضعیت سیستم را بازسازی کنید و از آن برای دیباگ یا تحلیل استفاده کنید. البته به کارگیری این الگوی طراحی می تواند در زمینه های و صنایع مختلفی توصیه شود که بعنوان مثال راه کاری های CRM نیز استعداد بالایی برای به کارگیری این الگوی طراحی نیز دارد.

الگوی CQRS (Command Query Responsibility Segregation)

این الگو عملیات خواندن (Query) و نوشتن (Command) را از هم جدا می‌کند. با این کار می‌توانید پایگاه داده‌های جداگانه برای خواندن و نوشتن داشته باشید و عملکرد سیستم را بهبود بخشید. راه کارهای مربوط به بازارهای مالی و سرمایه مانند کارگزاری ها بسیار مناسب برای استفاده از این الگوی طراحی هستند.

الگوی Saga

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

الگوی Service Registry

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

مقیاس پذیری، پویایی سرویس ها و موارد دیگیری نیز از فواید و کاربردهای این الگوی طراحی در رویکرد میکرو سرویس است.

لگوی Bulkhead

این الگو شبیه به دیواره‌های کشتی است که از گسترش آسیب به کل سیستم جلوگیری می‌کند. با جداسازی منابع (مانند threadها یا connectionها) برای هر میکروسرویس، از تأثیر خطاهای یک سرویس بر سایر سرویس‌ها جلوگیری می‌شود. سرویس پرداخت، سرویس کاربران و سرویس محصولات همگی از کاربردها و مثال های خوب برای این الگوی طراحی هستند که با مدیریت و محدودسازی میزان منابع آنها در مدیریت بهتر محیط عملیاتی می توان عمل کرد.

به شکل خلاصه

سایر الگوهای قابل استفاده در این رویکرد شامل موارد زیر می شود تا همگی در طراحی و چگونگی پیاده سازی این دست سیستم های نرم افزاری به کمک تیم های توسعه و طراحان/معماران شوند.

  • Database per Service
  • Shared Database
  • Orchestration
  • Choreography
  • Sidecar
  • Backend for Frontend (BFF)
  • Strangler Fig


نتیجه گیری

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

https://www.linkedin.com/in/hamedsahami/
شاید از این پست‌ها خوشتان بیاید