Көші-қон плейбуктері
1) Көші-қонды жіктеу
ДБ схемалары: бағандарды қосу/өзгерту, индекстер, шардалау, кілттердің түрін ауыстыру.
Деректер: жаппай backfill/cleanup, қалыпқа келтіру, ретеншн/мұрағаттау.
Сервистер және API: эндпоинттерді ауыстыру, нұсқалау, келісімшарттарды рефакторинг.
Кезектер/шиналар: топиктердің ауысуы, партиялану кілттерінің өзгеруі, оқиғалар пішімі.
Инфрақұрылым :/K8s/бұлт/өңір жаңа кластеріне көшу ,/KMS құпияларын ауыстыру.
Қоймалар және талдау: қозғалтқышты ауыстыру (OLTP/OLAP), датасеттердің форматы/партиялануы.
Қауіпсіздік/комплаенс: кілттерді ротациялау, «ұшуда» шифрлау, деректерді гео-локализациялау.
2) Табысты көші-қон қағидаттары
1. Expand → Migrate → Contract. Алдымен схеманы/мінез-құлықты кеңейтеміз (үйлесімді), содан кейін деректерді/трафикті көшіреміз, содан кейін ескісін алып тастаймыз.
2. Shadow & Dual. Көлеңкелі тексеру (shadow read/write) және валидация үшін қосарланған жазба.
3. Фича-жалаулар және «қызыл түйме». Жылдам өшіру, қадамдық қосу (персентиль/тенанттар/өңірлер).
4. Ұқсастығы және қайталануы. Скрипттер мен тапсырмаларды кері әсерсіз қайта іске қосуға болады.
5. Өзгерістер алдында бақылау. Дашбордтар/алерттар алдын ала, логтардағы/трестердегі көші-қон маркерлері.
6. Кері қайтару құжатталған. Runbook кері қайтару жоспар сияқты егжей-тегжейлі.
7. Шағын партиялар мен үзілістер. SLI және бизнес инварианттарын тексере отырып, шағын бөліктермен қоныс аударамыз.
3) Тәуелділікті түгендеу және талдау
Тұтынушылар картасы: сервистер, джобтар, есептер, сыртқы әріптестер, BI/ETL, вебхактар.
Келісімшарттар мен схемалар: API/оқиғалар нұсқалары, backward/forward үйлесімділігі.
Қолжетімділіктер/құпиялар: кім оқиды/жазады, кэши/реплика қайда.
Домен инварианттары: бірегейлік, теңгерім, теңсіздік, есептік тәулік.
Көлемдер/жылдамдықтар: деректер өлшемі, RPS, ең жоғары терезелер, RPO/RTO.
4) Каноникалық плейбук үлгісі (YAML-скелет)
yaml playbook: "migrate-orders-to-v2"
owner: "orders-team"
stakeholders: ["platform", "data", "security", "support"]
change_type: ["schema", "data", "api"]
risk_level: "high"
preconditions:
- "Dashboards ready: latency/error/lag"
- "Runbook rollback validated on stage"
- "Backups verified (restore tested)"
plan:
phase_1_prepare:
steps:
- "Add new nullable columns (expand)"
- "Deploy code with dual-write (flag off)"
- "Enable CDC stream to target"
phase_2_shadow:
steps:
- "Shadow-read v2, compare with v1 (1%)"
- "Fix discrepancies; iterate"
phase_3_dual_write:
steps:
- "Enable dual-write (10%→50%→100%)"
- "Start backfill in batches (size=10k, sleep=200ms)"
phase_4_cutover:
steps:
- "Switch reads to v2 by tenants (canary)"
- "Monitor SLI 30m; expand scope"
phase_5_contract:
steps:
- "Drop old indices/columns after T+14d"
- "Disable old topic/api; update docs/SDK"
guardrails:
abort_if:
- "error_rate > 0. 5% for 5m"
- "p95 > baseline1. 5 for 10m"
- "data_mismatch > 0. 01%"
rollback:
steps:
- "Flip flag: reads back to v1"
- "Stop backfill; continue dual-write to v1"
- "Replay missed events (DLQ→v1)"
validation:
checks:
- "Row counts match within epsilon"
- "Business invariants hold (balances, limits)"
comms:
- channel: "on-call-bridge"
- status_updates: "T-24h, T-1h, start, cutover, finish"
window: "low-traffic Sun 02:00–05:00 UTC"
5) Көші-қон паттерндері
5. 1 БД схемалары (RDBMS/NoSQL)
Қосыңыз - өзгертпеңіз. Жаңа nullable бағандар/индекстер → коды ескісін және жаңасын оқиды.
Онлайн қайта құру. Онлайн индекстер/параллель DDL пайдаланыңыз.
Серияландыру нұсқалары. JSON/Proto/Euro бағандарында payload нұсқасын жасаңыз.
Кілттер тасымалы. PK ауысқан кезде - уақытша сәйкестік кестесі + триггер/CDC.
5. 2 Деректер (backfill/cleanup)
CDC + backfill. Алдымен өзгерістер ағыны (артта қалмау үшін), содан кейін бумалық backfill.
Партиялар мен мерзімдер. Лагтарды бақылайтын шағын батшылар, чекпойнттар және қайта іске қосу.
Идемпотенттік апдейттер. Табиғи кілттер/нұсқалар бойынша Upsert.
5. 3 Оқиғалар мен кезектер
Оқиғаларды нұсқалау. 'event _ type @vN', кеңесшілер таныс емес өрістерді елемейді.
Топиктерді көшіру. Қосарланған жарияланым, тұтынушылар тұрақтандыруға дейін екеуін де оқиды; содан кейін ескісін «кесу».
Partition key. Кілттің көші-қоны - сәйкестік және теңсіздік картасымен қайта басу арқылы.
5. 4 Сервистер мен API
Blue/Green/Canary. Пулды жылыту, ішінара трафик, тез қайту.
Фича жалаулары. Теңгерімдер/өңірлер/пайыздар бойынша, бақыланатын қосу.
Келісімшарттар. CDC келісімшарттары мен үйлесімділік тестілері - ауыстырғанға дейін.
5. 5 Өңірлер/класты
Гео-қос жазба. Деректер екі өңірге жазылады; оқу - жақын жерде.
State transfer. Сурет + репликалау; «қызыл сызық» RPO, DNS/Anycast ауыстырып тиеу.
Юрисдикция. Деректерді оқшаулау/келісу, жинақтарды шығару үшін «тыйым салынған» тізімдер.
6) Орындау фазалары (егжей-тегжейлі)
1. Дайындау
Дашбордтар, алерттар, лимиттер, фича-жалаулар, қалпына келтіру тесті бар бэкаптар, стейждегі жүгіру.
2. Shadow (көлеңкелі тексеру)
Пайдаланушыларға әсер етпейтін жаңа жүйедегі сұрауларды/жазбаларды айна. Жауаптар/жағдайларды салыстырамыз.
3. Dual-write / Dual-read
Екі жаққа да жазып жатырмыз. Оқу - біртіндеп жаңа жүйеге көшіреміз. Сәйкессіздік логтары талданады.
4. Backfill
Тарихи деректерді топтап жүктейміз. CDC лаг бақылаймыз, сторидж/кэш жүктемесін бақылаймыз.
5. Cutover (қайта қосу)
Сегменттер бойынша канарим (тенанттар/өңірлер/пайыздар). Тез кері қайтуды қолдаймыз.
6. Contract (тазалау)
Ескі жолдарды кесеміз, ескірген өрістерді/индекстерді/топиктерді «қауіпсіздік кезеңінен» кейін жойамыз.
7. Верификация және ретро
Есеп, метрика, сабақтар, плейбук/чек парақтарын жаңарту.
7) Көші-қон кезіндегі бақылау және SLO
Техникалық SLI: p50/p95/p99, error rate, retry/timeout, utilization, lag CDC, кезектердің тереңдігі.
Бизнес-SLI: транзакциялардың/конверсиялардың табысы, инварианттар (баланстар, лимиттер, телнұсқалар).
Арнайы белгілер: 'migration _ id', 'phase', 'tenant', 'flag _ state'.
Алерт-күзетшілер: артқы табалдырықтар және қателер, SLO бойынша «авто-тоқта» (abort).
Салыстырмалы панельдер: v1 vs v2, негізгі метриктер бойынша «дельта».
8) Кері шегіну және авариялық сценарийлер
Логикалық кері бұрылу: жалаулар/трафикті артқа бағыттау, backfill қатыру.
Деректер: «өтемақы» (Saga), оқиғалар репликасы, DLQ → бастапқы жүйе.
Құпиялар/кілттер: алдыңғы кілтке/сертификатқа қайтару (dual-key).
DNS/трафик: «кері дрифт» Anycast/ALB, TTL қысқа көшіру терезесіне.
Коммуникациялар: алдын ала келісілген арна және мәртебе форматы.
9) Қауіпсіздік, құпиялылық, комплаенс
Деректерді барынша азайту. Тек қажетті өрістерді тасымалдаймыз; көшірмесіндегі анонимдеу профильдері.
Криптография. «Сымда» және «тыныштықта» шифрлау, KMS ротациясы; кілттермен операциялар журналы.
Уақыт бойынша қатынау. Көші-қон науалары үшін уақытша рөлдер, аяқталғаннан кейін құқықтарды іріктеу.
Іздер. Логтарда/трестерде ПД бүркемелеу, экспортты шектеу.
10) Өзгерістерді және коммуникацияларды басқару
RACI: кім бекітеді, кім орындайды, кім хабардар етіледі.
Freeze-кезеңдер: көші-қон терезесіне релиздерге тыйым салу.
Мәртебелері: T-24h, T-1h, старт, канаринг, cutover, мәреге жету, пост-теңізбен.
Сыртқы әріптестер: үйлесімділік терезелері, келісімшарт хаттары, қамыр құмсалғыш.
11) Runbook үлгілері
11. 1 Backfill (жалған құжат)
for batch in paginate(ids, size=10_000):
try:
rows = read_v1(batch)
upsert_v2 (rows) # idempotently mark_checkpoint (batch. end)
sleep(jitter_ms(100..300))
except Throttle:
sleep (5s) # backpressure respect except Fatal as e:
alert("backfill-failed", e, context=batch)
abort_if_needed()
11. 2 Тексерушілік (снэпшот/іріктеме)
sample = random_ids(n=10_000, stratify=tenant,timestamp)
v1 = fetch_v1(sample); v2 = fetch_v2(sample)
assert schema_compatible(v2)
assert key_invariants_hold (v1, v2) # sum, statuses, versions mismatch_rate = diff (v1, v2). rate()
abort_if(mismatch_rate > 0. 0001)
11. 3 Оқуларды ауыстыру
flag. enable("read_from_v2", segment="tenants: cohort_A")
monitor(30m)
if SLO_ok(): expand_segment()
else: rollback_segment()
12) Қарсы үлгілер
expand-migrate-contract орнына «үлкен жарылыс».
CDC жоқ Backfill → мәңгілік қуып жету және дрейф.
Сәйкессіздіктің жоқтығы → қосарланған/лас деректер.
Скрипттерсіз қол қадамдары → адам қателері.
Дашбордсыз/күзетшісіз көші-қон → «соқыр ұшу».
Расталмаған кері қайтару → кері қайтару қажет болғанда жұмыс істемейді.
Тұтынушыларды елемеу (BI/серіктестер) → «сынған» есептер/интеграция.
13) Сәулетшінің чек-парағы
1. Көші-қон мақсаты, шекаралары, түрі және нәтиже инварианттары анықталды ма?
2. Тұтынушылар мен келісімшарттардың картасы жасалды ма, үйлесімділік тестілері жасыл ме?
3. Дашбордтар, алерттар, 'migration _ id', SLO/guardrails таңбалары дайындалды ма?
4. shadow және/немесе dual-write, backfill іске асырылды ма?
5. Жұмыс істеп жатқан rollback runbook бар ма?
6. Терезе/үйлестіру/коммуникациялар келісілген, freeze қосылған ба?
7. Канарингпен және кеңейту/тоқтату өлшемдерімен қадамдық жоспар дайын ба?
8. Қауіпсіздік/комплаенс: кілттер, рұқсаттар, PII-санитария?
9. Құжаттама/SDK/элементтер сол релиздік циклда жаңартылады ма?
10. Аяқталғаннан кейін пост-теңізбен және плейбукті жаңарту жоспарланған ба?
Қорытынды
Көші-қон плейбуктері - бұл тәуекелді басқарудың архитектуралық практикасы: ұсақ қайтарылатын қадамдар, мөлдір метриктер, дайын кері қайту және «expand-migrate-contract» тәртібі. Сипатталған үлгілерді басшылыққа ала отырып, сіз схемаларды, деректерді, сервистерді және аймақтарды бизнестің инварианттары мен пайдаланушылардың сенімін сақтай отырып, бос тұрып және күтпеген жерден көшіріп аласыз.