Сагалар жана бөлүштүрүлгөн транзакциялар
Сага - ар кандай кызматтарда/кампаларда жергиликтүү кадамдардын ырааттуулугуна бөлүнгөн узак мөөнөттүү бизнес-транзакция. Ар бир кадам жарым-жартылай ийгиликсиздик менен кадамдын таасирин жокко чыгарат ордун толтуруучу иш-аракет бар. 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), таймауттардын жана ретрайлардын дисциплинасы, плюс телеметрия жана плейбуктар - татаал бизнес процесстер жүктүн, кызматтардын жана географиялардын көбөйүшү менен туруктуу жана окулуучу бойдон калуунун ачкычы.