🔄 الگوی (Saga Pattern) Saga (بخش ششم)
الگوی Saga Pattern برای مدیریت distributed transactions در چندین سرویس استفاده میشود. این الگو با شکستن یک تراکنش توزیعشده به دنبالهای از local transactions کار میکند.
هر local transaction فقط دادههای همان سرویس را تغییر میدهد و سپس یک event یا message منتشر میکند تا مرحله بعدی شروع شود 📣
اگر در هر مرحله خطایی رخ دهد، compensating transactions اجرا میشوند تا تغییرات مراحل قبلی را خنثی کنند و data consistency بین سرویسها حفظ شود 🔁
⚙️ ءSaga چگونه کار میکند؟
1️⃣ یک Saga زمانی شروع میشود که یک فرآیند تجاری نیاز به تغییر داده در چند سرویس داشته باشد
2️⃣ ءSaga coordinator تراکنش توزیعشده را به چند local transaction (یکی برای هر سرویس) تقسیم میکند
3️⃣ هر سرویس local transaction خودش را اجرا میکند و یک event مبنی بر موفقیت یا شکست منتشر میکند
4️⃣ ءCoordinator به این eventها گوش میدهد و مرحله بعدی را فعال میکند 👂
5️⃣ اگر همه مراحل با موفقیت انجام شوند، Saga پایان مییابد و تراکنش کامل تلقی میشود ✅
6️⃣ اگر هر مرحلهای شکست بخورد، compensating transactions بهترتیب معکوس اجرا میشوند تا تغییرات قبلی undo شوند ♻️
7️⃣ دو رویکرد اصلی برای پیادهسازی وجود دارد:
ءChoreography: سرویسها از طریق eventها با هم هماهنگ میشوند 🎭
ءOrchestration: یک coordinator مرکزی جریان کار را مدیریت میکند 🎼
🌟 مزایا (Benefits)
✔️ امکان اجرای distributed transactions در معماری microservices بدون نیاز به distributed locks یا two-phase commit
✔️ حفظ سازگاری دادهها با استفاده از compensating transactions بهجای rollbackهای سنگین
✔️ مناسب برای long-running business processes با تحمل خطای بالاتر 🛡
✔️ مقیاسپذیری بهتر، چون هر سرویس فقط مسئول local transaction خودش است 📈
⚠️ معایب (Drawbacks)
❌ پیچیدگی بالا در طراحی و پیادهسازی compensating transaction برای هر مرحله
❌ ایجاد eventual consistency که ممکن است باعث وضعیتهای موقتاً ناسازگار برای کاربر شود ⏳
❌ سختتر شدن debugging و monitoring چون تراکنشها در چند سرویس و در طول زمان پخش شدهاند
❌ سناریوهای پیچیدهی مدیریت خطا، مخصوصاً زمانی که خود compensating transaction هم شکست بخورد
🎯 موارد استفاده (Use cases)
📌 ءworkflowهای چندمرحلهای در سیستمهای enterprise که هر مرحله توسط یک سرویس جداگانه انجام میشود
📌 هر فرآیند تجاری که نیاز به تغییر هماهنگ دادهها در چند microservice دارد، بدون استفاده از distributed lock
✨ جمعبندی:
ءSaga Pattern یک راهحل کلیدی برای مدیریت تراکنشهای پیچیده در معماریهای توزیعشده است. اگرچه پیادهسازی آن ساده نیست، اما برای سیستمهای microservice-scale تقریباً اجتنابناپذیر است.