Սագին և բաշխված գործարքները
Սագան երկարատև բիզնես գործարք է, որը բաժանված է տեղական քայլերի հաջորդականությանը տարբեր ծառայություններում/պահեստներում։ Յուրաքանչյուր քայլ ունի փոխհատուցող ազդեցություն, որը նվազեցնում է հաճախորդի ազդեցությունը մասնակի ձախողման ժամանակ։ Ի տարբերություն 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), թայմաուտների և գետերի կարգապահությունը, գումարած հեռաչափությունը և թիթեռները բանալին են, որ բարդ բիզնես գործընթացները մնան կայուն և ընթերցող, երբ ավելանում են բեռը, ծառայությունների քանակը և աշխարհագրությունը։