GH GambleHub

Sagas ва муомилоти тақсимшуда

Сага як амалиёти дарозмуддати тиҷоратист, ки ба пайдарпаии қадамҳои маҳаллӣ дар байни хизматрасониҳо/анборҳои гуногун тақсим шудааст. Ҳар як қадам амали ҷубронпулӣ дорад, ки таъсири қадамро дар шикасти қисман бозмедорад. Баръакси 2PC/3PC, сагҳо қуфлҳои глобалиро нигоҳ намедоранд ва барои microservices, бисёр минтақаҳо ва борҳои баланд мувофиқанд, ки мувофиқати ниҳоӣ қобили қабул аст.


1) Кай интихоб кардани сагҳо (ва вақте ки не)

Мувофиқат:
  • Равандҳои бизнеси дарозмуддат/бисёрқадамӣ (фармоиш → пардохт → захира → таҳвил).
  • Доменҳо ва анборҳои гуногун, ки дар он ҷо амалиёти умумӣ вуҷуд надорад.
  • Ба дастрасии баланд ва миқёс ниёз дорад.
Мувофиқ нест:
  • Атоми сахти ACID муҳим аст (масалан, интиқоли миқдори калон дар як феҳрист).
  • Ҷуброни дақиқ вуҷуд надорад (шумо наметавонед "захира" кунед ё натиҷаро бекор кунед).
  • Маҳдудиятҳои ҳуқуқӣ/меъёрӣ ҷудокунии қатъӣ ва "фаврӣ" -ро талаб мекунанд.

2) Моделҳои Sagas

1. Оркестри Saga - Ҳамоҳангсози марказӣ қадамҳо ва ҷубронро идора мекунад.

Тарафдор: ҷараёни возеҳ, назорати хатогӣ, телеметрияи соддакардашуда.
Омӯз: нуқтаи мутамарказ, хатари ҳамоҳангсози "фарбеҳ".

2. Хореография (Хореография): ягон марказ - қадамҳо бо ташаббуси чорабиниҳо оғоз карда мешаванд ("хидмати A оё X → хидмати В вокуниш нишон медиҳад").

Тарафдор: пайвасти заиф, миқёси оддӣ.
Омӯз: пайгирӣ/ислоҳи ҷараён, хатари "вайроншавии" қоидаҳо мушкилтар аст.

3. TCC (Кӯшиш кунед, тасдиқ кунед/бекор кунед) - Ҳар як қадам "Кӯшиш кунед", пас тасдиқ ё бекор кунед.

Тарафдор: наздиктар ба протоколи псевдо-ду фаза, захираҳои идорашаванда.
Омӯз: дар татбиқи интерфейсҳо гаронтар; Вақтсанҷи дорандагони "Кӯшиш кунед" -ро талаб мекунад.


3) Тарҳи қатрон ва ҷуброн

Инвариантҳо: ба таври возеҳ нишон медиҳанд, ки пеш аз/баъд аз қадам чӣ бояд рост бошад (масалан, "боқимонда ≥ 0").
Ҷуброн ≠ муомилоти баръакс: ин амали мантиқист, ки таъсири тиҷоратро бекор мекунад (баргардонидан, озод кардан, барқарор кардан).
Idempotence: ҳам қадам ва ҳам ҷуброн бояд бехатар такрор карда шаванд (бо 'operation _ id').
Вақтсанҷҳо: ҳар як қадам мӯҳлат дорад; таъхир ҷубронро ба вуҷуд меорад.
Таъсири барнагардонидан: онҳоро алоҳида сабт кунед (огоҳиҳо, почтаи электронӣ) ва ба "саъю кӯшиши беҳтарин" имкон диҳед.


4) Мувофиқат ва тартибот

Мувофиқати оқибат: корбарон ихтилофи вақтро дида метавонанд; UX - бо "интизор "/spinners/statuses.
Фармоиш аз рӯи калид - Гурӯҳбандии қадамҳои гузариш аз рӯи калиди бизнес (order_id) барои фармоиш додани рӯйдодҳо.
Deduplication - Сабти коркардро ('operation _ id' → status) бо TTL нигоҳ доред.


5) Нақлиёт ва эътимоднокӣ

Намунаи Outbox-Ҳодисаро ба ҷадвали баромади маҳаллӣ дар ҳамон як амалиёт менависад ва сипас асинхронӣ онро ба автобус нашр мекунад.
Дӯкони паёмдони/Idempotency: дар тарафи истеъмолкунанда - сабти паёмҳо аллакай коркард шудааст.
Маҳз як маротиба самаранок: "outbox + истеъмолкунандаи номатлуб" амалияи "як маротиба" медиҳад.
DLQ: барои паёмҳои "заҳролуд" бо мета-иттилооти бой ва redrive бехатар.


6) Хатогӣ, бозпас гирифтан, сиёсати бозгашт

Мо танҳо қадамҳои номатлубро такрор мекунем; амалиёти навиштан - бо 'Idempotency-Key'.
Бозгашти экспоненсиалӣ + ҷиттер; маҳдуд кардани кӯшишҳо ва мӯҳлати ҷамъбастии саёҳат.
Бо таназзули системавӣ - Қатъи гардиш ва таназзули зебо (масалан, қисми дуввуми афсонаро бекор кунед).
Низоъҳои корӣ ('409') - пас аз оштӣ ё ҷуброн кардан ва хотима ёфтан.


7) Оркестр: Масъулият ва сохтор

Вазифаҳо:
  • Пайгирии ҳолати саҷда: 'Интизорӣ → Иҷро кардан → Ҷуброн → Иҷро/Иҷро шуд/НОКОМ'.
  • Банақшагирии қадамҳо, мӯҳлатҳо, танаффусҳо, ақибнишинӣ.
  • Хатсайрҳои чорабинӣ ва оғози ҷуброн.
  • Идемпотенсияи амалиёти ҳамоҳангсоз (сабти фармон).
  • Мушоҳида: таносуби 'saga _ id' дар гузоришҳо/пайгирӣ/ченакҳо.
Захира:
  • Ҷадвалҳои 'saga', 'saga _ step', 'фармонҳо', 'outbox'.
  • Индексҳо дар 'saga _ id', 'business _ key', 'status', 'next _ run _ at'.

8) Хореография: қоидаҳо ва муҳофизат аз "кӯлулаи барфӣ"

Шартномаҳои чорабинӣ: схемаҳо ва версияҳо (Avro/Proto/JSON Schema).
Семантикаи тоза: "далели ҳодиса" vs "фармон".
Қатъи занҷир: хидмат, номувофиқатиро ошкор карда, як чорабинии 'Failed '/' Ҷуброн' -ро нашр мекунад.
Ҳушдорҳо ва ҳушдорҳо дар бораи "ҳалқаҳои беохир".


9) TCC: тафсилоти амалӣ

Кӯшиш кунед: захираи захираҳо бо TTL.
Тасдиқ: содир кардан, озод кардани қуфлҳои муваққатӣ.
Бекор: баргардонидани захира (бе таъсири тараф).
Ҷамъоварии партовҳо: бекоркунии худкори Кӯшиш кунед пас аз TTL (бекоркунии idempotent).
Тасдиқ/Бекор кардани idempotent: такрор бехатар аст.


10) Мисол (нақшаи калимаҳо) - "Фармоиш бо пардохт ва таҳвил"

1. Эҷод кардани фармоиш (маҳаллӣ) → outbox: 'Фармоиш'.
2. Хизматрасонии пардохт: 'Кӯшиш кунед' захира (TCC); агар § 'Пардохтҳои захирашуда', агар 'Payment' номуваффақ бошад.
3. Инвентаризатсия: захираи маҳсулот; аз § 'Инвентаризатсия'.
4. Хадамоти интиқол - Эҷоди ковокии таҳвил (бекор карда мешавад).
5. Агар ягон қадами 'Failed' → оркестр ҷубронро бо тартиби баръакс оғоз кунад: 'Бекор кардани интиқол' → 'Инвентаризатсия' → 'Пардохт'.

6. Агар ҳама хуб бошанд → 'Payment


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-ҳои мушоҳидашаванда ва амалиётӣ

Пайгирӣ: ягона 'saga _ id', эзоҳҳо 'қадам', 'кӯшиш', 'қарор' (иҷро/ҷуброн/гузаштан).

Нишондиҳандаҳо:
  • Муваффақият/хатогии sagas (%), давомнокии миёна, p95/p99.
  • Ҳиссаи афсонаҳои ҷуброншуда, сабабҳои асосии ҷуброн.
  • Queues/outbox қафо мемонад, дар қадамҳо қадам мезанад.
  • Гузоришҳо/аудитҳо: қарорҳои оркестрӣ, идентификаторҳои захираҳо, калидҳои корӣ.

13) Озмоиш ва бетартибӣ

Ворид кардани хатогиҳо ба ҳар як қадам: танаффус, '5xx', муноқишаҳои корӣ.
Ҳодисаҳои фармоишӣ, нусхабардорӣ, қатраҳо.
Думҳои дарозмуддати ниҳонӣ → санҷиши мӯҳлатҳо ва ҷубронҳо.
Сагҳои оммавӣ → санҷиши WFQ/DRR ва ҳадди аққал дар навбат, набудани "басташавии сари хат".
Redrave аз DLQ дар қадамҳо ва дар як саҷда.


14) Иҷораи бисёр, минтақаҳо, мувофиқат

Барчаспҳои 'иҷорагир _ id/plan/region' in чорабиниҳо ва анборҳои сага.
Истиқомат: маълумот/чорабиниҳо минтақаро тарк намекунанд; сагҳои байниминтақавӣ ҳамчун федератсияҳои сагҳои маҳаллӣ + чорабиниҳои маҷмӯӣ тарҳрезӣ шудаанд.
Афзалият: Сагҳои VIP вазни бештари квота доранд; ҷудокунии коргарон ба як иҷорагир.


15) Рӯйхати санҷиши пеш аз фурӯш

  • Ҳар як қадам ҷубронкунандаи возеҳ дорад ва ҳарду номутаносиб мебошанд.
  • Қолаби интихобшуда: оркестр/хореография/TSS; маҳдудиятҳои масъулият тавсиф карда мешаванд.
  • Outbox/Inbox татбиқ карда мешавад, такрорӣ аз ҷониби 'operation _ id'.
  • Сиёсати бозгашт: бозгашт бо ҷиттер, маҳдудиятҳо ва мӯҳлати умумии саёҳат.
  • Шартномаҳои ҳодиса санҷида мешаванд, тасдиқи нақша мавҷуд аст.
  • DLQ ва Release Secure танзим карда шудаанд.
  • Телеметрия: ченакҳо, пайгирӣ, таносуби 'saga _ id'.
  • Китобҳои амалиётӣ: бекор кардани дастӣ/force-тасдиқ, кушодани сагҳои "овезон".
  • Санҷишҳои бетартибӣ ва сарборӣ мегузаранд, буҷаи SLO/хатогӣ муайян карда шудааст.

16) Хатогиҳои маъмулӣ

Ягон ҷубронкунанда вуҷуд надорад ё он "нопок" аст (таъсири манфӣ дорад).
Ягон idempotence/dedup вуҷуд надорад - дугоникҳо ва "тағйири" давлатҳо.
"Saga in Saga" бидуни марзҳои возеҳ - давраҳо ва қуфлҳои мутақобила.
Ҳеҷ гуна мӯҳлатҳо ва ихроҷи манбаъҳои "абадӣ" вуҷуд надоранд.
Оркестр давлатро "дар хотира" бидуни мағозаи устувор нигоҳ медорад.
Хореография бидуни маркази телеметрия → нокомии "ноаён".
Opaque UX: Истифодабарандагон ҳолати фосилавиро намебинанд.


17) Дорухатҳои зуд

Классикони SAA: оркестр + outbox/паёмдони қуттӣ, пушти экспоненсиалӣ, DLQ, статусҳо дар UI.
Инвариантҳои қавӣ: TCC бо захираи TTL ва GC Бекор.
Ҳаҷми баланд/сарборӣ: хореографияи рӯйдодҳо + номутобиқатии қатъӣ ва ченакҳои асосӣ.
Бисёр минтақаҳо: сагҳои маҳаллӣ + агрегатҳои ниҳоӣ; аз қуфлҳои ҷаҳонӣ канорагирӣ кунед.


Хулоса

Сагҳо як роҳи ба даст овардани пайдарҳамии пешгӯишаванда дар системаҳои тақсимшуда бидуни қуфлҳои ҷаҳонӣ мебошанд. Ҷубронпулии возеҳ, аблаҳӣ, таҳвили боэътимод (қуттиҳо/паёмдонҳо), интизоми вақт ва бозсозӣ, инчунин телеметрия ва дафтарҳои бозӣ калиди таъмини устувории равандҳои мураккаби тиҷорат бо афзоиши сарборӣ, шумораи хидматҳо ва ҷуғрофия мебошанд.

Contact

Тамос гиред

Барои саволҳо ё дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Оғози интегратсия

Email — муҳим аст. Telegram ё WhatsApp — ихтиёрӣ.

Номи шумо ихтиёрӣ
Email ихтиёрӣ
Мавзӯъ ихтиёрӣ
Паём ихтиёрӣ
Telegram ихтиёрӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиёрӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.