GH GambleHub

Սագին և բաշխված գործարքները

Սագան երկարատև բիզնես գործարք է, որը բաժանված է տեղական քայլերի հաջորդականությանը տարբեր ծառայություններում/պահեստներում։ Յուրաքանչյուր քայլ ունի փոխհատուցող ազդեցություն, որը նվազեցնում է հաճախորդի ազդեցությունը մասնակի ձախողման ժամանակ։ Ի տարբերություն 2PC/3PC-ից, սագները չեն պահում գլոբալ արգելափակումները և հարմար են միկրովեռների, մուլտֆիլմերի և բարձր բեռների համար, որտեղ թույլատրելի է eventium consistency։


1) Երբ ընտրել սագին (իսկ երբ 'ոչ)

Հարմար է

Երկարատև/բազմաշերտ բիզնես գործընթացները (հրաման)։

Տարբեր օրինագծեր և պայմանագրեր, որտեղ ընդհանուր գործարք չկա։

Անհրաժեշտ է բարձր հասանելիություն և հորիզոնական մեծացում։

Չի համապատասխանում

Ամուր ACID-ատոմայնությունը կրիտիկական է (օրինակ, մեծ գումարների փոխանցումը մեկ ծավալի սահմաններում)։

Չկա հստակ փոխհատուցում (դուք չեք կարող «վերացնել» կամ վերացնել էֆեկտը)։

Իրավաբանական/կարգավորող սահմանափակումները պահանջում են խիստ մեկուսացում և «ակնթարթային» ինվարիում։


2) Սագի մոդելները

1. Օրկեստրացիան (Saga Orchestram) 'կենտրոնական պաշտպանությունը կառավարում է քայլերը և փոխհատուցումները։

Պլյուսներ ՝ ակնհայտ հոսք, սխալների վերահսկում, պարզեցված հեռաչափություն։

Մինուսները 'կենտրոնացման կետը, «հաստ» ռիսկը։

2. Խորեոգրաֆիա (Choreography). Ոչ մի կենտրոն, քայլերը նախաձեռնվում են իրադարձություններով («A ծառայությունը X-ն արել է B-ի ռուսական ծառայությունը արձագանքում է»)։

Պլյուսներ 'թույլ կապը, պարզ մասշտաբը։

Մինուսները 'ավելի դժվար է հետևել/բանավեճել հոսքը, կանոնների աճի ռիսկը։

3. TCC (Try-Mastirm/Cancel): Յուրաքանչյուր քայլ «պահեստավորում» է (Try), ապա հաստատումը (Medirm) կամ (Cancel)։

Պլյուսներ 'ավելի մոտ կեղծ-երկուական արձանագրությանը, որը ղեկավարվում է ռեսուրսներով։

Մինուսներ 'ավելի թանկ ինտերֆեյսների իրականացման մեջ։ պահանջում է Try-ի սեփականատերերի թայմաուտներ։


3) Ձեռնարկության նախագծումը և փոխհատուցումը

Invariants: Հստակ ձևացրեք, որ պետք է լինի «մինչև/հետո» (օրինակ ՝ «մնացած թիվ 0»)։

Փոխհատուցումը հակադարձ գործարք է. Սա տրամաբանական գործողություն է, որը վերացնում է բիզնեսի ազդեցությունը (refund, rele.ru, restore)։

Idempotention: Քայլը և փոխհատուցողը պետք է ապահով կրկնվեն («operation _ id»)։

Թայմաուտներ 'յուրաքանչյուր քայլ ունի deadom; հետաձգումը նախաձեռնում է փոխհատուցումը։

Անդառնալի էֆեկտներ 'դրանք առանձին (ծանուցումներ, e-mail) և թույլ տվեք «best effect»։


4) Ներդաշնակություն և կարգուկանոն

Eventium consistency: Օգտագործողները կարող են տեսնել ժամանակավոր տարբերությունները։ UX-ը «սպասելով «/spinners/կարգավիճակներով։

Կարգուկանոնը բանալիով 'նավիգացիոն քայլերը խմբավորվում են բիզնես բանալիով (order _ id), որպեսզի որոշեն իրադարձությունները։

Դեդուպլիկացիա 'պահպանեք վերամշակման ամսագիրը («operation _ id») TTL-ից։


5) տրանսպորտը և հյուրանոցը

Dibox pattern-ը 'նույն գործարքի ներսում «www.box» տեղական աղյուսակում իրադարձության ձայնագրումը, իսկ հետո' անվադողերի ասինխրոն հրապարակումը։

Inbox/Idempotency store: սպառողի կողմում արդեն մշակված հաղորդագրությունների ամսագիր է։

Exactly-once-ը արդյունավետ է. «www.box + idempotent consumer» գործնական «ուղիղ մեկ անգամ»։

DLQ: «թունավոր» հաղորդագրությունների համար հարուստ մետա տեղեկատվության և անվտանգ ռեդրեյվրի հետ։


6) Սխալների, ռեթրերի, backoff

Կրկնում ենք միայն քայլերը. գրառումները '«Idempotency-Key» -ի հետ։

Էքսպոնենցիալ backoff + jitter; սահմանափակումը և սագայի ընդհանուր դեդլայնը։

Դեգրադացիայի դեպքում 'Circuit Breaker-ը և graceful degradation-ը (օրինակ, վերացնել սագայի երկրորդական ֆիչի մասը)։

Բիզնես կոնֆլիկտները («409») - խոհարար համաձայնվելուց կամ փոխհատուցելուց հետո։


7) Նվագարկիչ 'պարտականություններ և կառուցվածք

Գործառույթները

Սագայի վիճակը հետևելը '«PENDING www.RUNING ww.COMPLENTING no DONE/FAILED»։

Քայլերի պլանավորումը, դաջվածքները, թայմաուտները, ռետրանները։

Իրադարձությունների ռոտինգը և փոխհատուցման արձակումը։

Վիրահատությունների idempotention-ը (թիմերի ամսագիր)։

Դիտարկումը 'հարաբերակցությունը' saga _ id 'լոգարաններում/treiss/metrikes։

Պահեստավորում

«Saga», «saga _ step», «commands», «www.box»։

Ինդեքսները «saga _ id», «business _ key», «status», «next _ run _ at»։


8) Խորեոգրաֆիա 'կանոններ և պաշտպանություն «ձյան կոմայից»

Իրադարձությունների պայմանագրերը 'սխեմաներ և տարբերակումը (Avro/Coro/JSON Schema)։

Պարզ սեմանտիկան '"վս" թիմի փաստի իրադարձությունը "։

Շղթայի մնացորդները 'ծառայությունը, հայտնաբերելով անհամապատասխանություն, հրապարակում է «Failed »/« Comporate» իրադարձությունը։

Ազդանշանը և ալերտները «անվերջ հանգույցների» վրա։


9) TCC: Գործնական մանրամասներ

Try: ռեսուրսի պահուստ TTL-ից։

Systirm: Ամրագրում, ազատում ռուսական արգելափակումները։

Cancel: պահուստային (առանց կողմնակի էֆեկտների)։

Garbage collect: TTL-ից հետո (idempotent Cancel)։

Idempotent Diirm/Cancel-ը անվտանգ է։


10) Օրինակ (բանավոր սխեմա) - «Վճարման և առաքման պատվեր»

1. Creant Order (տեղական) wwww.box: «Orts Created»։

2. Payts Pro 'Try' (TCC); www.Pay.ru Reserved-ի հաջողության դեպքում, երբ հրաժարվեց «Payts Failed» երգը։

3. Entertainment Tramp: Ապրանքի պահուստ; «Contentium Failed» -ի բացակայության դեպքում։

4. Shipping.ru 'առաքման արցունքների ստեղծումը (չեղյալ հայտարարված)։

5. Եթե ցանկացած քայլ 'Failed' International նվագախումբը սկսում է փոխհատուցումը հակառակ կարգով '«CancelShipping 'Releport Engentory' no 'Payts Cancel»։

6. Եթե բոլոր «Payline Diirm» -ը «Orance Eurmed» -ը։


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 "," step "," attempt "," decision "(run/comporate/skip)։

Մետրիկները

Սագի հաջողությունը/սխալը (%), միջին տևողությունը, p95/p99։

Փոխհատուցված սագերի մասնաբաժինը, փոխհատուցման բարձր պատճառները։

Հերթեր/www.box ճամբարներ, քայլերի հետքեր։

Լոգա/աուդիտ 'նվագախմբի լուծումներ, ռեսուրսների ցուցանիշներ, բիզնես բանալիներ։


13) Փորձարկում և քաոս

Սխալների միգրացիան յուրաքանչյուր քայլում 'թայմաուտներ, «5xx», բիզնես հակամարտություններ։

Out-of-order իրադարձությունները, կրկնօրինակները, բացթողումները (drop)։

Լատենտության երկար պոչերը ցույց են տալիս դեդլինների և փոխհատուցումների ստուգումը։

Զանգվածային սագերը կանխատեսում են WFQ/MSR և caps-ի ստուգումը հերթերում, «head-of-intlocking» բացակայությունը։

Ռեդրեյվը DLQ-ից քայլերով և ամբողջ սագայով։


14) Multi Tenanty, տարածաշրջաններ, համապատասխանում են

Թեգերը 'tenrone _ id/plan/region "իրադարձություններում և սագաների պահեստներում։

Residency: տվյալները/իրադարձությունները չեն լքում տարածաշրջանը։ Քրոս-տարածաշրջանային սագերը նախագծեք որպես տեղական սագերի + համախմբող իրադարձություններ։

Գերակայություն 'VIP-sagi-ն ավելի քվոտային քաշ ունի։ workers per tenae մեկուսացում։


15) Չեկ թուղթ մինչև վաճառելը

  • Յուրաքանչյուր ոք ունի հստակ փոխհատուցում, երկուսն էլ 'հակամարմիններ։
  • Ընտրվել է ձևաչափը 'նվագախումբ/խորեոգրաֆիա/TSS; նկարագրում են պատասխանատվության սահմանները։
  • Disbox/Inbox-ը ներդրված է, deduplication 'operation _ id'։
  • Retraev: backoff-ը ջիթթերի հետ, փորձերի սահմանները և սագայի ընդհանուր դեդլայնը։
  • Իրադարձությունների պայմանագրերը տարբերակված են, կա սխեմայի վալիդացիա։
  • DLQ և անվտանգ հազվագյուտ։
  • Telemetria: metrics, tresing, հարաբերակցություն «saga _ id»։
  • Վիրահատական playbooks: ձեռքի cancel/force-medirm, «կախված» սագը։
  • Քաոսի և բեռի թեստերը անցնում են, SLO/սխալների բյուջեն որոշվում է։

16) Տիպիկ սխալներ

Ոչ մի փոխհատուցող կամ նա «անմաքուր» (ունի կողմնակի ազդեցություն)։

Գոյություն չունի idempotention/dedup - դուբլի և «ճոճանակներ»։

«Սագայում» առանց ակնհայտ սահմանների 'ցիկլերը և փոխադարձ արգելափակումները։

Ոչ մի dedlins «հավիտենական» սագա և ռեսուրսների արտահոսք չկա։

Նվագարկիչը պահպանում է «հիշողության» վիճակը առանց կայուն սթորի։

Առանց հեռուստատեսության կենտրոնի խորեոգրաֆիան կոչվում է «անտեսանելի» ձախողումներ։

Անթափանց UX։ Օգտագործողները չեն տեսնում միջանկյալ կարգավիճակներ։


17) Արագ բաղադրատոմսեր

SaaS-ի դասական 'նվագախումբը + www.box/inbox, էքսպոնենցիալ backoff, DLQ, սագայի արձաններ UI-ում։

Ուժեղ ինվարանտներ ռեսուրսի վրա 'TCC TTL պահեստից և GC Cancel-ից։

Բարձր ծավալ/105 'իրադարձությունների խորեոգրաֆիա + խիստ իկեմպոտենտություն և բանալիներ։

Multi-տարածաշրջանը 'տեղական սագերը + վերջնական ագրեգատները; խուսափել գլոբալ արգելափակումներից։


Եզրակացություն

Սագին հնարավորություն է տալիս կանխատեսելի համաձայնություն ստանալ բաշխված համակարգերում առանց գլոբալ արգելափակումների։ Պարզ փոխհատուցիչները, գաղափարախոսությունը, հուսալի առաքումը (www.box/inbox), թայմաուտների և գետերի կարգապահությունը, գումարած հեռաչափությունը և թիթեռները բանալին են, որ բարդ բիզնես գործընթացները մնան կայուն և ընթերցող, երբ ավելանում են բեռը, ծառայությունների քանակը և աշխարհագրությունը։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։