Strong Consistency: Երբ անհրաժեշտ է
Strong Consistency-ը (գծայնացումը) մոդել է, որտեղ բոլոր վիրահատությունները նման են, կարծես անմիջապես և հաջորդաբար կատարվում են մեկ համաշխարհային կարգով, որը համաձայն է իրական ժամանակի հետ։ Օգտագործողը կարդում է վերջին ապացուցված կարևորությունը, իսկ երկու զուգահեռ հաճախորդները չեն «թալանել» միմյանց տրամաբանորեն։
Խիստ համաձայնությունը տալիս է պարզ մտավոր մոդել և պաշտպանում է կոշտ ինվարանտները, բայց պահանջում է համակարգել (կվորումներ/առաջնորդ), որը բարձրացնում է ցանցային բաժանումների ուշացումը և զգայունությունը։
1) Երբ Strong-ը պարտական է
Ֆինանսներ և հաշվարկներ
Հավասարակշռությունները և ապամոնտաժումները. «Երկակի ծախսը» անընդունելի է։
Թարգմանություններ և փոխկապակցումներ. Նույն գումարը չի կարող երկու անգամ կատարվել։
Aleksard և limits
Ապրանքի/տեղերի մնացորդները հյուրանոցում/տոմսեր. Դուք չեք կարող բացասական արժեքներ թողնել։
Գործողության սահմանափակումները ժամանակի միավորում (վարկային լիմիտներ, API վարկեր)։
Եզակիությունը և ամբողջականությունը
Եզակի տրամաբանություններ/ազդանշաններ/դեդուպլիզացիայի կանոններ։
Invariants տիրույթի մակարդակում. <<գրասենյակում պետք է հերթապահի թիվ 1 բժիշկ>>, "հերթում չի կարող լինել> N ակտիվ խնդիրներ>։
Աուդիտ և անփոփոխ ամսագրեր
Ճշմարտության իրավաբանական աղբյուրը ծառայող իրադարձությունները քննադատական են։
Եթե ինվարիայի խախտումը անընդունելի բիզնես ռիսկ է կրում (փողի կորուստ, սանկցիաներ, վստահության կորուստ), ընտրեք Strong Consistency-ը։
2) Ի՞ նչ է «խիստ»
Linearizability (վիրահատական մակարդակը), կարդալը տեսնում է վերջին հաջողակ ձայնագրությունը։ ժամանակները հարգված են։
Serializable (գործարքային մակարդակը): արդյունքը համարժեք է գործարքների գործողություններին հաջորդաբար (միգուցե strong, բայց երբեմն իրականացվել է առանց կոշտ real-time)։
Կարևոր տարբերությունը 'Serializable-ը պաշտպանում է գործարքների մակարդակի անոմալիայից (phantom/write-skew), իսկ Linearizable-ը' մեկ վիրահատության ակնթարթության և կարգի մասին։ Հաճախ անհրաժեշտ են երկու հատկություններ (օրինակ, փողը BD + իրադարձությունների ամսագրում)։
3) Խստության գինը ՝ PACELC և CAP
PACELC 'ցանցի բաժանման ժամանակ (P) պետք է ընտրեք C (ստրկություն) կամ A (հասանելիություն)։ Strong www.CP 'ավելի լավ է հրաժարվել կամ արգելափակել, քան խախտել ինվարանտը։ Երբ բաժանումը չկա (EL), մենք վճարում ենք L-ը 'կոորդինացիան/քվորումը աճում է p95/p99։
Պրակտիկա 'strong-ի համար «invariants», շուրջը' արագ պրոյեկցիաներ/eventronics, որպեսզի UX-ը չվնասի։
4) Ինչպե՞ ս են հասնում Strong Consistency-ը
Առաջնորդություն և քվորումա
Միակ առաջնորդը վերցնում է գրառումները։ ընթերցանությունը առաջնորդի կամ կվորումի կրկնօրինակն է։
Cvorum 'W '-ը ձայնագրելու և «R» -ի համար կարդալու համար «R + W> N» -ը մեծացնում է «վերջին» կարդալու հավանականությունը։
Համաձայնեցման ալգորիթմներ
Raft/Paxos: Վերարտադրության լոգ, մեծամասնության հաստատում, տերմին/ինդեքսներ։
Սինխրոն կրկնօրինակումը 'ձայնագրությունը հաստատվում է միայն քվորումի վրա անձնավորությունից հետո։
Ժամացույց և կարգ
Windows Time/Hybrid Logical Clocks (HLC): Resinchron ժամացույցի սահմանափակումը անվտանգ գլոբալ շարադրության համար։
Fence-tocens/տարբերակումը 'պաշտպանություն «առավոտյան» առաջնորդներից և համախմբված բրեյնից։
Գործարքների մեկուսացում
Serializable (SI +) 'պաշտպանություն phantom/write-skew։
Strict-serializable: Սերիզացիա + գծայնացումը իրական ժամանակի հետ։
5) Multi-տարածաշրջանը 'տարբերակներ և փոխզիջումներ
Գլոբալ առաջնորդը (CP)
Գրառումները գնում են մեկ տարածաշրջանի առաջնորդի միջոցով։ ընթերցումները տեղական քեշներ/պրոյեկցիաներ են կամ առաջնորդի միջոցով։
Պլյուսներ ՝ պարզ մոդել։ Մինուսները ՝ p95/RTT մինչև առաջնորդը, P-ի դեպքում 'գրառումները։
Տարածաշրջանային առաջնորդներ + սինխրոն քվորում
Երկրագնդի կվորումը մի քանի տարածաշրջաններից։ յուրաքանչյուր գրառում սպասում է ապացույցների> 50 տոկոսը։
Պլյուսներ ՝ առանց «նեղ պարանոցի», բարձր կայունություն։ Մինուսներ 'միջմայրցամաքային լատենտ։
Geo-partitioning
«Տնային» տվյալները տարածաշրջանի համար (տենանտ/միգրացիա); գլոբալ վիրահատությունները սագայի/ագրեգատների միջոցով են։
Պլյուսներ 'տեղական գրառումների ցածր ուշացումներ։ Մինուսները 'տվյալների սահմանների պլանավորումը։
6) R/W և ընթերցումներ
Գրառումները ՝ «W = majority» - strong-ի համար։
Ընթերցումներ
«Ամենաերիտասարդ» '«R = majority» կամ կարդալը առաջնորդից։
L-ի նվազեցման համար «stale-ok» կարդալը երկրորդ էկրաններից (UX-ում ակնհայտ մակնշմամբ)։
Read-rep.ru/le.read: օպտիմիզացում առանց խստության կորցնելու առաջնորդի կարճ վարձույթներում։
7) Արտադրողականություն և UX
Լատենտ 'կենտրոնացեք RTT-ի վրա հաճախորդի և առաջնորդի/քվորումի միջև (միջտարածաշրջանային հարյուրավոր)։
Pattern «write-strong, read-fox»: strong + cash/prosports ընթերցանության վրա, RYW-ից հեղինակի համար։
Batch/փաթեթներ 'խմբավորում եք ձայնագրությունները, բայց հետևեք պոչի լատենտին։
Քայքայման ուրվագծերը 'պատահականության ժամանակ' read-only, ազնիվ արձաններ, վտանգավոր մուտացիաների արգելք։
8) Strict ճանապարհների դիտարկումը
Մետրիկները
p50/p95/p99 latency: write-kvorum, read-quorum, առաջնորդական ընթերցումներ։
Քվորումի հաջողությունը, կրկնությունները/արձագանքները, առաջնորդի փոփոխությունը։
Կրկնվող լագը (ակնկալվում է փոքր, բայց պետք է վերահսկել)։
«Սթեյլ» ընթերցումների մասնաբաժինը (եթե ներառված են)։
Թրեյսինգը
Սպանները ՝ «առաջնորդի ընդունումը», «կրկնօրինակումը», «քվորումա»։
Теги: `term`, `leader_id`, `quorum_size`, `region`.
Alerta
P95/p99 աճը, հաճախակի առաջնորդի վերընտրումը, quorum-timeouts, split-brain լուծիչները։
9) Թեստեր և քաոս
Jepsen-նման 'ցանցային բաժանումներ, ձգումներ, drops, clock-skew։
Safety-invariants 'կրկնակի ծախսերի/բացասական մնացորդների/երկակի ամրագրման անհնարինությունը։
Առաջնորդությունը 'առաջնորդի հրաժարվելը, բեռի տակ վերընտրվելը, fence-տոկենները։
Կարդալու համաձայն 'կարդալը գրելուց անմիջապես հետո պետք է տեսնի «նոր» (RYW/linearizable read)։
10) Պլեյբուկի
Քվորումի կորուստ 'անցնել read-only-ին, տեղեկացնել հաճախորդներին, ուղարկել «տնային» տարածք, եթե կա geo-partitioning։
Լատենտության աճը միջմայրցամաքային է 'ժամանակավորապես նվազեցնել խիստ գրառումների ծավալը (հոսքերի մի մասը հերթում/պրոյեկտում), տեղայնացնել լուծույթը։
Առաջնորդին 'ավելացնել ընտրությունների թայմաուտները, ստուգել ցանցերը/ժամացույցները/GC-դադարները։
Split-brain: ներառել fence-tocens/leport-ստուգումներ, կանգնեցնել հին առաջնորդները օպերատորի մակարդակում։
11) Տիպիկ սխալներ
Պահանջել Strong «ամենուր» 'լատենտության և արժեքի պայթյունը փոխարենը կենտրոնացնել ինվարանտների վրա։
Փորձելով լինել CA իրական բաժանմունքում, P-ի պահին համակարգը դեռ ընտրություն է անում, հաճախ ակնհայտ չէ։
Dance-write-ը տարբեր տարածաշրջաններում առանց սագի/2019 'ֆանտոմներ և ինվարանտների կորուստ։
RYW-ի բացակայությունը 'օգտագործողը չի տեսնում իր նոր գրված էությունը' վստահության նվազումը։
Առանց HLC/Windows Time-սահմանների, հեշտ է ստանալ «ցատկող» ժամանակը և մրցավազքը։
Դեգրադացիայի պլան չկա. P-ում սկսվում են քաոսային մասնակի ձախողումներ։
12) Արագ լուծումներ (բաղադրատոմսեր)
Վճարումներ/հավասարակշռություններ ՝ առաջնորդ + majority-kvorum; գործարքները strict-serializable; կարճ թայմաուտներ, կոշտ մերժում P.
Ամրագրումը (տեղեր/արցունքներ) 'write-strong առաջնորդի միջոցով, կարդալը - cash RYW-ի հետ; TTL պահեստները + TCC։
Գլոբալ SaaS: geo-partium 'tenae/region'; խիստ վիրահատություններ տնային տարածքում, հաշվետվություններ/որոնում - նախագծման միջոցով։
Աուդիտ/ամսագիր 'append-only CP ամսագիր; ընթերցանությունը կարելի է քշել, բայց հավատալ վերահսկողական կետերին։
13) Չեկ թուղթ մինչև վաճառելը
- Invariants, որոնք պահանջում են strong; մնացածը 'AR/պրոյեկտում։
- Ընտրվել է ռեժիմը 'մեկ առաջնորդ/կվորում միջտարածաշրջանային/geo-part.ru։
- Տրամադրված «W = majority», «R = leader 'majority» քննադատական ճանապարհների համար։
- Ապահովված RYW/monotonic UX-ի համար; հստակ նշված են ընթերցանության «stale-ok» -ը։
- Ներառված են քվորումի, բայերի, լատենտների փոխաբերությունները։ ալտերտերը p95/p99 և վերբեռնման վրա։
- Կա degrade պլան 'read-only, անջատել վտանգավոր մուտացիաները, հերթերը «փոթորիկից հետո»։
- Քաոս թեստեր 'բաժանումը, clock-skew, առաջնորդի հրաժարումը։ ստուգվում են safety-invariants-ը։
- Lenta.ru: որ խիստ, որ «կարող է հետ մնալ», ապրանքի/աջակցության հաղորդակցությունը։
Եզրակացություն
Strong Consistency-ը ճշմարտության պաշտպանության գործիք է, որտեղ սխալը անընդունելի է։ Կիրառիր այն կոշտ ինվարիատորների շուրջ, որոնք գիտակցաբար վճարում են մետաղալարերի և փոթորիկների առկայության համար։ Քրոնիկոն 'CP միջուկը կրիտիկական, AP-ընթերցանության և արագության պրոյեկցիայի համար։ Ճիշտ հեռուստատեսությամբ, դեգրադացիայով և թեստերով դուք կպահպանեք ճիշտ և օգտագործողի փորձը։