GH GambleHub

Sagalar va taqsimlangan tranzaksiyalar

Saga - turli servislar/omborlarda lokal qadamlar ketma-ketligiga bo’lingan uzoq muddatli biznes-tranzaksiya. Har bir qadam kompensatsion ta’sirga ega bo’lib, qisman muvaffaqiyatsizlikka uchraganda qadam ta’sirini qaytaradi. 2PC/3PC farqli o’laroq, dastalar global blokirovkalarni ushlab turmaydi va mikroservislar, ko’p mintaqalar va yuqori yuklar uchun mos keladi, bu erda eventual consistency mumkin.


1) Dostonlarni qachon tanlash (va qachon tanlamaslik)

Mos keladi:
  • Uzoq/ko’p bosqichli biznes-jarayonlar (buyurtma → to’lov → zaxira → yetkazib berish).
  • Umumiy tranzaksiya boʻlmagan turli domenlar va omborlar.
  • Yuqori qulaylik va gorizontal masshtabga ega bo’lish kerak.
Mos kelmaydi:
  • Qattiq ACID-atomarlik juda muhim (masalan, bitta reyestr doirasida katta miqdordagi mablag’larni o’tkazish).
  • Aniq kompensatsiya yoʻq («bir marta zaxiralash» yoki effektni bekor qilish mumkin emas).
  • Yuridik/tartibga soluvchi cheklovlar qatʼiy izolyatsiyani va «lahzali» invariantni talab qiladi.

2) Saga modellari

1. Orkestr (Saga Orchestrator): markaziy koordinator qadam va kompensatsiyalarni boshqaradi.

Afzalliklari: aniq oqim, xatolarni nazorat qilish, soddalashtirilgan telemetriya.
Minuslar: markazlashtirish nuqtasi, «qalin» koordinator xavfi.

2. Xoreografiya (Choreography): markaz yo’q - qadamlar voqealar tashabbusi bilan amalga oshiriladi («A yasadi X → B xizmati javob beradi»).

Afzalliklari: zaif bog’liqlik, oddiy kattalashtirish.
Kamchiliklar: oqimni kuzatish/buzish qiyinroq, qoidalarning «o’sishi» xavfi.

3. TCC (Try-Confirm/Cancel): har bir qadam - «zaxiralash» (Try), keyin tasdiqlash (Confirm) yoki bekor qilish (Cancel).

Ijobiy tomonlari: psevdo-ikki fazali protokolga yaqinroq, boshqariladigan resurslar.
Minuslar: interfeyslarni amalga oshirishda qimmatroq; «Try» egalarining taymautlarini talab qiladi.


3) Qadam va kompensatsiyani loyihalash

Invariantlar: qadamdan oldin/keyin (masalan, «qoldiq ≥ 0») haqiqat nima boʻlishi kerakligini aniq ifodalang.
Kompensatsiya ≠ teskari tranzaksiya: bu biznes effektini bekor qiluvchi mantiqiy harakatdir (refund, release, restore).
Idempotentlik: qadam ham, kompensator ham xavfsiz takrorlanishi kerak (’operation _ id’bo’yicha).
Taymautlar: har bir qadam deadline; kechiktirish kompensatsiyalar tashabbusi bilan chiqadi.
Qaytarib boʻlmaydigan effektlar: ularni alohida yozib oling (xabarnomalar, e-mail) va «best effort» ga ruxsat bering.


4) Kelishuv va tartib

Eventual consistency: foydalanuvchilar vaqtinchalik tafovutlarni koʻrishlari mumkin; UX - «kutish «/spinnerlar/maqomlar bilan.
Kalit tartibi: hodisalarni tartibga solish uchun kommutatsiya qadamlarini biznes kaliti (order_id) boʻyicha guruhlang.
Deduplikatsiya: TTL bilan ishlash daftarini (’operation _ id’→ maqomi) saqlang.


5) Transport va ishonchlilik

Outbox pattern: hodisani xuddi shu tranzaksiya ichida «outbox» lokal jadvaliga yozib, soʻngra shinaga asinxron tarzda joylashtirish.
Inbox/Idempotency store: isteʼmolchi tomonida - allaqachon qayta ishlangan xabarlar jurnali.
Exactly-once samarali: «outbox + idempotent consumer» amaliy «aynan bir marta» beradi.
DLQ: boy meta-axborot va xavfsiz redrayv bilan «zaharli» xabarlar uchun.


6) Xato siyosati, retra, backoff

Biz faqat idempotent qadamlarini takrorlaymiz; yozuv operatsiyalari -’Idempotency-Key’.
Eksponensial backoff + jitter; dastaning urinishlari va jami muddatini cheklash.
Tizimli degradatsiyada - Circuit Breaker va graceful degradation (masalan, dostonning ikkinchi darajali fich qismini bekor qilish).
Biznes nizolar (’409’) - kelishilgandan keyin takrorlash yoki kompensatsiya qilish va tugatish.


7) Orkestrator: vazifalari va tuzilmasi

Funksiyalari:
  • Saga holatini kuzatish:’PENDING → RUNNING → COMPENSATING → DONE/FAILED’.
  • Qadamlar, muddatlar, taymautlar, retrajlarni rejalashtirish.
  • Hodisalarni routing qilish va kompensatsiyalarni ishga tushirish.
  • Muvofiqlashtiruvchi operatsiyalarining idempotentligi (buyruqlar jurnali).
  • Kuzatilishi:’saga _ id’ning loglar/treyslar/metriklarda korrelyatsiyasi.
Saqlash:
  • ’saga’,’saga _ step’,’commands’,’outbox’jadvallari.
  • Indekslar bo’yicha’saga _ id’,’business _ key’,’status’,’next _ run _ at’.

8) Xoreografiya: qoidalar va «qor komasi» dan himoya qilish

Voqealar kontraktlari: sxemalar va versiyalash (Euro/Proto/JSON Schema).
Aniq semantika: «fakt hodisasi» va «buyruq».
Zanjirni toʻxtatish: xizmat nomuvofiqlikni aniqlab, «Failed »/« Compensate» hodisasini eʼlon qiladi.
Signalizatsiya va «cheksiz halqa» alertlari.


9) TCC: amaliy tafsilotlar

Try: TTL bilan resurs zaxirasi.
Confirm: oʻrnatish, vaqtinchalik blokirovkalarni boʻshatish.
Cancel: zaxira qaytarilishi (nojo’ya ta’sirlarsiz).
Garbage collection: TTL (idempotent Cancel) dan keyin Try avtomatik qaytarib olish.
Idempotent Confirm/Cancel: takrorlash xavfsiz.


10) Misol (so’z sxemasi) - «To’lov va yetkazib berish bilan buyurtma»

1. CreateOrder (lokal) → outbox:’OrderCreated’.
2. PaymentService:’Try’zaxirasi (TCC); muvaffaqiyatli boʻlganda →’PaymentReserved’, rad etilganda →’PaymentFailed’.
3. InventoryService: tovar zaxirasi; →’InventoryFailed’mavjud bo’lmaganda.
4. ShippingService: yetkazib berish slotini yaratish (bekor qilinmoqda).
5. Agar’Failed’→ orkestrator kompensatsiyani teskari tartibda boshlasa:’CancelShipping’→’ReleaseInventory’→’PaymentCancel’.
6. Agar hamma narsa yaxshi boʻlsa →’PaymentConfirm’→’OrderConfirmed’.


11) Orkestratorning psevdokodi

pseudo startSaga(saga_id, order_id):
steps = [ReservePayment, ReserveInventory, BookShipment, ConfirmPayment]
for step in steps:
res = execWithRetry(step, order_id)
if!res.ok:
compensateInReverse(steps_done(order_id))
return FAIL return OK

execWithRetry(step, key):
for attempt in 1..MAX:
try:
return step.run(key)    # идемпотентно catch RetryableError:
sleep(backoff(attempt))
catch NonRetryableError:
return FAIL return FAIL

compensateInReverse(done_steps):
for step in reverse(done_steps):
step.compensate()       # идемпотентно

12) Kuzatuv va operatsion SLO

Treysing: yagona’saga _ id’, izohlar’step’,’attempt’,’decision’(run/compensate/skip).

Metriklar:
  • Muvaffaqiyat/saga xatosi (%), oʻrtacha davomiyligi, p95/p99.
  • Kompensatsiya qilingan saqlar ulushi, kompensatsiya sabablari.
  • Navbatlar/outbox laglar, qadamlar boʻyicha retralar.
  • Logi/audit: orkestrator qarorlari, resurs identifikatorlari, biznes kalitlari.

13) Test va tartibsizlik

Xatolarni har bir qadamga in’ektsiya qilish: taymautlar,’5xx’, biznes mojarolari.
Out-of-order hodisalar, dublikatlar, oʻtishlar (drop).
Uzoq latentlik dumlari → muddatlar va kompensatsiyalarni tekshirish.
Ommaviy dostonlar → navbatlarda WFQ/DRR va caps tekshiruvi, «head-of-line blocking» ning yo’qligi.
DLQdan qadam va butun doston bo’yicha redrave.


14) Ko’p tenantlik, hududlar,

’tenant _ id/plan/region’ tugmalari saqdagi voqealar va omborlarda.
Residency: maʼlumot/hodisalar mintaqani tark etmaydi; kross-mintaqaviy dostonlarni mahalliy saglar federatsiyasi + yig’ma voqealar sifatida loyihalashtiring.
Ustuvorlik: VIP-dostonlar katta kvota vazniga ega; per tenant vorkerlarini izolyatsiya qilish.


15) Sotishdan oldingi chek-varaq

  • Har bir qadam aniq kompensatorga ega, ikkalasi ham idempotentdir.
  • Tanlangan shablon: orkestr/xoreografiya/TSS; javobgarlik chegaralari bayon etilgan.
  • Outbox/Inbox joriy etildi,’operation _ id’deduplikatsiyasi.
  • Retraj siyosati: jitter bilan backoff, urinishlar limiti va umumiy muddat dostoni.
  • Voqealar shartnomalari versiyalangan, sxema validatsiyasi mavjud.
  • DLQ va xavfsiz tahrirlash sozlangan.
  • Telemetriya: metrika, treysing, korrelyatsiya’saga _ id’.
  • Operatsion playbooks: qo’lda cancel/force-confirm, «osilgan» saglarni tikish.
  • Xaos va yuk sinovlari o’tadi, SLO/xatolar byudjeti aniqlanadi.

16) Tipik xatolar

Kompensator yo’q yoki u «nopok» (nojo’ya ta’sirlarga ega).
Idempotentlik/dedup - dubli va holatlarning «belanchagi» mavjud emas.
«Dostondagi saga» aniq chegaralarsiz - tsikllar va o’zaro blokirovkalar.
Hech qanday muddat yo’q → «abadiy» dastalar va manbalar oqishi.
Orkestrator «xotirada» turg’unlik holatini saqlaydi.
Telemetriya markazisiz xoreografiya → «Ko’rinmas» nosozliklar.
Shaffof boʻlmagan UX: foydalanuvchilar oraliq holatlarni koʻrmaydilar.


17) Tezkor retseptlar

SaaS klassikasi: orkestrlash + outbox/inbox, eksponensial backoff, DLQ, saga maqomlari UI.
Resurs uchun kuchli invariantlar: TTL zaxirali TCC va GC Cancel.
Yuqori hajm/yuk: voqealar xoreografiyasi + qat’iy idempotentlik va kalit metrikasi.
Ko’p mintaqa: lokal sagalar + yakuniy agregatlar; global blokirovkalardan qochish.


Xulosa

Sagʻanalar - global blokirovkalarsiz taqsimlangan tizimlarda oldindan aytib boʻladigan muvofiqlikka erishish usuli. Aniq kompensatorlar, idempotentlik, ishonchli yetkazib berish (outbox/inbox), taymautlar va retraylar intizomi, shuningdek, telemetriya va pleybuklar - murakkab biznes jarayonlari yuklama, xizmatlar soni va geografiya ortib borayotganda barqaror va o’quvchan bo’lib qolishining kalitidir.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.