GH GambleHub

Сагалар жана бөлүштүрүлгөн транзакциялар

Сага - ар кандай кызматтарда/кампаларда жергиликтүү кадамдардын ырааттуулугуна бөлүнгөн узак мөөнөттүү бизнес-транзакция. Ар бир кадам жарым-жартылай ийгиликсиздик менен кадамдын таасирин жокко чыгарат ордун толтуруучу иш-аракет бар. 2PC/3PC айырмаланып, сагалар глобалдык кулпу кармап жана eventual consistency жол микросервис, көп аймактар ​ ​ жана жогорку жүк үчүн ылайыктуу эмес.


1) Качан сагаларды тандоо (жана качан - жок)

Ылайыктуу:
  • Узак/көп баскычтуу бизнес-процесстер (заказ → төлөө → камдык → жеткирүү).
  • Жалпы транзакция жок ар кандай домендер жана кампалар.
  • Жогорку жеткиликтүүлүк жана горизонталдуу масштабдоо керек.
Туура эмес:
  • Катуу ACID-атомдук критикалык (мисалы, бир реестрдин ичинде чоң сумманы өткөрүп берүү).
  • Эч кандай так ордун толтуруу ("бир-камдоо" же жокко чыгаруу мүмкүн эмес).
  • Юридикалык/жөнгө салуучу чектөөлөр катуу изоляцияны жана "заматта" инвариантты талап кылат.

2) Сагдын моделдери

1. Оркестр (Saga Orchestrator): борбордук координатору кадам жана ордун башкарат.

Артыкчылыктары: ачык агым, каталарды көзөмөлдөө, жөнөкөйлөтүлгөн телеметрия.
Кемчиликтери: борборлоштуруу чекити, "семиз" координатордун коркунучу.

2. Хореография (Choreography): эч кандай борбор жок - кадамдар окуялар менен демилгеленет ("A кызматы жасалган X → B кызматы жооп берет").

Артыкчылыктары: начар байланыш, жөнөкөй масштабдоо.
Кемчиликтери: агымды көзөмөлдөө/дебаждоо кыйыныраак, эрежелердин "өсүү" коркунучу.

3. TCC (Try-Confirm/Cancel): ар бир кадам - "камдоо" (Try), андан кийин ырастоо (Confirm) же жокко чыгаруу (Cancel).

Артыкчылыктары: псевдо-эки фазалуу протоколго жакыныраак, башкарылуучу ресурстар.
Кемчиликтери: интерфейстерди ишке ашырууда кымбатыраак; ээлеринин таймауттарын талап кылат.


3) Долбоор кадам жана ордун толтуруу

Инварианттар: кадамга чейин/кийин (мисалы, "калдык ≥ 0") чыныгы болушу керек экенин так аныктаңыз.
Компенсация ≠ тескери транзакция: бул бизнес эффектин жокко чыгаруучу логикалык аракет (refund, release, restore).
Демпотенттик: кадам да, компенсатор да коопсуз кайталанышы керек ('operation _ id' боюнча).
Таймауттар: ар бир кадам deadline бар; кечигүү компенсацияны демилгелейт.
Кайтарылгыс эффекттер: аларды өзүнчө жазыңыз (билдирүүлөр, электрондук почта) жана "best effort" жол бериңиз.


4) Шайкештик жана тартип

Eventual consistency: колдонуучулар убактылуу айырмачылыктарды көрө аласыз; UX - "күтүү "/спиннерлер/статустар менен.
Ачкыч тартиби: коммутациялык кадамдарды бизнес ачкычы боюнча топтоңуз (окуяларды тартипке келтирүү үчүн order_id).
Дедупликация: TTL менен дарылоо журналын ('operation _ id' → статус) сактаңыз.


5) Транспорт жана ишенимдүүлүк

Outbox pattern: ошол эле бүтүмдүн ичинде жергиликтүү "outbox" таблицасына окуяны жазуу, андан кийин шинага асинхрондук жарыялоо.
Inbox/Idempotency store: керектөөчү тарапта - буга чейин иштелип чыккан билдирүүлөр журналы.
Exactly-once натыйжалуу: "outbox + idempotent керектөөчү" практикалык берет "так бир жолу".
DLQ: бай мета-маалымат жана коопсуз редрайв менен "уулуу" билдирүүлөр үчүн.


6) Ката саясаты, ретра, backoff

Биз жөн гана демократиялык кадамдарды кайталап; иш жазуу - менен 'Idempotency-Key'.
экспоненциалдуу backoff + Jitler; аракеттерин жана дастандын жалпы мөөнөтүн чектөө.
Системалуу деградацияда - Circuit Breaker жана graceful degradation (мисалы, дастандын экинчи бөлүгүн жокко чыгаруу).
Бизнес чыр-чатактар ('409') - макулдашуудан кийин кайталоо же ордун толтуруу жана аяктоо.


7) Оркестр: милдеттери жана түзүлүшү

Функциялары:
  • Саганын абалын көзөмөлдөө: 'PENDING → RUNNING → COMPENSATING → DONE/FAILED'.
  • Кадамдарды, мөөнөттөрдү, таймауттарды, ретраларды пландаштыруу.
  • Окуяларды роутинг жана компенсацияларды ишке киргизүү.
  • Координатордун операцияларынын демпотенттүүлүгү (командалар журналы).
  • Байкоо: 'saga _ id' логдордо/трекстерде/метриктерде корреляция.
Сактоо:
  • Таблицалар 'saga', 'saga _ step', 'commands', 'outbox'.
  • Индекстер 'saga _ id', 'business _ key', 'status', 'next _ run _ at' боюнча.

8) Хореография: эрежелер жана "кар комасынан" коргоо

Иш-чаралардын келишимдери: схемалар жана версиялоо (Euro/Proto/JSON схемасы).
Так семантика: "факт окуясы" vs "команда".
чынжыр токтотуу: кызмат, карама-каршы табылган, жарыялайт 'Failed '/' Compensate' окуя.
Сигнализация жана "чексиз илмектерге" алерталар.


9) TCC: практикалык бөлүктөрү

Try: TTL менен ресурстук камдык.
Confirm: бекитүү, убактылуу блокторду бошотуу.
Cancel: камдык (эч кандай терс таасирлери).
Garbage collection: TTL кийин Try автоматтык жокко чыгаруу (Cancel).
Idempotent Confirm/Cancel: кайталоо коопсуз.


10) Мисал (оозеки схема) - "Төлөм жана жеткирүү менен заказ"

1. CreateOrder (жергиликтүү) → outbox: 'OrderCreated'.
2. PaymentService: 'Try' резерви (TCC); ийгиликтүү болсо → 'PaymentReserved', баш тартса → 'PaymentFailed'.
3. InventoryService: продукт камдык; жок болсо → 'InventoryFailed'.
4. ShippingService: жеткирүү уячасын түзүү (жокко чыгарылган).
5. Эгерде кандайдыр бир кадам 'Failed' → оркестратор компенсацияны тескери тартипте баштайт: 'CancelShipping' → 'ReleaseInventory' → 'PaymentCancel'.
6. Эгер баары жайында болсо → 'PaymentConfirm' → 'OrderConfirmed'.


11) Оркестрдин псевдо-коду

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) Байкоо жана иш SLO

Trace: бирдиктүү 'saga _ id', аннотациялар 'step', 'attempt', 'decision' (run/compensate/skip).

Метрикасы:
  • Ийгилик/сагдын катасы (%), орточо узактыгы, p95/p99.
  • Компенсацияланган акчалардын үлүшү, компенсациянын себептеринин топ.
  • кезек/outbox лагдар, кадамдар боюнча retrais.
  • Логи/аудит: оркестрдин чечимдери, ресурстардын идентификаторлору, бизнес ачкычтары.

13) сыноо жана башаламандык

Ар бир кадамга каталарды киргизүү: таймауттар, '5xx', бизнес чыр-чатактар.
Out-of-order окуялар, дубликаттар, пропуск (drop).
Long Latentity куйруктары → мөөнөтү жана ордун текшерүү.
Массалык дастандар → текшерүү WFQ/DRR жана кезектери, жок "башчысы-of-line blocking".
DLQ тартып Редрайв кадам жана бүт дастан.


14) Көп тенанттуулук, региондор, шайкештик

Tags 'tenant _ id/plan/region' окуяларда жана сактагычтарда.
Residency: маалыматтар/окуялар аймакты калтырбайт; cross-аймактык сагалар жергиликтүү сагалар + жыйындылоочу окуялар Киргизия катары долбоорлоо.
Артыкчылыктуу: VIP-дастандар көбүрөөк квота салмагы бар; per tenant жылуулоо.


15) Азык-түлүктүн алдындагы чек-тизме

  • Ар бир кадам ачык компенсатор бар, экөө тең - демпотенттик.
  • Тандалган шаблон: оркестр/хореография/TSS; жоопкерчиликтин чектери сүрөттөлөт.
  • Outbox/Inbox ишке ашырылган, 'operation _ id' боюнча дедупликация.
  • Retray саясаты: Jitter менен backoff, аракет чектери жана жалпы мөөнөтү сагасы.
  • Иш-чаралардын келишимдери версияланган, схеманын валидациясы бар.
  • DLQ жана коопсуз кайра орнотулган.
  • Телеметрия: метрика, Trace, корреляция 'saga _ id'.
  • Playbooks иштетүү: кол cancel/force-confirm, тигүү "илинип" сага.
  • Башаламандык жана жүктөрдү сыноо өтөт, SLO/бюджет каталар аныкталган.

16) типтүү каталар

Компенсатор жок же ал "таза эмес" (терс таасирлери бар).
Демпотенттик/дедуп жок - кош жана "селкинчек" шарттар.
"Сагадагы сага" чек арасыз - циклдер жана өз ара бөгөттөөлөр.
Эч кандай мөөнөт → "түбөлүк" дастандар жана ресурстардын агып.
Оркестратор "эс-тутумда" абалын туруктуу сторсуз сактайт.
Телеметрия борбору жок хореография → "көзгө көрүнбөгөн" мүчүлүштүктөр.
тунук эмес UX: колдонуучулар аралык статустарды көрүшпөйт.


17) Тез Recipes

Classic SaaS: оркестрдин + outbox/inbox, экспоненциалдык backoff, DLQ, UI дастан статусу.
Ресурс боюнча күчтүү инварианттар: TTL камдык жана GC Cancel менен TCC.
Жогорку көлөм/жүк: окуялардын хореографиясы + ачкыч боюнча катуу боштук жана метрика.
Көп аймак: жергиликтүү сагалар + акыркы агрегаттар; глобалдык блокировкалардан качуу.


Корутунду

Сагалар - бул глобалдык бөгөттөрү жок бөлүштүрүлгөн системаларда алдын ала ырааттуулукту алуу жолу. Так компенсаторлор, ыктымалдуулук, ишенимдүү жеткирүү (outbox/inbox), таймауттардын жана ретрайлардын дисциплинасы, плюс телеметрия жана плейбуктар - татаал бизнес процесстер жүктүн, кызматтардын жана географиялардын көбөйүшү менен туруктуу жана окулуучу бойдон калуунун ачкычы.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.