📌الگوی Saga چی هست و چرا بهش نیاز داریم؟
[Saga distributed transactions pattern]
🔹الگوی طراحی Saga به حفظ سازگاری دادهها در سیستمهای توزیعشده با هماهنگسازی تراکنشها بین چندین سرویس کمک میکند.
🔹یک Saga دنبالهای از تراکنشهای محلی (local transactions) است که در آن هر سرویس عملیات خود را انجام داده و مرحله بعد را از طریق رویدادها یا پیامها آغاز میکند
🔹اگر مرحلهای از این دنباله با شکست مواجه شود، Saga مجموعهای از تراکنشهای جبرانی (compensating transactions) را برای برگرداندن مراحل انجامشده اجرا میکند. این روش به حفظ سازگاری دادهها کمک میکند.
📍زمینه و مشکل (Context and problem)
🔹یک تراکنش، واحدی از کار است که میتواند شامل چندین عملیات باشد.
🔹در یک تراکنش، رویداد (event) به تغییر وضعیت اشاره دارد که بر یک موجودیت تأثیر میگذارد.
🔹یک فرمان (command) تمام اطلاعات لازم برای انجام یک عمل یا ایجاد رویداد بعدی را در خود دارد.
⚖️تراکنشها باید به اصول ACID پایبند باشند:
1️⃣ اتمی بودن (Atomicity): همه عملیاتها موفق میشوند یا هیچ عملیاتی موفق نمیشود.
2️⃣ سازگاری (Consistency): دادهها از یک حالت معتبر به حالت معتبر دیگری منتقل میشوند.
3️⃣ انزوا (Isolation): تراکنشهای همزمان نتایجی مشابه اجرای ترتیبی ایجاد میکنند.
4️⃣ ماندگاری (Durability): تغییرات پس از ثبت، حتی در صورت بروز خطا، باقی میمانند.
در یک سرویس واحد، تراکنشها اصول ACID را رعایت میکنند زیرا در یک پایگاه داده واحد عمل میکنند. با این حال، دستیابی به انطباق ACID در چندین سرویس دشوارتر است.
🏗چالشها در معماریهای مایکروسرویس
(Challenges in microservices architectures)
معماریهای مایکروسرویس معمولاً یک پایگاه داده اختصاصی به هر سرویس اختصاص میدهند. این روش مزایای زیر را دارد:
• هر سرویس دادههای خود را کپسوله میکند.
• هر سرویس میتواند فناوری و ساختار پایگاه داده مناسب خود را استفاده کند.
• پایگاه دادههای هر سرویس به صورت مستقل مقیاسپذیر هستند.
• خطا در یک سرویس از سایر سرویسها جدا میشود.
⚠️با وجود این مزایا، این معماری سازگاری داده بین سرویسها را پیچیده میکند. تضمینهای سنتی پایگاه داده مانند ACID به طور مستقیم در چندین پایگاه داده مستقل قابل اجرا نیستند. به همین دلیل، معماریهایی که به ارتباط بین پردازشی (IPC) یا مدلهای تراکنش سنتی مانند two-phase commit protocol وابستهاند، اغلب برای الگوی Saga مناسبتر هستند.