Saglar we paýlanan amallar
Saga dürli hyzmatlarda/ammarlarda lokal ädimleriň yzygiderliligine bölünen uzak möhletli iş amalydyr. Her ädimiň bölekleýin şowsuzlyk ýüze çykan mahalynda ädimiň täsirini gaýdýan öwezini dolýan täsiri bardyr. 2PC/3PC tapawutlylykda, saglar global gulplamalary saklamaýar we mikroservisler, köp sebitler we ýokary ýükler üçin amatly, bu ýerde eventual consistency kabul edilýär.
1) Haçan saga saýlamaly (we haçan saýlamaly däl)
Laýyk:- Uzak/köp basgançakly iş amallary (sargyt → töleg → ätiýaçlyk → eltip bermek).
- Umumy geleşik bolmadyk dürli domenler we ammar.
- Ýokary elýeterlilik we gorizontal masştab gerek.
- Gaty ACID-atomarallygy kritikdir (mysal üçin, bir sanawyň içinde köp mukdarda pul geçirmek).
- Aç-açan öwezini dolmak ýok ("bir gezek bron etmek" ýa-da effekti ýatyrmak mümkin däl).
- Hukuk/kadalaşdyryjy çäklendirmeler berk izolýasiýa we "derrew" üýtgemegi talap edýär.
2) Saga modelleri
1. Orkestr (Saga Orchestrator): merkezi koordinator ädimleri we öwezini dolmagy dolandyrýar.
Artykmaçlyklary: aç-açan akym, ýalňyşlyklara gözegçilik, ýönekeýleşdirilen telemetriýa.
Minuslar: merkezleşdiriş nokady, "semiz" koordinatoryň töwekgelçiligi.
2. Horeografiýa (Choreography): merkezi ýok - ädimler wakalar bilen başlanýar ("A hyzmaty etdi X → B hyzmaty reaksiýa bildirýär").
Artykmaçlyklary: gowşak baglanyşyk, ýönekeý masştab.
Minuslar: akymy yzarlamak/çözmek has kyn, düzgünleriň "ösmek" töwekgelçiligi.
3. TCC (Try-Confirm/Cancel): her ädim - "ätiýaçlyk" (Try), soň tassyklamak (Confirm) ýa-da ýatyrmak (Cancel).
Plýuslar: psevdo-iki fazaly teswirnama has ýakyn, dolandyrylýan çeşmeler.
Minuslar: interfeýsleri amala aşyrmakda has gymmat; "Try" eýeleriniň wagtyny talap edýär.
3) Ädimiň dizaýny we öwezini dolmak
Invariantlar: ädimden öň/soň hakyky bolmaly zady aýdyň düzüň (mysal üçin, "galyndy ≥ 0").
Öwezini dolmak ≠ ters amal: bu iş täsirini ýatyrýan logiki hereket (refund, release, restore).
Idempotentlik: ädim hem, kompensator hem howpsuz gaýtalanmalydyr ('operation _ id' boýunça).
Wagtlar: her ädimde deadline bar; gijikdirmek öwezini dolmaga başlaýar.
Yzyna gaýtarylmaýan täsirler: Olary aýratyn belläň (habarnamalar, e-mail) we "best effort" -a ýol beriň.
4) Ylalaşyklylyk we tertip
Eventual consistency: ulanyjylar wagt tapawudyny görüp bilerler; UX - "garaşmak "/spinner/status.
Açar boýunça tertip: kommutasiýa ädimlerini işewürlik açary boýunça toparlanyň (wakalary tertipleşdirmek üçin order_id).
Duplikasiýa: TTL bilen bejeriş journalurnalyny ('operation _ id' → status) saklaň.
5) Ulag we ygtybarlylyk
Outbox pattern: wakany şol bir amalyň içinde "outbox" ýerli tablisasyna ýazmak, soň bolsa tekerde asinxron çap etmek.
Inbox/Idempotency store: sarp edijiniň tarapynda - eýýäm işlenilen habarlaryň žurnaly.
Exactly-once täsirli: "outbox + idempotent consumer" amaly "takmynan bir gezek" berýär.
DLQ: baý meta-maglumatly we howpsuz redraywli "zäherli" habarlar üçin.
6) Ýalňyşlyk syýasaty, retra, backoff
Diňe demokratik ädimleri gaýtalaýarys; ýazgy amallary - 'Idempotency-Key'.
Eksponensial backoff + jitter; saga synanyşyklarynyň we jemi möhletiniň çäklendirilmegi.
Ulgamlaýyn pese gaçanda - Circuit Breaker we graceful degradation (mysal üçin, saga ikinji bölegi ýatyrylýar).
Iş gapma-garşylyklary ('409') - ylalaşylandan soň gaýtalamak ýa-da öwezini dolmak we tamamlamak.
7) Orkestrator: borçlary we gurluşy
Funksiýalar:- Saga ýagdaýyny yzarlamak: 'PENDING → RUNNING → COMPENSATING → DONE/FAILED'.
- Ädimleri, möhletleri, wagtlary, retralary meýilleşdirmek.
- Wakalary marşrutlaşdyrmak we öwezini dolmagy başlamak.
- Koordinatoryň amallarynyň idempotentligi (buýruklaryň žurnaly).
- Syn edilişi: 'saga _ id' baglanyşygy loglarda/trekslerde/metriklerde.
- Tablisalar 'saga', 'saga _ step', 'commands', 'outbox'.
- Indeksler 'saga _ id', 'business _ key', 'status', 'next _ run _ at' boýunça.
8) Horeografiýa: düzgünler we "gar topundan" goramak
Wakalaryň şertnamalary: shemalar we wersiýalaşdyrmak (Euro/Proto/JSON Shema).
Aýdyň semantika: "faktiki waka" vs "buýruk".
Zynjyry duruzmak: Hyzmat gabat gelmeýän zady tapyp, 'Failed '/' Compensate' wakasyny çap edýär.
"Tükeniksiz aýlawlara" duýduryş we alertler.
9) TCC: amaly jikme-jiklikler
Try: TTL bilen resurs ätiýaçlygy.
Confirm: Wagtlaýyn blokirlemeleri düzetmek, boşatmak.
Cancel: ätiýaçlyk (zyýanly täsirleri bolmazdan).
Garbage collection: TTL-den soň Try-ni awtomatiki yzyna almak.
Idempotent Confirm/Cancel: gaýtalamak howpsuz.
10) Mysal (söz shemasy) - "Töleg we eltip bermek bilen sargyt"
1. CreateOrder (lokal) → outbox: 'OrderCreated'.
2. PaymentService: ätiýaçlyk 'Try' (TCC); Üstünlikli bolsa → 'PaymentReserved', şowsuz bolsa → 'PaymentFailed'.
3. InventoryService: haryt ätiýaçlygy; → 'InventoryFailed'.
4. ShippingService: eltip bermek slotyny döretmek (ýatyrylýar).
5. Islendik ädim 'Failed' → orkestrator öwezini dolmagy tersine başlasa: 'CancelShipping' → 'ReleaseInventory' → 'PaymentCancel'.
6. Eger hemme zat gowy bolsa → 'PaymentConfirm' → 'OrderConfirmed'.
11) Orkestratoryň ýalan resminamasy
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) Synlamak we operasiýa SLO
Traýsing: ýekeje 'saga _ id', düşündirişler 'step', 'attempt', 'decision' (run/compensate/skip).
Metrikler:- Üstünlik/saga ýalňyşlygy (%), ortaça dowamlylygy, p95/p99.
- Öwezini dolmagyň esasy sebäpleriniň öwezini dolmagyň paýy.
- Nobatlar/outbox lages, ädimler boýunça retralar.
- Giriş/audit: orkestratoryň çözgütleri, çeşmeleriň kesgitleýjileri, işewürlik açarlary.
13) Synag we bulam-bujarlyk
Her ädimde ýalňyşlyklary sanjym etmek: wagt, '5xx', iş gapma-garşylyklary.
Out-of-order wakalary, dublikatlar, geçişler (drop).
Uzak gizlinlik guýruklary → möhletleri we öwezini dolmalary barlamak.
Köpçülikleýin saglar → WFQ/DRR we caps-yň nobatlarda barlanmagy, "kellesi-çyzykly blokirlemegiň" ýoklugy.
DLQ-den ädimlerde we tutuş sagda Redrave.
14) Köp tenantlyk, sebitler, laýyklyk
Tags 'tenant _ id/plan/region' wakalarda we saga ammarlarynda.
Residency: Maglumatlar/wakalar sebitden çykmaýar; kross-sebit saglaryny ýerli saga federasiýalary + jemleýji wakalar hökmünde dizaýn ediň.
Ileri tutulýan ugur: VIP-saga has uly kwota agramy bar; per tenant workerleriniň izolýasiýasy.
15) Azyk önüminden öň çek-sanawy
- Her ädimiň anyk kompensatory bar, ikisi-de idempotentdir.
- Şablon saýlandy: orkestr/horeografiýa/TSS; jogapkärçiligiň çäkleri beýan edilýär.
- Outbox/Inbox 'operation _ id' -den göçürildi.
- Retraý syýasaty: jitter bilen backoff, synanyşyk çäkleri we saga üçin umumy möhlet.
- Wakalaryň şertnamalary wersiýa edildi, shemanyň tassyklamasy bar.
- DLQ we ygtybarly redaktirleme sazlandy.
- Telemetriýa: metrikler, treýsing, 'saga _ id' baglanyşygy.
- Operasiýa playbooks: el bilen cancel/force-confirm, "asylan" saga.
- Bulam-bujarlyk we ýük synaglary geçýär, SLO/ýalňyşlyk býudjeti kesgitlenildi.
16) Adaty ýalňyşlyklar
Kompensator ýok ýa-da "haram" (zyýanly täsirleri bar).
Idempotentlik/dedup - goşa we ýagdaýlaryň "swingleri" ýok.
"Sagadaky saga" - aýlawlar we özara blokirlemeler.
Möhletler ýok → "baky" saglar we çeşmeler syzýar.
Orkestrator durnuksyz "ýadynda" saklaýar.
Telemetriýa merkezi bolmazdan koreografiýa → "görünmeýän" şowsuzlyklar.
Aç-açan UX: Ulanyjylar aralyk statuslary görmeýärler.
17) Çalt reseptler
SaaS klassikleri: orkestr + outbox/inbox, eksponensial backoff, DLQ, saga statuslary UI.
Resurs üçin güýçli üýtgemeler: ätiýaçlyk TTL we GC Cancel bilen TCC.
Ýokary göwrüm/ýük: wakalaryň horeografiýasy + berk idempotentlik we açar boýunça metrika.
Köp sebit: ýerli saglar + jemleýji agregatlar; global blokirlemelerden gaça duruň.
Netije
Saga, global blokirlemezden paýlanan ulgamlarda öňünden aýdyp boljak sazlaşygy gazanmagyň usulydyr. Aç-açan kompensatorlar, idempotentlik, ygtybarly eltip bermek (outbox/inbox), wagtlaryň we retraýlaryň tertibi, üstesine-de telemetriýa we pleýbuklar - ýüküň, hyzmatlaryň we geografiýalaryň sanynyň köpelmegi bilen çylşyrymly işewürlik prosesleriniň durnukly we okalýan bolup galmagynyň açarydyr.