Үйлесімділік үлгілері
Келісімділік оқырмандардың бәсекелестік өзгерістер кезінде қандай мәндерді және қандай тәртіппен көретінін сипаттайды. Үлгіні дұрыс таңдау - бұл инварианттардың қатаңдығы, жасырындылығы, қолжетімділігі және құны (PACELC) арасындағы теңгерім. Төменде - модельдер және оларды қолдану бойынша практикалық анықтамалық.
1) «Қатаң» модельдер
Linearizable (сызықтану, Strong)
Мiнез-құлық барлық операциялар нақты уақытты құрметтейтiн бiрыңғай тәртiппен орындалған сияқты.
Артықшылықтары: қарапайым ментальды модель, ақша мен бірегейлік үшін қауіпсіз.
Кемшіліктері: кворумдар/көшбасшы → өсу 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 → B), барлығы B алдында A көреді
Артықшылықтары: соц-фидтер, түсініктемелер үшін интуитивті.
Кемшіліктері: бағыттау және себептілік белгілері күрделірек (векторлық сағаттар).
Жүзкейстер: коммуникация, бірлесіп редакциялау, оқиғалар лентасы.
3) Әлсіз және гибридті модельдер
Bounded Staleness
Оқулар Δ t немесе N нұсқасынан аспауы мүмкін.
Артықшылықтары: болжамды UX, өңіраралық жақсы мәміле.
Кемшіліктер: жазбаларды қайшылықтардан қорғамайды.
Eventual Consistency
Уақыт өте келе барлық көшірмелер үйлеседі; тәртіп пен кідіртуге кепілдік берілмеген.
Артықшылықтары: ең төменгі латенттілік/құн, жоғары қолжетімділік (AP).
Кемшіліктер: айқын merge (CRDT/домен ережелері) қажет.
Юзкейстер: кэштер, фидтер, метриктер, лайкалар, нен critical анықтамалықтар.
4) Типтік аномалиялар және олардың мағынасы
Dirty Read: құпия емес деректерді оқу.
Non-repeatable Read: транзакция ішінде бір оқу әртүрлі мәндер береді.
Phantom: қайталап сұрағанда предикатқа сәйкес келетін жол пайда болады/жоғалады.
Write Skew (SI кезінде): екі транзакция қиылысатын инвариантты оқиды және «сомасында 1 ≥ болуы тиіс» шартын бұзып, әртүрлі жолдарды жазады.
Lost Update: жазба бәсекелестің өзгерістерін «кетіреді».
5) Оқу/жазу кворумдары мен деңгейлері
Көптеген сақтау орындары 'R '/' W' (оқуға/жазуға арналған репликалар саны) деңгейлерін қоюға мүмкіндік береді.
Кворум (R + W> N) «қиылысу» және соңғы жазбаны оқуға мықты кепілдіктер береді.
W = 1, R = 1 → төмен кідіріс, бірақ ескі деректер болуы мүмкін.
Тюнинг: сындарлы операцияларға - жоғары 'W' (немесе көшбасшы), қалғандарына - төмен 'R' жылдамдық үшін.
Read-repair/Hinted handoff фонында үйлесімділікке қол жеткізуге көмектеседі.
6) Сағат және тәртіп: біз себептерді қалай «түсінеміз»
Lamport clocks: оқиғаның ішінара реті.
Vector clocks: себептерін тіркейді, қайшылықтарды анықтауға мүмкіндік береді.
Hybrid/TrueTime тәсілдері: транзакцияларды реттеу және bound-staleness үшін кластердегі сағаттардың таралуын шектейді.
Нұсқалау: 'version/ts + actor' үшін merge; CRDT-де - тұйық жарты топтар (коммутативтілік/іспеттілік).
7) CRDT және домендік merge
CRDT (конвергентті/репликаланатын деректер түрлері) үйлесімсіз жақындасуға кепілдік береді: G-Counter, OR-Set, LWW-Register, Map, мәтіндік OT/WOOT-нұсқалар.
Лайктар, көптеген тегтер, себеттер, құжаттар пайдалы болғанда.
Шектеулер: нақты домендік мәні үшін дұрыс «біріктіру» семантикасын ойлап табу.
8) CAP/PACELC байланысы
Мультиаймақтағы қатаң модельдер (Linearizable/Serializable) → CP (PACELC: C таңдап, L төлейміз).
Әлсіз/гибридті модельдер → AP және/немесе төмен L, бірақ merge/жанжал-салдары қажет.
Гибрид: инварианттар үшін CP-ядро + оқу үшін AP-проекция/кэш.
9) Модельді таңдау: чек парағы
1. Инварианттар: не бұзуға болмайды? (бірегейлігі, теңгерімі, лимиттері).
2. Аймақтық: жазбалар/оқулар қайда орындалады? (жергілікті/жаһандық).
3. SLO жасырындылығы бойынша: сыни жолдар үшін p95/p99?
4. Үйлестіру бағасы: өңіраралық кворуммен төлеуге дайын ба?
5. Қайшылықтар: анықталған merge бар ма немесе үйлестіруші керек пе?
6. UX-күту: RYW/monotonic/causal клиент үшін маңызды ма?
7. Бақылау қабілеті: артта қалуды/шиеленісті/ескіру дәрежесін немен өлшейсіз?
8. Фолбэктер: (P) желісін бөлгенде не болады? read-only/жергілікті жазба/кезек?
10) Жылдам рецепттер
Төлем/теңгерім: Linearizable/Serializable, көшбасшы + кворум, қысқа таймауттар; RYW оқулары.
Профильдер/фид: Causal/Bounded staleness + кэш; Лайктерге/есептеуіштерге арналған CRDT; RYW авторға арналған.
Іздеу/талдау: SI/Read Committed, асинхронды проекциялар, индекстер үшін eventual.
Жаһандық SaaS: Geo-partitioning; «үй жазбалары» - CP, есептер/каталогтар - AP.
Бірлесіп өңдеу: себеп/eventual + CRDT/OT; «тарихты» сақтау.
11) Келісімділіктің байқалуы
Lag метрикасы: 'replication _ lag', 'staleness _ age _ ms' (p50/p95/p99).
Қақтығыс: қақтығыстардың үлесі, орташа шешу уақыты.
Кворумдар: R/W 'кворумдарының табыстылығы, өңіраралық жолдардың таймауттары.
Клиенттік кепілдіктер: RYW/monotonic - сессиялар бойынша трейс-белгілер.
12) Типтік қателер
Бизнес негізсіз Strong «барлық жерде» талап ету → жасырындылық пен құнды жару.
Dual-write түрлі аймақтарға сағасыз/CRDT → фантомдар және инварианттарды жоғалту.
Жаңа жіберілген деректердің UX → «жоғалуындағы» RYW/монотонды елемеу.
Кэш/проекциялардың ескіруін қадағаламау → «мәңгілік» айырмашылықтар.
Ойластырылмаған merge → күтпеген шығындар/мәндер дублі.
13) Шағын сәулет эталоны
Write-core (CP): көшбасшы, кворумдық жазбалар, SLO және таймауттар, журналдар.
Read-plane (AP): материалданған көріністер, TTL-кэштер, read-repair.
Клиент: sticky-session/сессиялық кепілдіктер (RYW/monotonic), нұсқаның белгілері.
Қайшылық-қозғалтқыш: CRDT/домендік ережелер, қолмен реттеу кезегі.
Мониторинг: лагтар, қақтығыстар, ескірген оқу үлестері.
Қорытынды
Келісу моделі - бұл деректер, кідіріс және қолжетімділік арасындағы инженерлік келісімшарт. Инварианттардан және SLO-дан бастаңыз, клиенттік кепілдіктер, кворумдар, сағаттар және бақылаушылық туралы ұмытпай, қажет жерде және мүмкіндігінше нашар таңдаңыз. Үлгілердің сауатты комбинациясы бизнес-шындықты және пайдаланушы сенімін құрбандықсыз ауқым, болжамдылық және тұрақтылық береді.