Վերափոխում և eventium consistency
Վերափոխում և eventium consistency
1) Ինչու՞ eventium consistency
Երբ համակարգը բաշխվում է գոտիներով/տարածաշրջաններով, համաժամանակյա ձայնագրությունը ամենուր տալիս է բարձր լատենտ և ցածր հասանելիություն ցանցային ձախողումների ժամանակ։ Eventium consistency (EC) թույլ է տալիս կրկնությունների ժամանակավոր ռասինխրոնիզացիան հանուն
ձայնագրման ցածր ուշացում (տեղական ընդունելություն),
ցանցի բաժանման լավագույն հասանելիությունը,
հորիզոնական մասշտաբով։
Հիմնական խնդիրն այն է, որ վերահսկվող ոչ խիստ համաձայնությունը, օգտագործողը տեսնում է «բավականին թարմ» տվյալներ, տիրույթի ինվարիտներ, հակամարտությունները դեգրադացվում են և լուծվում են կանխատեսելի։
2) Մրցույթի մոդելները 'ինչ ենք խոստանում հաճախորդին
Strong: Կարդալը անմիջապես տեսնում է վերջին գրառումը։
Bounded stale/read-entt-older-than (RNOT) 'կարդալ ոչ թե նշանի (LSN/տարբերակը/ժամանակը)։
Causal: Ռուսական «պատճառահետևանքային» հարաբերություններ (A մինչև B)։
Read-Your-Writes: Հաճախորդը տեսնում է իր վերջին գրառումները։
Monotonic Reads: Յուրաքանչյուր հաջորդ ընթերցում չի «ետ»։
Session 'երաշխիքների մի շարք մեկ նստաշրջանի ընթացքում։
Eventium: նոր ձայնագրությունների բացակայության դեպքում բոլոր կրկնությունները համընկնում են։
Պրակտիկա 'Session + RNOT-ը քննադատական ճանապարհների վրա և Eventium-ը վիտրիններով/խցիկներով։
3) Կրկնօրինակումը 'մեխանիկա և anti-entropy
Սինխրոն (kvorum/RAFT), ձայնագրությունը համարվում է հաջողակ N հանգույցների հաստատումից հետո։ Նվազագույն RPO, p99-ից բարձր։
Ասինխրոն 'առաջնորդը տեղական է, ամսագիրը ավելի ուշ է բաժանում։ ցածր լատենտ, RPO> 0։
Ֆիզիկական (WAL/binlog) 'արագ, հոմոգեն։
Տրամաբանական/CDC 'փոփոխությունների հոսքը տողերի/իրադարձությունների մակարդակում, ճկուն միկրոօրգանիզացիան, ֆիլտրերը։
Anti-entropy: պարբերական ծալքեր և երիկամներ (Merkle-ծառեր, հեշի համեմատություն, ֆոնային re-nc)։
4) Տարբերակների և պատճառի պատվերների ցուցիչները
Մոնոտոնային տարբերակները ՝ increme/LSN/epoch; պարզապես, բայց չեն կոդավորում զուգահեռականությունը։
Lampions timestamp-ը տրամաբանական ժամացույցի մասնակի կարգ է։
Vector clock: ամրագրում է զուգահեռ ճյուղերը և թույլ է տալիս գտնել հակամարտական ապդեյտներ (concurrent)։
Hybrid/Windows Time/Clock-SI: տրամաբանությունը «նախկինում T» գլոբալ կարգի համար։
Առաջարկություն ՝ CRDT/կոնֆլիկտային ապդեյտների համար 'vector clock; «ծերության» համար - LSN/GTID։
5) Հակամարտություններ 'հայտնաբերություն և թույլտվություն
Տիպիկ իրավիճակներ 'երկու տարածաշրջաններից գրառում նույն օբյեկտի մեջ։
Ռազմավարություններ
1. Last-Write-International (LWW) ժամացույցի/տրամաբանական շտամով պարզ է, բայց կարող է «կորցնել» ապդեյտները։
2. Merge-ֆունկցիաները հիբրիդային տրամաբանության վրա
հաշվարկային դաշտերը (G-Counter/PN-Counter),
հավաքածուները միավորվում են «add-enss/remove-enss» -ի հետ,
գումարը/հավասարակշռությունը միայն գործարքային ամսագրերի միջոցով է, ոչ թե պարզ LWW-ի միջոցով։
3. CRDT (փոխարկելի տեսակներ) 'G-Counter, OR-International, LWW-Register, RGA ցուցակների համար։
4. Վիրահատական փոխակերպումները (հազվադեպ BD-ի համար, ավելի հաճախ խմբագիրների համար)։
5. Manault resolution: «inbox» -ի հակամարտությունը, օգտագործողը ընտրում է ճիշտ տարբերակը։
Կանոնն այն է, որ տիրույթի ինվարանտները թելադրում են ռազմավարությունը։ Փողի/մնացորդների համար խուսափեք LWW-ից։ օգտագործեք գործարքներ/փոխհատուցման իրադարձություններ։
6) Ձայնագրությունների և գաղափարախոսության երաշխիքները
Idempotent բանալիները թիմերում (payme, withdrance, create) պաշտպանված են։
«Մուտքի» վրա (inbox) և «ելքը» (www.box) impotenty/սերիական համարով։
Exactly-once-ը անհասանելի է առանց ուժեղ նախադրյալների։ կիրառեք at-least-once + idempotent։
Medibox/Inbox-pattern: BD-ում ձայնագրումը և ատոմային իրադարձությունների հրապարակումը (տեղական գործարքը), ստացողը մշակում է idempotency-key-key-ով։
7) Ընթերցումներ «X» (RNOT)
Տեխնիկան
LSN/GTID-գեյթ. Հաճախորդը փոխանցում է նվազագույն տարբերակը (ձայնագրման պատասխանից), ռոտեր/2019 ուղղում է LSN no X-ի կրկնօրինակին, հակառակ դեպքում առաջնորդի վրա։
Time-bound: «2 վայրկյան» - պարզ SLA առանց տարբերակների։
Session pinning: N վայրկյանից հետո կարդում ենք միայն առաջնորդը (Read-Your-Writes)։
8) Փոփոխությունների հոսքերը և փամփուշտները
CDC-ն (Kafka/Pulsar) ռուսական սպառողներ (քեշներ, ինդեքսներ, վիտրիններ)։
Քեշի հաշմանդամություն 'տեղանուններ' www.alidate: w.ns _: ww.id +; idempotent վերամշակում։
Rebuild/Backfill: Recinchrone-ում վերափոխեք նախագծերը իրադարձությունների ամսագրից։
9) Սագին և փոխհատուցումը (միջին վիրուսային գործարքները)
EC-աշխարհում երկարատև վիրահատությունները բաժանվում են փոխհատուցող գործողությունների հետ
Orcestration: Ռուսական առաջացնում է քայլեր և նրանց փոխհատուցում։
Խորեոգրաֆիա 'քայլերը արձագանքում են իրադարձություններին և հրապարակում են հետևյալը։
Invariants (օրինակ): «Հավասարակշռություն 240» - ստուգում 112 սահմաններում + փոխհատուցումը շեղման ժամանակ։
10) Multi-տարածաշրջանը և ցանցային տարանջատումը
Altal-write, async-replicate: Տեղական տարածքում ձայնագրությունը + փոխանցումը մյուսներին (EC)։
Geo-fencing: տվյալները «սոսնձված» են տարածաշրջանի հետ (ցածր լատենտ, ավելի քիչ հակամարտություններ)։
Cvorum BD (Raft) CP տվյալների համար; kashi/vitrins - AP/EC։
Split-brain պլանը 'կապի կորստի ժամանակ տարածաշրջանները շարունակում են աշխատել մետրոպոլիտենի սահմանների (write fencing, քվոտաներ), ապա reconcile-ում։
11) Դիտարկումը և SLO-ն
Մետրիկները
Replica lag: ժամանակ/LSN հեռավորություն/www.set (p50/p95/p99)։
Staleness: ավելի մեծ պատասխանների մասը (օրինակ ՝> 2s կամ LSN Convergence Time: կրկնօրինակման ժամանակը գագաթից հետո։ Reconcile backlog: Հետ գնացող կուսակցության ծավալը/ժամանակը։ RPO/RTO տվյալների կատեգորիաներով (CP/AP)։ Լագ> 2019, հակամարտությունների աճը, «երկար» պատուհանները։ 12) Տվյալների սխեմայի նախագծումը EC-ի տակ Append-only ամսագրերը կրիտիկական ինվարանտների համար (հավասարակշռություններ, հաշվարկներ)։ Դաշտերը, որոնք ունեն բաղադրիչ բնություն (հաշվիչներ, շատ), մեջբերում են CRDT-ի թեկնածուները։ API: PUT-ից if-match/etag, PATCH precond.ru-ից։ 13) Պահեստավորման և ընթերցանության արտոնագրեր Read model/CQRS: Գրառումը «աղբյուրի» մեջ, պրոյեկցիաներից կարդալը (կարող է հետ կանգնել)։ Sticky/Bounded-stale դրոշները խնդրանքով (վերնագիր 'x-read-consistency ")։ 14) Ներդրման թուղթ (0-45 օր) 0-10 օր Դասակարգել տվյալները ՝ CP քննադատական (գումար, պատվերներ) vs ES/stale-OK (օրինակ, որոնողական ինդեքսներ)։ Որոշեք SLO steila (օրինակ, «ոչ ծերություն 2s»), ռուսական ճամբարներ։ Ներառել օբյեկտների տարբերակումը և idempotency-keys-ը API-ում։ 11-25 օր Ավելացնել RNOT (LSN գեյթ) և session pinning-ը կրիտիկական ճանապարհների վրա։ Իրականացնել առնվազն մեկ merge ռազմավարություն (LWW/CRDT/հիբրիդային) և հակամարտությունների ամսագիր։ 26-45 օր Անցկացնել game-day 'ցանցի բաժանումը, հակամարտությունների աճը, վերականգնումը։ Տեսողություններ դաշբորդների վրա 'lag, staleness, www.lict rate, convergence։ 15) Anti-patterna Idempotency-ի բացակայությունը բացատրում է վիրահատությունների կրկնապատկումը։ «Ուժեղ» մոդելը բոլոր ուղղություններով ավելցուկային p99 պոչերը և ձախողումների ժամանակ փխրունությունը։ Ոչ RNOT/Session երաշխիքներ ունեն UX-ը «գաղթում», օգտագործողները «չեն տեսնում» իրենց փոփոխությունները։ Reconcile/anti-entropy գործիքի բացակայությունը, «դարի» տվյալները տարբերվում են։ 16) Հասունության մետրերը Replica lag p95 հազար ռուբլիներ (օրինակ ՝ 500 ռուբլիներ տարածաշրջանի ներսում, 242 s միջռեգիոններ)։ Staleness SLO-ն կատարվում է «խիստ» երթուղիների հարցումների 99 տոկոսը։ Conflict resolution success ≥ 99. 9 տոկոսը, միջին ժամանակը 351 ռուբլիներ է։ 100 տոկոսը «դրամական» վիրահատությունները ծածկված են idempotency-բեկորներով և www.box/inbox-ով։ 17) Բաղադրատոմսեր (չիպետներ) Եթե տարբերակը փոխվել է, «412 Precondom Failed» հաճախորդը լուծում է հակամարտությունը։ CRDT G-Counter (գաղափարը) Յուրաքանչյուր տարածք պահպանում է իր հաշվարկը։ արդյունքը բոլոր բաղադրիչների գումարն է։ կրկնօրինակումը վիրահատություն է։ 18) Եզրակացություն Eventium consistency-ը որակի փոխզիջում չէ, այլ գիտակցված պայմանագիր, ինչ-որ տեղ մենք թարմ ենք վճարում արագության և հասանելիության համար, բայց պաշտպանում ենք կրիտիկական ինվարանտները հիբրիդային ռազմավարություններով և գործիքներով։ Մուտքագրեք տարբերակները, idempotency, RNOT/Session երաշխիքները, CDC և anti-entropy, չափեք lag/staleness/wwww.lic.ru, և ձեր բաշխված համակարգը կլինի արագ, կայուն և կանխատեսելի համընկնում է նույնիսկ ձախողումների և պինդ բեռների տակ։Sylict rate-ը հակամարտությունների հաճախությունն է և հաջողակ merge-ը։
Ալերտա
Ակնհայտ տարբերակը/վեկտորը յուրաքանչյուր գրառման մեջ («version», «vc»)։
Իրադարձությունների բաղադրիչները (www.owflake/ULID) կարգի և պապի համար։
Stale-OK երթուղիները (գրացուցակ/ժապավեն) vs Strict (դրամապանակ/լիմիտներ)։
Ներդրել CDC-ը և www.box/inbox-ը, քեշի հաշմանդամության երթուղիները։
Ավտոմատիզացնել anti-entropy (ծակոտներ/երիկամներ) և սթեյլի հաշվետվությունները։
Կույր LWW-ը կրիտիկական ինվարանտների համար (փողի/կետերի կորուստ)։
Թաքնված քեշի և աղբյուրի (ոչ CDC/հաշմանդամություն)։
Convergence time-ը գագաթներից հետո րոպե, ժամացույց չէ։
If-Match/ETag (HTTP)
PUT /profile/42
If-Match: "v17"
Body: { "email": "new@example.com" }Հարցումը «LSN ծերություն չէ» (կեղծ)
x-min-lsn: 16/B373F8D8Ռոուտերը ընտրում է «replay _ lsn nox-min-lsn» -ի կրկնօրինակը, հակառակ դեպքում 'առաջնորդը։