Կոդավորման մոդելներ
Համաձայնությունը նկարագրում է, թե ինչ արժեքներ և ինչ չափով են ընթերցողները տեսնում մրցակցային փոփոխությունների ժամանակ։ Մոդելի ճիշտ ընտրությունը հավասարակշռությունն է ինվարանտների խստության, լատենտության, հասանելի և արժեքի միջև (PACELC)։ Ներքևում գտնվում է մոդելների և դրանց օգտագործման գործնական ուղեցույց։
1) «Խիստ» մոդելները
Linearizable (գծայնացում, Strong)
Վարքագիծը կարծես բոլոր վիրահատությունները կատարվում էին ակնթարթորեն որոշակի կարգով, որը հարգում էր իրական ժամանակը։
Պլյուսներ ՝ պարզ մտավոր մոդել, անվտանգ փողի և եզակի համար։
Մինուսները ՝ քվորումներ/առաջնորդը կանխատեսում է p95/p99 աճը, հատկապես միջտարածաշրջանային։
Յուզքեյսներ 'հավասարակշռություններ, կիսագնդեր, յուրահատուկ անուններ/բանալիներ։
Sequential consistency
Բոլոր հոսքերը տեսնում են նույն վիրահատությունը, բայց պարտադիր չէ, որ ռեալ-խաղային կարգուկանոնը։ Մի քիչ ավելի թույլ է, քան linearizable-ը, հազվադեպ է ցուցադրվում անմիջապես ապրանքներում։
Serializable (գործարքային սերիալիզացիա)
Գործարքների որոշ հետևողական կարգեր (ոչ թե առանձին վիրահատություններ)։
Պլյուսներ 'բարդ ինվարանտների ճկունությունը հարցումների/սեղանների մակարդակում։
Մինուսները ՝ ավելի թանկ (արգելափակումը/տարբերակումը/հակամարտությունների վալիդացիան)։
Յուզքեյսները 'բարդ ֆինոպացիաներ, կոնսիստենտային վերահաշվարկներ, կիսագնդեր։
Snapshot Isolation (SI)
Յուրաքանչյուր գործարք կարդում է ժամանակի անփոփոխ նկարը։ ձայնագրությունները բախվում են «նույն տողերի» վրա, բայց հնարավոր է write skew։
Պլյուսներ ՝ արագ ընթերցումներ առանց արգելափակումների, կայուն հաշվետվությունների։
Մինուսներ ՝ ոչ սերիզոեմո, թակարդը write skew (օրինակ 'հերթապահ բժիշկներ)։
Յուզքեյսները 'վերլուծություն, հաշվետվություններ, CRUD մեծամասնությունը առանց կոշտ ինվարանտների։
2) Per-session և պատճառական երաշխիքներ
Read-Your-Writes (RYW)
Հաճախորդը իր ձայնագրությունից հետո միշտ տեսնում է այն հետագա ընթերցումներում։
Պլյուսներ ՝ լավ UX (ձևը հաստատվում է)։
Մինուսներ 'տեղական երաշխիք, ոչ գլոբալ։
Monotonic Reads / Writes
Ընթերցանությունները «չեն արձագանքում» ետ. հաճախորդի ձայնագրությունները օգտագործվում են նույն ձևով, ինչ գնում էին։
Causal Consistency (պատճառահետևանքային)
Եթե վիրահատությունը կախված է մյուսից (A 35B), բոլորը տեսնում են A-ը B-ի առջև։
Պլյուսներ 'ինտուիտիվ ֆիդների, մեկնաբանությունների համար։
Մինուսներ 'ավելի բարդ է միկրոօրգանիզացումը և պատճառի բարձրացումը (վեկտորային ժամացույց)։
Յուզքեյսներ 'հաղորդակցություններ, միասին խմբագրում, իրադարձությունների ժապավեններ։
3) Թույլ և ստացիոնար մոդելներ
Bounded Staleness
Ընթերցումները կարող են ոչ ավելի, քան Prot կամ N տարբերակները։
Պլյուսներ ՝ կանխատեսելի UX, լավ փոխզիջում միջտարածաշրջանային։
Մինուսներ 'չի պաշտպանում ձայնագրման հակամարտություններից։
Eventual Consistency
Ժամանակի ընթացքում բոլոր օրինակները համընկնում են. կարգուկանոնը և ուշացումը երաշխավորված չեն։
Պլյուսներ ՝ նվազագույն լատենտ/արժեք, բարձր հասանելիություն (AP)։
Մինուսներ 'անհրաժեշտ է ակնհայտ merge (CRDT/տիրույթի կանոնները)։
Յուզքեյսները 'քեշներ, ֆիդներ, մետրիկներ, հավեր, նեն critical գրացուցակներ։
4) Տիպիկ անոմալիաներ, և ի՞ նչ է դրանք նշանակում
Disty Read-ը 'չամուսնացած տվյալների կարդալը։
Non-repeatable Read: Գործարքի ներսում նույն ընթերցումը տարբեր արժեքներ է տալիս։
Phantium: Երկրորդ խնդրանքով հայտնվում է/անհետանում է նախածննդյան տողը։
Write Skew (SI): Երկու գործարքներ կարդում են հատվող ինվարանտը և գրում տարբեր տողեր, խախտելով պայմանը «պետք է լինի 1»։
Lost Corate-ը 'ձայնագրությունը «փակում է» մրցակցային փոփոխությունները։
5) Քվորումները և կարդալու/գրելու մակարդակը/
Շատ կոմպոզիցիաներ թույլ են տալիս տալ «R »/« W» մակարդակները (կարդալու/գրելու կրկնօրինակների քանակը)։
Քվորումը (R + W> N) տալիս է «խաչմերուկ» և վերջին գրելու կարդալու ուժեղ երաշխիքներ։
W = 1, R = 1-ը ցածր ուշացում է, բայց հնարավոր են հին տվյալները։
Թյունինգը 'կրիտիկական պաշտպանություն' բարձր 'W' (կամ առաջնորդը), մնացած 'ցածր' R 'արագության համար։
Read-rep.ru/Hinted handoff-ը օգնում է հասնել ֆոնի համաձայն։
6) Ժամացույցը և կարգը. Ինչպես ենք մենք «հասկանում» պատճառները
Lampional clocks 'իրադարձությունների մասնակի կարգը։
Vector clocks: Նրանք արձանագրում են պատճառները, թույլ են տալիս մանրամասն հակամարտություններ։
Hybrid/International Time-մոտեցումները սահմանափակում են ժամացույցը կլաստերում գործարքները և bound-staleness-ը։
Տարբերակումը '"version/ts + actor' merge; CRDT-ում փակ կիսագնդեր են (բաղադրիչություն/idempotenty)։
7) CRDT և կամերային merge
CRDT (փոխարկելի/կրկնվող տվյալների տեսակներ) երաշխավորում է առանց համակարգման 'G-Counter, OR-Line, LWW-Register, Map, տեքստային OT/WOOT տարբերակներ։
Երբ օգտակար է 'հավանումներ, բազմաթիվ թեգեր, զամբյուղներ, փաստաթղթեր։
Սահմանափակումները հետևյալն են ՝ ստեղծել ճիշտ սեմանտիկա «միաձուլման» որոշակի հիբրիդային էության համար։
8) Կապ CAP/PACELC հետ
Խիստ մոդելները (Linearizable/Serializable) multi-տարածաշրջանում ww.CP-ն են լատենտության աճի հետ (PACELC 'ընտրում ենք C և վճարում L)։
Թույլ/ստացիոնար մոդելները wwww.AP և/կամ ցածր L, բայց անհրաժեշտ է merge/հակամարտություն-ռեզոլվ։
Հիբրիդ 'CP միջուկը ինվարանտների համար + AP պրոյեկցիաներ/ընթերցումներ։
9) Մոդելի ընտրությունը 'չեկ թերթ
1. Invariants: Ի՞ նչ չի կարելի խախտել։ (եզակի, հավասարակշռություն, սահմաններ)։
2. Հավատարմություն 'որտե՞ ղ են կատարվում ձայնագրություններ/ընթերցումներ։ (տեղական/գլոբալ)։
3. SLO լատենտ ՝ p95/p99 քննադատական ճանապարհների համար։
4. Համակարգման գինը 'պատրաստ եք վճարել միջտարածաշրջանային քվորումներով։
5. Կոնֆլիկտներ. Կա դետերմինացված merge, թե՞ կարիք։
6. UX սպասումները ՝ RYW/monotonic/causal հաճախորդի համար կարևոր են։
7. Դիտարկելով 'ի՞ նչ եք չափում լագը/կոնֆլիկտությունը/հնացած աստիճանը։
8. Ֆոլբեքի 'ի՞ նչ է տեղի ունենում ցանցի բաժանման ժամանակ (P)։ read-only/տեղական ձայնագրությունը/հերթը։
10) Արագ բաղադրատոմսեր
Express/հավասարակշռություն: Linearizable/Serializable, առաջնորդ + kvorum, կարճ թայմաուտներ; RYW-ի ընթերցումները։
Պրոֆիլի/ֆիդ ՝ Causal/Bounded staleness + kash; CRDT հավանումների/հաշվիչների համար; RYW հեղինակի համար։
Որոնում/վերլուծություն ՝ SI/Read Committed, ասինխրոն պրոյեկտներ, eventae ինդեքսների համար։
Գլոբալ SaaS: Geo-partitioning; «Տնային գրառումներ» - CP, հաշվետվություններ/2019 և - AP։
Համատեղ խմբագրում 'պատճառահետևանքային/eventa.ru + CRDT/OT; «պատմության» պահպանումը։
11) Դիտողություններ
Lag metriks: «replection _ lag», «staleness _ age _ 24» (p50/p95/p99)։
Հակամարտությունը հակամարտությունների մասն է, լուծման միջին ժամանակը։
Քվորումները 'հաջողությունը' R/W 'kvorum, միջտարածաշրջանային ճանապարհների թայմաուտները։
Հաճախորդների երաշխիքները ՝ RYW/monotonic - treis-2019։
12) Տիպիկ սխալներ
Պահանջել Strong-ը «ամենուր» առանց բիզնեսի հիմքի բացատրում է լատենտության և արժեքի պայթյունը։
Dance-write-ը տարբեր տարածաշրջաններում առանց սագի/CRDT-ի ֆանտոմայի և ինվարանտների կորստի։
Անտեսել RYW/monotonicy UX-ում նոր ուղարկված տվյալները։
Մի հետևեք քեշի/պրոյեկտների հնացած հնազանդությանը։
Անհավասարակշիռ merge-ը կանխատեսում է անսպասելի կորուստներ/արժեքների դուբլ։
13) Ճարտարապետության մինի-ստանդարտը
Write-2019 (CP) 'առաջնորդ, քվորումային գրառումներ, SLO և թայմաուտներ, ամսագրեր։
Read-plane (AP) 'նյութականացված ներկայացումներ, TTL-kashi, read-rep.ru։
Հաճախորդը ՝ sticky-session/նստաշրջանի երաշխիքներ (RYW/monotonic), ռուսական տարբերակները։
Կոնֆլիկտային շարժիչ ՝ CRDT/կարգապահական կանոնները, ձեռքի շարժիչի հերթը։
Տե՛ ս ՝ ճամբարներ, հակամարտություններ, հնացած ընթերցումներ։
Եզրակացություն
Մրցույթի մոդելը ինժեներական պայմանագիր է տվյալների, ուշացման և հասանելի միջև։ Սկսեք ինվարանտներից և SLO-ից, ընտրեք խիստ այնտեղ, որտեղ անհրաժեշտ է, և ավելի թույլ այնտեղ, որտեղ դուք կարող եք առանց մոռանալու հաճախորդների երաշխիքների, քվորումի, ժամացույցի և դիտարկման մասին։ Մոդելների գրագետ համադրությունը տալիս է մասշտաբը, կանխատեսելիությունը և կայունությունը 'առանց զոհաբերելու բիզնես ճշմարտությունը և օգտագործողի վստահությունը։