Санҷиши устуворӣ
1) Мафҳумҳо ва ҳадафҳои асосӣ
Эътимоднокӣ - эҳтимолияти иҷро; тобоварӣ - Рафтор дар давоми ва пас аз нокомӣ.
SLO/буҷаи хато: меъёрҳои таназзули "қобили қабул".
Гипотезаи устувор: интизории расмии ченакҳои устувор (масалан, p95 <200 ms, сатҳи хатогӣ <0. 5%). Озмоиш бомуваффақият ҳисобида мешавад, агар фарзия идома ёбад.
Намудҳои нобарориҳо: шабака (таъхир, талаф/такрорӣ, танаффус), ҳисоббарорӣ (CPU, хотира), нигаҳдорӣ (I/O, хастагии диск), вобастагӣ (5xx, танаффус, меъёри маҳдудият), мантиқӣ (ҳодисаҳои қисман, "деградатсияи суст"), амалиётӣ (озодкунӣ, конфигуратсия), "торик" (тақсим-майна, бастҳои соат).
2) Пирамидаи устуворӣ
1. Санҷишҳои воҳиди нобарориҳои мантиқӣ (бозсозӣ, номутобиқатӣ, танаффус).
2. Адаптерҳои компонентӣ бо сӯзандору (Testcontainers/tc-netem).
3. Интегратсия/система бо шабака/пойгоҳи додаҳо/кэшҳо ва профилҳои воқеӣ.
4. Таҷрибаҳои бесарусомонӣ дар дафтарҳои пешакӣ (ва сипас дар prod маҳдуд).
5. Рӯзи бозӣ - машқҳои сенарии даста (одамон + асбобҳо).
3) Риоя ҳамчун асос
SLI: p50/p95/p99 таъхир, сатҳи хатогӣ, пуррагӣ (CPU/heap/FD/IOPS), тарки/вақт, умқи навбат.
Нишонаҳо: ёфтани мушкилот дар ҳолати нокомӣ.
Нишондиҳандаҳои устувории семантикӣ: сатҳи муваффақияти зебо ва таназзул, сатҳи дархости рехта, сатҳи худтанзимкунӣ (MTTR).
Таҷрибаҳои тамғагузорӣ: 'бетартибӣ. experiment_id', 'фаза = ворид/барқарор кардан' дар рӯйдодҳо/гузоришҳо.
4) Каталоги тазриқи камбудиҳо
Шабака: таъхир/ҷиттер, талаф/нусхабардорӣ/фармоиш, маҳдудияти фарохмаҷро, тӯфони шадид, танаффуси TLS.
Мизбон: Маҳдудияти CPU, ихроҷи хотира/маҳдудиятҳо, таваққуфи GC, хастагии дескриптор, "skew соат".
Нигоҳдорӣ: афзоиши таъхир, EROFS, ENOSPC, таназзули нусхабардорӣ, аз даст додани пешво.
Вобастагӣ: 5xx/429, сустшавӣ, печонидани DNS, шаҳодатномаҳои кӯҳна, меъёри маҳдудият, "посухҳои қисман".
Маълумот: навиштани фасод, "сӯрохиҳо" дар ҷараёнҳо, такрори ҳодисаҳо, ихтилофи версияҳо.
Амалиётҳо: барориши номуваффақ, парчами хусусият, дрифти конфигуратсия, хатои дастӣ (ҳамчун қисми моделиронӣ).
5) Намунаҳои устуворӣ (чиро бояд тафтиш кард)
Ҷиттер дар ҳар як RPC ақибнишинӣ ва танаффус мекунад.
Breaker Circuit (кушодан/кушодани нимсола, барқароркунии экспоненсиалӣ).
Булкхедҳо (ҷудокунии ҳавзҳо/навбатҳо ба доменҳои муҳим).
Сарбории боркунӣ (барқарор кардани дархостҳои афзалиятноки паст ҳангоми пур кардан).
Backpressure (сигналҳои боло занҷир, маҳдудиятҳои мувофиқат).
Idempotency (калидҳои idempotency оид ба "таъсири тараф").
Кэчинг ва стекҳо дар ҳолати таназзули манбаъ.
Таназзули меҳрубон (посухҳои сабук, маълумоти кӯҳна, хусусиятҳои ғайрифаъол).
Вақти буҷа.
Атомият/ҷуброн (Saga/Outbox/паёмдони транзаксионӣ).
Кворумҳо ва нусхабардорӣ (кворумҳои R/W, таназзули пайдарҳамӣ барои мавҷудият).
Анти-энтропия/такрорӣ (барқароршавӣ аз сӯрохиҳои ҳодиса).
6) Дорухат барои тазриқ ва интизориҳо (псевдокод)
Retray бо jitter ва breaker
for attempt in 1..N:
if breaker. open(): return fallback()
res = call(dep, timeout = base 0. 8)
if res. ok: return res sleep(exp_backoff(attempt) jitter(0. 5..1. 5))
if attempt == N: breaker. trip()
return fallback()
Соя ва Backprescher
if queue. depth() > HIGH cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency
Идемпотенция
key = hash("payout:"+external_id)
if store. exists(key): return store. get(key)
result = do_side_effect()
store. put(key, result, ttl=30d)
return result
7) Таҷрибаҳо: сенарияҳо ва гипотезаҳо
7. 1 "Вобастагии суст"
Тазриқ: + 400 ms p95 ба API беруна.
Интизорӣ: афзоиши танаффус ≤ X%, кушодани танаффус, посухҳои бозгашт, сарфа кардани хидмати p99 <SLA, ҳеҷ каскад ҳангоми бозгашт.
7. 2 "Талафоти қисман кэш"
Тазриқ: нокомии 50% гиреҳҳои Redis/Cache.
Интизорӣ: зиёд шудани пазмон, аммо бидуни тарма ба манбаъ (дархости муттаҳидшавӣ/TTL тағирёбанда), худкор гарм кардан ва барқароршавӣ.
7. 3 "Тақсим кардани майна дар пойгоҳи додаҳо"
Тазриқ: Аз даст додани пешво, гузариш ба нусхабардорӣ.
Интизорӣ: рад кардани кӯтоҳмуддати сабтҳо, аз кворум хондан, талафи маълумот нест, Outbox паёмҳоро гум намекунад.
7. 4 "ENOSPC/диски пур"
Тазриқ: 95-100% диск.
Интизорӣ: гардиши фаврии гузоришҳо, нокомии хусусиятҳои басташавӣ, бехатарии гузоришҳои интиқодӣ (WAL), огоҳиҳо ва автоликидҳо.
7. 5 "Таркиши ҳаракат"
Тазриқ: × 3 RPS то нуқтаи гарм 10 дақиқа.
Интизорӣ: сояҳои афзалиятноки паст, p95 устувор барои роҳҳои "ядроӣ", афзоиши навбат дар ҳудуди маҳдуд, тӯфони DLQ.
7. 6 "Skew Clock"
Тазриқ: гузариши вақти гиреҳ ба +/ − 2 дақ.
Интизорӣ: TTL/имзоҳои дуруст (leeway), таймерҳои монотоникӣ дар бозсозӣ, нишонаҳои дуруст бо дрифти қобили қабул.
8) Муҳит ва бехатарии таҷрибаҳо
Аз маълумоти пешакӣ, синтетикӣ, конфигуратсияҳо/топология то ҳадди имкон ба маҳсулот оғоз кунед.
Дар фурӯш - танҳо тирезаҳои идорашаванда, парчамҳои хусусӣ, амплитудаи зина ба зина, худкор, "тугмаи сурх".
Гвардияҳо: Маҳдудиятҳои RPS/хатогиҳо, посбонони SLO, манъ кардани релизҳо ҳангоми ҳодисаҳои муҳим.
Дафтарчаи корӣ талаб карда мешавад: чӣ гуна бозгардонидан, ба кӣ занг задан, ба куҷо нигоҳ кардан.
9) Автоматика ва CI/CD
Феҳристи таҷрибаҳо ҳамчун рамз (YAML/DSL): ҳадафҳо, тазриқҳо, ченакҳо, ҳудудҳо, "тугмаҳо".
Дуди бетартибӣ дар ҳар як озодкунӣ: тазриқи кӯтоҳ (масалан, 2 дақ + 200 мс ба нашъамандӣ) дар марҳила.
Matrix Night Night - Хидматҳо × Ҳолати нокомӣ
Дарвозаи озодкунӣ: манъи ҷойгиркунӣ, агар субот аз ҳадди камтар бошад (масалан, 'фарогирии бозгашт <95%' зери "вобастагии суст").
10) Маълумот ва пайдарҳамӣ
Ҷубронпулиро санҷед (Saga): амалиёти қисман иҷрошуда бояд ба ҳолати мувофиқашуда оварда шавад.
Такрори санҷишҳо/такрори рӯйдодҳо, таҳвили фармоишӣ, сӯрохиҳо ва такрорӣ.
Пас аз нокомӣ инвариантҳои домейнро тафтиш кунед: тавозун манфӣ нест, транзаксияҳо часпида намешаванд, маҳдудиятҳо вайрон карда намешаванд.
11) Анти-намунаҳо
Танҳо роҳи хушбахтона ва сарбориро бидуни нокомӣ санҷед.
Retrai бе jitter → тӯфони зери таназзул.
Ягон буҷаи вақти таътили ҷаҳонӣ § вақти танаффус нест.
Ҳавзи ягона барои ҳама вазифаҳо → ҷудокунӣ (болопӯш) нест.
Навбати "беохир" → зиёд кардани ниҳонӣ/PDE.
Телеметрияи сифрии таҷрибаҳо → амалияи бетартибиҳои "нобино".
Бетартибӣ дар фурӯш бидуни бозгашт/маҳдудият/соҳиби масъул.
12) Рӯйхати назорати меъморон
1. Гипотезаи устувор ва SLO муайян карда шудааст?
2. Ҳар як RPC вақтхушӣ, ақибнишинӣ ва танаффус дорад?
3. Bulkheads, маҳдудкунандаҳо, backpressure, рехтани сарборӣ?
4. Кэш устувор: муттаҳидшавӣ, муҳофизати тӯфони кэш, гарм шудан?
5. Outbox/Saga барои таъсири тараф, калидҳои номатлуб?
6. Кворумҳо/нусхабардорӣ/feilover озмуда шуданд?
7. Оё дар CI/CD феҳристи таҷрибаҳо, бетартибиҳои шабона ва дарвозаҳо мавҷуданд?
8. Ченакҳо/пайгирӣ таҷрибаҳоро нишон медиҳанд, оё панели панелҳо ҳастанд?
9. Runbook 'ва "тугмаи сурх" омодаанд, масъулият таъин шудааст?
10. Рӯзҳои муқаррарии бозӣ бо Dev/SRE/дастгирӣ?
13) Асбобҳои хурд ва сенарияҳои намунавӣ (Эскизҳои YAML)
Шабака (tc/netem)
yaml experiment: add-latency target: svc:payments inject:
netem:
delay_ms: 300 jitter_ms: 50 loss: 2%
duration: 10m guardrails:
error_rate: "< 1%"
p95_latency: "< 400ms"
CPU/Heap
yaml inject:
cpu_burn: { cores: 2, duration: 5m }
heap_fill: { mb: 512 }
Вобастагӣ
yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"
Хулоса
Озмоиши устуворӣ ин "ҳиллаи бетартибӣ" нест, балки интизомест, ки системаро дар зери glitches пешгӯӣ мекунад. Гипотезаҳои возеҳ, телеметрия, феҳристи таҷрибаҳои назоратшаванда ва намунаҳои дарунсохт дар меъморӣ (танаффусҳо, вайронкунандагон, ҷудокунӣ, аблаҳӣ) ҳодисаҳои эҳтимолиро ба сенарияҳои назоратшаванда табдил медиҳанд. Гурӯҳ ба релизҳо эътимод пайдо мекунад ва корбарон ҳатто дар шароити нокомӣ хидмати устувор мегиранд.