TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #140 89
📌الگوی 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 مناسب‌تر هستند.
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →