با الگوی طراحی ساگا (Saga Design Pattern) در معماری میکروسرویس آشنا شویم

با الگوی طراحی ساگا (Saga Design Pattern) در معماری میکروسرویس آشنا شویم

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


همانطور که میدانیم، معماری میکروسرویس (Microservices Architecture) رویکردی در توسعه نرم‌افزار است که در آن یک برنامه به مجموعه‌ای از سرویس‌های کوچک و مستقل تقسیم می‌شود.

در معماری میکروسرویس هر سرویس به‌صورت جداگانه پیاده‌سازی می‌شود و وظیفه مشخصی را بر عهده دارد.

این سرویس‌ها به‌طور مستقل قابل توسعه، پیاده‌سازی و مدیریت هستند و از طریق رابط‌های سبک مثل HTTP یا پیام‌رسان‌های غیرهمزمان با یکدیگر ارتباط برقرار می‌کنند.

معماری میکروسرویس امکان توسعه سریع‌تر، مقیاس‌پذیری بهتر و انعطاف‌پذیری بالاتری را در پاسخ به تغییرات فراهم می‌کند.

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

 

ساگا یک الگوی طراحی هست که می‌تواند هماهنگی بین چندین تغییر در حالت سیستم را بدون نیاز به قفل کردن منابع برای مدت زمان طولانی انجام دهد. این الگو بر اساس اصول تقسیم یک تراکنش طولانی به تراکنش‌های کوچک‌تر که به صورت مستقل قابل اجرا هستند عمل می‌کند.

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

 

دو نوع اصلی از ساگا وجود دارد: ساگای مبتنی بر Choreography و ساگای مبتنی بر Orchestrator.

در ادامه به بررسی هر کدوم می پردازیم:

 

ساگای مبتنی بر Orchestrator

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

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

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

 

ساگای مبتنی بر Choreography

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

برای مثال:

  • انبار به رویداد "ثبت سفارش" که توسط سرویس سفارش‌ها منتشر می‌شود واکنش نشان می‌دهد.
  • انبار به رویداد "پرداخت دریافت شد" که توسط درگاه پرداخت منتشر می‌شود واکنش نشان می‌دهد.
  • بخش پاداش‌ها به رویداد درگاه پرداخت واکنش نشان می‌دهد.
  • انبار محصولات به رویداد "پرداخت دریافت شد" واکنش نشان می‌دهد.

این فرآیند مانند این است که شما در یک تقاطع شلوغ در حال حرکت هستید، به اطراف نگاه می‌کنید و با حرکت در بین جمعیت مانند یک رقص از تقاطع عبور می‌کنید. به همین دلیل به آن Choreography (رقص دسته جمعی) گفته می‌شود.

 

مدیریت خطاها در ساگا:

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

 

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

 

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

 

اگر این مقاله برای شما جذاب بود خوشحال میشم از قسمت نظرات، حس خودتون یا نکته ای که برای شما قابل بحث هست رو برای ما بفرستید :)

 


دسته بندی ها:

میکروسرویس

ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
هنوز برای این مطلب نظری ارسال نشده است!