Такрор ва пайдарҳамии ниҳоӣ
Такрор ва пайдарҳамии ниҳоӣ
1) Чаро пайдарҳамии ниҳоӣ
Вақте ки система аз рӯи минтақаҳо/минтақаҳо тақсим карда мешавад, сабти синхронӣ дар ҳама ҷо дар ҳолати нокомии шабака таъхири баланд ва дастрасии кам медиҳад. Мувофиқати ниҳоӣ (EC) имкон медиҳад, ки муваққатан нусхабардорӣ ба хотири:- таъхири ками сабт (қабули маҳаллӣ),
- дастрасии беҳтар ҳангоми тақсимоти шабака,
- миқёси уфуқӣ.
Вазифаи калидӣ пайгирона назорат карда мешавад: корбар маълумоти "хеле тоза" -ро мебинад, инвариантҳои домейн ҳифз карда мешаванд, муноқишаҳо ошкор ва пешгӯишаванда ҳал карда мешаванд.
2) Моделҳои мутобиқат - он чизе ки мо ба фармоишгар ваъда медиҳем
Қавӣ: Хониш фавран вуруди охиринро мебинад.
Сарҳади кӯҳна/хондан-калонтар аз (RNOT): аз нишона калонтар хонед (LSN/версия/вақт).
Сабаб: Муносибати "сабабӣ" (A то B) нигоҳ дошта мешавад.
Read-Your-Writes: Муштарӣ сабтҳои охирини худро мебинад.
Хондани монотоникӣ: Ҳар як хониши навбатӣ "бозгашт" нест.
Сессия: маҷмӯи кафолатҳо дар як ҷаласа.
Оқибат: агар вурудоти нав вуҷуд надошта бошанд, ҳама нусхаҳо якҷоя мешаванд.
Амал: Якҷоя кардани сессия + RNOT дар роҳҳои муҳим ва оқибат дар мағозаҳо/кэшҳо.
3) Нусхабардорӣ: механика ва анти-энтропия
Синхронӣ (кворум/RAFT): сабт пас аз тасдиқи гиреҳҳои N муваффақ ҳисобида мешавад; ҳадди аққал RPO, болотар аз p99.
Асинхронӣ: роҳбар ба таври маҳаллӣ содир мекунад, дафтарро баъдтар паҳн мекунад; таъхири кам, RPO> 0.
Физикӣ (WAL/binlog): зуд, якхела.
Мантиқӣ/CDC: ҷараёни тағирёбии сатр/ҳодиса, масири фасеҳ, филтрҳо.
Анти-энтропия: мусолиҳа ва таъмири даврӣ (дарахтони Merkle, муқоисаи ҳаш, ҳамоҳангсозии пасзамина).
4) Идентификаторҳои версия ва фармоишҳои сабабӣ
Версияҳои монотон: афзоиш/LSN/epoch; оддӣ, аммо параллелизмро рамзгузорӣ накунед.
Вақти лампорт: тартиби қисман аз рӯи соати мантиқӣ.
Соати векторӣ: шохаҳои параллелиро ислоҳ мекунад ва ба шумо имкон медиҳад, ки навсозиҳои ихтилофро муайян кунед (ҳамзамон).
Hybrid/Ҳақиқати вақт/Clock-SI: Мантиқи "На пеш аз T" барои фармоиши ҷаҳонӣ.
Тавсия: барои CRDT/навсозиҳои ихтилофӣ - соати векторӣ; барои "калонтар нест" - LSN/GTID.
5) Ихтилофҳо: Кашф ва ҳалли
Ҳолатҳои маъмулӣ: сабт аз ду минтақа ба як объект.
Стратегияҳо:1. Last-Write-Wins (LWW) бо мӯҳри соат/мантиқӣ - оддӣ, аммо метавонад навсозиҳои "гум" кунад.
2. Якҷоя кардани функсияҳо аз рӯи мантиқи домейн:- майдонҳои ҳисобкунӣ илова карда мешаванд (G-Counter/PN-Counter),
- маҷмӯаҳо бо "иловаҳо/бурдҳо" якҷоя карда мешаванд,
- маблағ/бақия - танҳо тавассути маҷаллаҳои транзаксионӣ, на тавассути LWW оддӣ.
- 3. CRDT (намудҳои конвергент): G-Counter, OR-Set, LWW-Register, RGA барои рӯйхатҳо.
- 4. Тағироти амалиётӣ (кам барои пойгоҳи додаҳо, аксар вақт барои муҳаррирон).
- 5. Ҳалли дастӣ: ихтилоф дар "паёмдони паём", корбар версияи дурустро интихоб мекунад.
Қоида: Инвариантҳои домейн стратегияро дикта мекунанд. Барои пул/тавозун - аз LWW канорагирӣ кунед; Амалиётҳо/рӯйдодҳои ҷуброншударо истифода баред.
6) Кафолатҳо ва аблаҳиро сабт кунед
Калидҳои Idempotent оид ба фармонҳо (пардохт, бозпас гирифтан, эҷод кардан) → retry бехатар аст.
Такрори қуттии қуттӣ ва берунӣ аз рӯи рақами idempotence/рақами силсилавӣ.
Маҳз як маротиба бидуни биноҳои мустаҳкам дастнорас аст; ҳадди аққал як маротиба + idempotency амал кунед.
Намунаи Outbox/Inbox: навиштан ба пойгоҳи додаҳо ва интишори ҳодиса атомӣ (транзаксияи маҳаллӣ), равандҳои қабулкунанда тавассути калиди idempotency.
7) Хондани X кӯҳна нест (RNOT)
Техникҳо:- Дарвозаи LSN/GTID: муштарӣ версияи ҳадди аққалро (аз посухи навиштан) интиқол медиҳад, роутер/прокси ба нусхае, ки бо LSN ≥ X сабт шудааст, мефиристад, вагарна - ба пешво.
- Вақт вобаста аст: "аз 2 сония калонтар нест" - SLA оддӣ бе версияҳо.
- Ҷаласаи пинҳонӣ: пас аз сабти N сония, мо танҳо роҳбарро мехонем (Read-Your-Writes).
8) Тағйир додани ҷараён ва гуфтушунидҳои кэш
CDC → автобуси чорабинӣ (Кафка/Пулсар) → истеъмолкунандагон (кэш, индексатсия, мағозаҳо).
Маъюбии кэш: мавзӯъҳо 'беэътибор карда мешаванд: {ns}: {id}'; коркарди idempotent.
Бозсозӣ/Backfill: Агар ҳамоҳанг набошед, пешгӯиҳоро аз сабти рӯйдодҳо дубора ҷамъ кунед.
9) Сагас ва ҷубронпулӣ (муомилоти байнишаҳрӣ)
Дар ҷаҳони ИА, амалиёти дарозмуддат ба марҳилаҳо бо амалҳои ҷубронӣ тақсим мешавад:- Оркестр: Ҳамоҳангсоз қадамҳо ва ҷуброни онҳоро даъват мекунад.
- Хореография: қадамҳо ба рӯйдодҳо вокуниш нишон медиҳанд ва худашон нашр мекунанд.
Инвариантҳо (мисол): "тавозун ≥ 0" - санҷед дар ҳудуди қадам + ҷуброн барои дуршавӣ.
10) Қисмҳои минтақавӣ ва шабакавӣ
Маҳаллӣ-навиштан, асин-нусхабардорӣ: ба минтақаи маҳаллӣ нависед + ба дигар (EC).
Ҷуғрофия: маълумот ба минтақа "часпонида шудааст" (таъхири кам, муноқишаҳои камтар).
Пойгоҳи додаҳои кворум (Raft) барои маълумоти CP; кэш/дӯконҳо - AP/EC.
Нақшаи тақсимшавӣ: агар иртибот гум шуда бошад, минтақаҳо дар доираи домейн фаъолият мекунанд (навиштани тавораҳо, квотаҳо), пас оштӣ мешаванд.
11) Мушоҳида ва SLO
Нишондиҳандаҳо:- Қафои реплика: вақт/LSN-масофа/ҷуброн (p50/p95/p99).
- Устуворӣ: Фоизи ҷавобҳо, ки аз ҳадди ниҳоӣ зиёданд (масалан,> 2s ё LSN
- Сатҳи низоъ: сатҳи муноқишаҳо ва якҷояшавии бомуваффақият.
- Вақти конвергенсия: вақти конвергенсияи репликаҳо пас аз қулла.
- Ҳамоҳангсозии ақибмонӣ: ҳаҷм/вақти партияҳои ақибмонда.
- RPO/RTO аз рӯи категорияи маълумот (CP/AP).
- Ақибмонӣ> ҳадаф, афзоиши муноқишаҳо, тирезаҳои "дароз" -и номувофиқӣ.
12) Тарҳи нақшаи маълумоти EC
Версия/вектори возеҳ дар ҳар як вуруд (сутунҳо 'версия', 'vc').
Гузоришҳои танҳо барои инвариантҳои интиқодӣ (тавозун, ҳисобҳо).
Идентификаторҳои ҳодиса (барфпӯши барфӣ/ULID) барои фармоиш ва такрорӣ.
Майдонҳои коммутатсионӣ (ҳисобкунакҳо, маҷмӯаҳо) → номзадҳои CRDT.
Тарҳи API: PUT бо if-match/etag, PATCH бо шарти пешакӣ.
13) Намунаҳои нигоҳдорӣ ва хониш
Модели/CQRS-ро хонед: навиштан ба "манбаъ", хондан аз пешгӯиҳо (мумкин аст аз дисплейи "навшуда"... қафо монад).
Хатсайрҳои кӯҳна-OK (каталог/лента) vs Strict (ҳамён/маҳдудиятҳо).
Парчамҳои часпанда/сарҳадӣ дар дархост (сарлавҳаи 'x-хондан-мувофиқат').
14) Рӯйхати санҷиши амалисозӣ (0-45 рӯз)
0-10 рӯз
Гурӯҳбандии маълумот: CP-интиқодӣ (пул, фармоиш) vs EU/steel-OK (каталогҳо, индексатсияҳои ҷустуҷӯ).
Steele SLO-ҳоро муайян кунед (масалан, "на калонтар аз 2s"), ақибмонии ҳадаф.
Фаъол кардани версияи объект ва калидҳои idempotency дар API.
11-25 рӯз
Амалӣ намудани CDC ва қуттиҳо/паёмдонҳо, масирҳои маъюбии кэш.
Илова кардани RNOT (дарвозаи LSN) ва пинҳон кардани сессия ба роҳҳои хаттӣ.
Ҳадди аққал як стратегияи якҷояшавӣ (LWW/CRDT/домен) ва сабти муноқишаро амалӣ кунед.
26-45 рӯз
Анти-энтропия (мусолиҳа/таъмир) ва гузоришҳои услубиро автоматӣ кунед.
Рӯзи бозиро сарф кунед: ҷудошавии шабака, шиддат дар низоъҳо, барқароршавӣ.
Тасаввур кунед, ки дар панели панелҳо: ақибмонӣ, ноустуворӣ, сатҳи муноқишаҳо, конвергенсия.
15) Анти-намунаҳо
LWW нобино барои инвариантҳои интиқодӣ (аз даст додани пул/нуқтаҳо).
Набудани idempotency → такрори амалиётҳо ҳангоми бозомӯзӣ.
Модели "қавӣ" дар маҷмӯъ → думҳои аз ҳад зиёди p99 ва осебпазирӣ дар ҳолати нокомӣ.
Ягон RNOT/Session кафолат намедиҳад → UX "чашм мепӯшад", корбарон "тағироти худро намебинанд".
Кэши пинҳон ва номувофиқатии манбаъ (CDC/маъюбӣ нест).
Набудани асбоби мусолиҳа/анти-энтропия - додаҳо "барои асрҳо" фарқ мекунанд.
16) Нишондиҳандаҳои камолот
Реплика ақибмонии p95 ҳадаф (масалан, 500 мс дар минтақа, 2 с байни минтақаҳо).
Staleness SLO ≥ 99% дархостҳо дар хатсайрҳои "қатъӣ" иҷро карда мешавад.
Муваффақияти ҳалли муноқишаҳо ≥ 99. 9%, вақти миёнаи ҳалли масъала ≤ 1 дақ.
Вақти конвергенсия пас аз қуллаҳо - дақиқаҳо, на соатҳо.
100% амалиёти "пул" бо калидҳои idempotency ва outbox/inbox фаро гирифта шудаанд.
17) Дорухатҳо (порчаҳо)
If-Match/ETag (HTTP)
PUT /profile/42
If-Match: "v17"
Body: { "email": "new@example.com" }
Агар версия тағир ёфта бошад - '412 Precondition ноком' → муштарӣ муноқишаро ҳал мекунад.
Пурсиш "аз LSN калонтар нест" (псевдо)
x-min-lsn: 16/B373F8D8
Роутер нусхаро бо 'replay _ lsn ≥ x-min-lsn' интихоб мекунад, вагарна он пешво аст.
CRDT G-Counter (идея)
Ҳар як минтақа ҳисобкунаки худро нигоҳ медорад; Ҷамъ - ҷамъи ҳамаи ҷузъҳо Реплика - Амалиёт коммутативӣ мебошад.
18) Хулоса
Мувофиқати ниҳоӣ созишномаи сифат нест, балки шартномаи огоҳона аст: дар ҷое ки мо барои суръат ва дастрасӣ тару тоза пардохт мекунем, аммо инвариантҳои муҳимро бо стратегияҳо ва абзорҳои домейн ҳифз мекунем. Версияҳо, аблаҳӣ, кафолатҳои RNOT/Session, CDC ва анти-энтропияро ворид кунед, ақибмонӣ/ноустуворӣ/муноқишаҳоро чен кунед - ва системаи тақсимшудаи шумо ҳатто дар зери glitches ва қуллаҳои баландтарин зуд, устувор ва пешгӯишаванда хоҳад буд.