علی قایینی
علی قایینی
خواندن ۳ دقیقه·۴ سال پیش

الگوی SAGA در میکروسرویس (Microservices)

تراکنش ها (Transaction) بخش اساسی اپلیکیشن ها هستند. بدون آنها، حفظ ثبات اطلاعات (data consistency) غیرممکن خواهد بود. یکی از انواع تراکنش ها Two-Phase Commit نامیده می شوند. که به طور خلاصه انجام اولین تراکنش به اتمام دومین تراکنش بستگی دارد. به طور مثال ثبت سفارش به این بستگی دارد که از موجودی انبار نیز کم شود.

هنگامی که با میکروسرویس کار می کنید، پیچیده تر می شود. هر سرویس دارای دیتابیس مختص خود است و دیگر نمی توان از Two-Phase Commit برای حفظ ثبات اطلاعات کل سیستم خود استفاده کنید.

هنگامی که این توانایی را از دست می دهید، دیتابیس های RDBMS گزینه مناسبی برای ذخیره سازی محسوب نمی شود ، به همین دلیل است که اکثر شرکت هایی که با میکروسرویس کار می کنند از NoSQL نیز استفاده می کنند.

برای توضیح بیشتر این مشکل، معماری Microservices سیستم فروشگاهی زیر را در نظر بگیرید:

در مثال بالا شما نمی توانید تمام عملیات های پرداخت، بروز رسانی موجودی انبار و ارسال به سیستم تحویل را در یک تراکنش ACID انجام دهید. به دلیل توزیع شده بودن سیستم نیاز به تراکنشی در محیط توزیع شده داریم.

الگوی ‌‌SAGA:

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

الگوی saga با استفاده از مثال بالا به شکل زیر است.

برای اجرای saga ، روش های مختلفی وجود دارد، اما محبوب ترین آن ها عبارتند از:

  • روش اول (Events/Choreography): هنگامی که هیچ هماهنگ کننده ای وجود ندارد، هر سرویس رویدادهای (event) تولید می کند که سرویس دیگر به آن گوش می دهد و تصمیم می گیرد که آیا اقدامی باید انجام دهد یا نه.
  • روش دوم (Command/Orchestration): وقتی یک سرویس هماهنگ کننده مسئولیت متمرکز کردن تصمیم گیری saga و توالی منطق کسب و کار را بر عهده دارد.

روش Choreography:

در این روش ، هر تراکنش هنگام انجام کار خود رویدادی را منتشر می کند. تراکنشی دیگر که این رویداد را دریافت می کند رفتار مناسب را انجام می دهد. کار وقتی تمام می شود که تمام تراکنش ها انجام شود.

در Choreography این فرآیند و ارتباطات توسط خود تراکنش ها اداره می شود.

مزایای Choreography:

  • پیاده سازی آسان و ساده
  • اگر تعداد تراکنش ها کم باشد، مناسب است.
  • مناسب سازمان های چابک (agile)

معایب Choreography:

  • وقتی تعداد تراکنش ها افزایش می یابد بسیار پیچیده می شود.
  • ممکن است باعث ایجاد وابستگی در بین سرویس ها شود.

روش Orchestration:

در این روش، یک سرویس جداگانه وجود دارد که کل فرایند را هماهنگ می کند. این سرویس مدیریت می کند که چه زمانی کدام سرویس اجرا شود. اگر یکی از تراکنش ها به دلایلی از کار بیفتد Orchestrator مسئولیت برگشت (rollback) تراکنش هایی قبلاً انجام شده را بر عهده دارد.

مزایای Orchestration:

  • پیاده سازی آسان و ساده
  • درک ساده و نگهداری آسان.
  • افزایش تعداد تراکنش ها باعث افزایش پیچیدگی نمی شود.

معایب Orchestration:

  • تمام منطق کسب و کار در Orchestration نوشته می شود.

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



منابع:

microserviceمیکروسرویسمعماری نرم افزارسیستم های توزیع شدهنرم افزار
یه بک اند دولوپر :)
شاید از این پست‌ها خوشتان بیاید