Репликация жана eventual consistency
Репликация жана eventual consistency
1) Эмне үчүн eventual consistency
Система аймактарга/аймактарга бөлүштүрүлгөндө, синхрондуу жазуу бардык жерде тармактык мүчүлүштүктөрдө жогорку латенттүүлүктү жана төмөн жеткиликтүүлүктү берет. Eventual consistency (EC) үчүн сөздөрдү убактылуу синхрондоштурууга жол берет:- төмөн кечигүү жазуу (жергиликтүү кабыл алуу),
- тармакты бөлүштүрүүдө мыкты жеткиликтүүлүк,
- горизонталдык масштабдоо.
Негизги милдет - көзөмөлгө алынбаган ырааттуулук: колдонуучу "абдан жаңы" маалыматтарды көрөт, домендин инварианттары сакталат, чыр-чатактар аныкталат жана алдын ала чечилет.
2) шайкештик моделдери - биз кардарга убада
Strong: окуу дароо акыркы жазууну көрөт.
Bounded stale/read-not-older-than (RNOT): Окуу эски белги эмес (LSN/версия/убакыт).
Causal: сакталат "себеп-кесепеттүү" мамилелер (A чейин B).
Read-Your-Writes: кардар акыркы жазууларды көрөт.
Monotonic Reads: ар бир кийинки окуу "кайра" эмес.
Session: бир сессиянын алкагында кепилдик топтому.
Eventual: жаңы жазуулар жок болсо, бардык репликалар биригет.
Практика: Session + RNOTти критикалык жолдордо жана Eventual витриналарында/кэштеринде айкалыштырыңыз.
3) Replication: механика жана анти-entropy
Синхрондуу (Quorum/RAFT): жазуу N түйүндөр менен тастыкталгандан кийин ийгиликтүү болуп эсептелет; минималдуу RPO, p99 жогору.
Асинхрондук: жергиликтүү коммитит лидери, кийинчерээк журналды таратат; төмөн латенттүүлүк, RPO> 0.
Физикалык (WAL/binlog): тез, гомогендик.
Логикалык/CDC: саптар/окуялар деъгээлинде өзгөрүүлөр агымы, ийкемдүү багыттоо, чыпкалар.
Анти-entropy: мезгил-мезгили менен текшерүү жана калыбына келтирүү (Merkle дарактар, хэш салыштыруу, arka plan re-sync).
4) Версия идентификаторлору жана себептик буйруктары
Monoton версиялары: increment/LSN/epoch; жөнөкөй, бирок параллелизмди коддобойт.
Lamport timestamp: логикалык саат боюнча жарым-жартылай тартиби.
Vector clock: параллелдүү бутактарды бекитип, чыр-чатактарды аныктоого мүмкүндүк берет (concurrent).
Hybrid/TrueTime/Clock-SI: логика "T чейин эмес" дүйнөлүк тартип үчүн.
Сунуш: CRDT/чыр-чатактар үчүн - vector clock; "улуу эмес" үчүн - LSN/GTID.
5) Чыр-чатактар: аныктоо жана чечүү
Типтүү жагдайлар: эки аймактан бир эле объектке жазылуу.
Стратегиялары:1. Last-Write-Wins (LWW) саат/логикалык штамп боюнча - жөнөкөй, бирок "жоготуп" Апдейт болот.
2. Домендик логика боюнча өлчөө функциялары:- (G-Counter/PN-Counter),
- менен бириктирилген көптүк "add-wins/remove-wins",
- суммалар/баланстар - жөнөкөй LWW аркылуу эмес, транзакциялык журналдар аркылуу гана.
- 3. CRDT (Convergent түрлөрү): G-Counter, OR-Set, LWW-Register, тизмелер үчүн RGA.
- 4. Операциялык трансформациялар (БД үчүн сейрек, көбүнчө редакторлор үчүн).
- 5. Manual resolution: "inbox" менен чыр-чатак, колдонуучу туура нускасын тандап алат.
Эреже: домендик инварианттар стратегияны талап кылат. акча/калдыктары үчүн - LWW качуу; компенсация менен транзакцияларды/окуяларды колдонуңуз.
6) Жазуулардын кепилдиги жана демпотенттик
Командалардын демпотенттик ачкычтары (payment, withdraw, create) → кайталоо коопсуз.
Демпотенттик/сериялык номердин ачкычы боюнча "кириш" (inbox) жана "чыгуу" (outbox) боюнча дедупликация.
Exactly-once күчтүү өбөлгөлөр жок жетүүгө мүмкүн эмес; at-least-once + idempotentity.
Outbox/Inbox-үлгү: DD жазуу жана окуя атомардык жарыялоо (жергиликтүү бүтүм), алуучу idempotency-key менен мамиле кылат.
7) Окуу "X улуу эмес" (RNOT)
Техника:- LSN/GTID-дарбазасы: кардар минималдуу версиясын (жазуунун жообунан) жөнөтөт, роутер/прокси LSN ≥ Xти кууп жеткен репликага, антпесе лидерге жөнөтөт.
- Time-bound: "2 секунддан улуу эмес" - версиясы жок жөнөкөй SLA.
- Session pinning: жазуудан кийин N секунд гана лидери окуп (Read-Your-Writes).
8) өзгөртүү агымдары жана кэш макулдашуу
CDC → шина окуялар (Kafka/Pulsar) → керектөөчүлөр (кэш, индекстер, терезелер).
Кэш майыптыгы: топиктер 'invalidate: {ns}: {id}'; idempotent иштетүү.
Rebuild/Backfill: Russinchron менен окуялар журналынан проекцияларды кайра карап чыгуу.
9) Сагалар жана компенсациялар (сервис аралык транзакциялар)
EC-дүйнөдө узак мөөнөттүү операциялар компенсациялык аракеттер менен кадамдарга бөлүнөт:- Оркестр: координатору кадамдарды жана алардын ордун толтуруу чакырат.
- Хореография: кадамдар окуяларга жооп берип, төмөнкүлөрдү жарыялайт.
Инварианттар (мисал): "баланс ≥ 0" - кадам чектеринде текшерүү + четтегенде компенсация.
10) Көп аймак жана тармактык бөлүштүрүү
Local-write, async-replicate: жергиликтүү аймакта каттоо + башка жеткирүү (EC).
Geo-fencing: маалыматтар аймакка "чапталган" (төмөн жашыруун, аз чыр-чатактар).
CP-маалыматтар үчүн Quorum DD (Raft); кэш/терезелер - AP/EC.
Split-brain планы: байланыш жоголгондо, региондор домен лимиттеринин (write fencing, квота) алкагында иштөөнү улантышат, андан кийин - reconcile.
11) Байкоо жана SLO
Метрикасы:- Replica lag: убакыт/LSN-аралык/offset (p50/p95/p99).
- Staleness: босогодон жогору жооптордун үлүшү (мисалы,> 2s же LSN
- Conflict rate: чыр-чатактар жана ийгиликтүү соода жыштыгы.
- Convergence time: чокусунан кийин Replications кайчылашуу убактысы.
- Reconcile backlog: көлөмү/артта партиялардын убактысы.
- Маалыматтар категориялары боюнча RPO/RTO (CP/AP).
- Lag> максаттуу, чыр-чатактын өсүшү, "узун" терезелер келишпестик.
12) EC маалымат схемасы долбоорлоо
Ар бир жазууда ачык версия/вектор ('version', 'vc' колонкалары).
Append-only критикалык инварианттар үчүн журналдар (баланстар, эсептөөлөр).
Окуя идентификаторлору (snowflake/ULID) тартип жана чоң ата үчүн.
Коммутативдик жаратылыш менен талаалар (эсептегичтер, көптүктөр) → CRDT үчүн талапкерлер.
API дизайн: if-match/etag менен PUT, precondition менен PATCH.
13) сактоо жана окуу үлгүлөрү
Read Model/CQRS: "булак" жазуу, проекцияларды окуу (артта калышы мүмкүн → "жаңыртуу"...).
Stale-OK жолдору (каталог/лента) vs Strict (капчык/лимиттер).
Sticky/Bounded-болоттон желектери суроо-талап (аталышы 'x-read-consistency').
14) киргизүү чек-тизмеси (0-45 күн)
0-10 күн
Маалыматтарды категориялаштыруу: CP-критикалык (акча, буйрутмалар) vs ЕБ/болот-OK (каталогдор, издөө индекстери).
SLO стейл аныктоо (мисалы, "2s улгайган эмес"), максаттуу лагдар.
Объекттерди жана idempotency-keys версияларын APIге киргизүү.
11-25 күн
CDC жана outbox/inbox киргизүү, кэш майыптык жолдору.
Кошуу RNOT (LSN-Gates) жана session pinning жазуу-критикалык жолдорунда.
жок дегенде бир соода стратегиясын ишке ашыруу (LWW/CRDT/домен) жана чыр-журнал.
26-45 күн
Anti-entropy (текшерүү/оңдоо) жана Стейл отчетторду автоматташтыруу.
Оюн-күндү өткөрүү: тармакты бөлүштүрүү, чыр-чатактын чыгышы, калыбына келтирүү.
Дашборддо элестетүү: lag, staleness, conflict rate, convergence.
15) Анти-үлгүлөрү
Critical Invariants үчүн сокур LWW (акча/упай жоготуу).
Жок idempotency → retrais боюнча эки жолу иш.
"Күчтүү" модель бардык → ашыкча куйруктары p99 жана кемчиликтер менен морт.
Жок RNOT/Session кепилдиктер → UX "жыпар жыттуу", колдонуучулар өз өзгөрүүлөрүн "көрүшпөйт".
Жашыруун кэш жана булак synchronization (CDC/майып жок).
reconcile/anti-entropy куралынын жоктугу - маалыматтар "кылымдар бою" айырмаланат.
16) Жетилүү метрикасы
Replica lag p95 максаттуу ≤ (мисалы, ≤ 500 ms аймакта, ≤ 2 s аралык аймактар).
Staleness SLO "катуу" каттамдар боюнча суроо-талаптардын 99% ≥ аткарылат.
Conflict resolution success ≥ 99. 9%, орточо чечим убактысы ≤ 1 мин.
чокулары кийин Convergence убакыт - мүнөт, саат эмес.
100% "акча" операциялары idempotency-ачкычтары жана outbox/inbox менен жабылат.
17) Recipes (Сниппет)
If-Match/ETag (HTTP)
PUT /profile/42
If-Match: "v17"
Body: { "email": "new@example.com" }
Эгерде версия өзгөрсө - '412 Precondition Failed' → кардар чыр-чатакты чечет.
"LSN улгайган эмес" (psevdo)
x-min-lsn: 16/B373F8D8
Роутер 'replay _ lsn ≥ x-min-lsn' менен репликаны тандайт, антпесе - лидер.
CRDT G-Counter (идея)
Ар бир аймак өз эсептегич сактайт; жыйынтык - бардык компоненттердин суммасы; репликация - коммутативдик операция.
18) Корутунду
Eventual consistency - бир компромисс сапаты эмес, ошондой эле акылдуу келишим: бир жерде биз ылдамдык жана жеткиликтүүлүк үчүн сергектик менен төлөйбүз, бирок домендик стратегиялар жана инструменттер менен маанилүү инварианттарды коргойбуз. Версияларды киргизиңиз, idempotency, RNOT/Session кепилдиктери, CDC жана анти-entropy, lag/staleness/conflicts өлчөө - жана сиздин бөлүштүрүлгөн системаңыз тез, туруктуу жана болжолдонгон, ал тургай, мүчүлүштүктөр жана эң жогорку жүктөр астында.