Миграция плейбуктары
1) Миграциянын классификациясы
DD схемалар: кошуу/динамиктер өзгөртүү, индекстер, шардана, ачкычтар түрүн өзгөртүү.
Маалыматтар: массалык backfill/тазалоо, нормалдаштыруу, retenshn/архивдөө.
Сервистер жана API: эндпоинттерди алмаштыруу, версиялоо, контракттарды кайра иштетүү.
Кезектер/дөңгөлөктөр: топиктерди жылдыруу, партиялаштыруу ачкычтарын өзгөртүү, окуялардын форматы.
Инфраструктура: жаңы кластерге өтүү/K8s/булут/аймак, сырларды өзгөртүү/KMS.
Сактоо жана аналитика: кыймылдаткычын өзгөртүү (OLTP/OLAP), datacets формат/партиялаштыруу.
Коопсуздук/комплаенс: ачкычтарды айлантуу, шифрлөө, маалыматтарды гео-локализациялоо.
2) Ийгиликтүү миграциянын принциптери
1. Expand → Migrate → Contract. Адегенде схеманы/жүрүм-турумун кеңейтип (шайкеш), андан кийин маалыматтарды/трафикти өткөрүп, андан кийин эскисин алып салабыз.
2. Shadow & Dual. Көмүскө текшерүү (shadow read/write) жана валидация үчүн кош жазуу.
3. Фича-желектер жана "кызыл баскычы". Тез өчүрүү, этап-этабы менен күйгүзүү (persentile/тенанттар/региондор).
4. Демпотенттүүлүк жана кайталануучулук. Скрипттерди жана тапшырмаларды эч кандай терс таасирлери жок кайра баштоого болот.
5. өзгөрүүлөргө чейин байкоо. Dashbord/алдын ала Алерт, Логин/соода-жылы миграция маркерлер.
6. Артка кайтаруу документтештирилген. Runbook кайра эле деталдуу, ошондой эле план алдыга.
7. Мини-партия жана тыныгуу. Биз SLI жана бизнес инварианттарды текшерүү менен чакан бөлүктөрүндө көчүп.
3) Инвентаризация жана көз карандылыкты талдоо
Керектөөчүлөрдүн картасы: кызматтар, джобдор, отчеттор, тышкы өнөктөштөр, BI/ETL, вебхактар.
Келишимдер жана схемалар: API/окуялардын версиялары, backward/forward шайкештиги.
Access/Secrets: ким окуйт/жазган, кайда кэши/реплика.
Домендин инварианттары: уникалдуулук, тең салмактуулук, теңдештик, отчеттук күнү.
Көлөмү/ылдамдыгы: маалыматтар көлөмү, RPS, жогорку терезелер, RPO/RTO.
4) Канондук Playbook шаблон (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 DD схемалар (RDBMS/NoSQL)
Кошуу - өзгөртүү жок. Жаңы nullable мамычалар/индекстер → код эски жана жаңы окуйт.
Онлайн кайра куруу. Онлайн индекстерди/параллелдүү DDL колдонуңуз.
Сериалдаштыруунун версиялары. JSON/Proto/Euro колонкаларында payload чыгаруу.
Ачкычтарды көчүрүү. PK өзгөргөндө - убакыт шайкештик таблицасы + триггер/CDC.
5. 2 Маалыматтар (backfill/cleanup)
CDC + backfill. Адегенде өзгөртүү агымы (артта калбоо үчүн), андан кийин пакеттик backfill.
Партиялар жана мөөнөтү. Лагдарды, чекпойнтторду жана кайра ишке киргизүүнү көзөмөлдөө менен чакан батчи.
Идемпотенттик апдейттер. Upsert табигый ачкычтары/версиялары боюнча.
5. 3 Окуялар жана кезектер
Окуялардын версиясы. 'event _ type @vN', консультанттар бейтааныш талааларды четке кагышат.
Топиктердин кыймылы. Double жарыялоо, керектөөчүлөр турукташтыруу үчүн эки окуу; андан кийин эскисин "кесип".
Partition key. Ачкычтын миграциясы - шайкештик жана демпотенттик картасы менен кайра басып чыгаруу аркылуу.
5. 4 Кызматтар жана API
Blue/Green/Canary. Бассейн жылытуу, жарым-жартылай трафик, тез артка кетүү.
Фича желектери. Тенанттар/региондор/пайыздар боюнча, байкалган киргизүү.
Контракттар. CDC келишимдер жана шайкештик тесттер - которууга чейин.
5. 5 Региондор/Клаус
Гео-кош жазуу. Маалыматтар эки аймакка жазылат; окуу - жакын.
State transfer. Сүрөт + репликация; "кызыл сызык" RPO, DNS/Anycast жүктөө.
Юрисдикциялар. Макулдук/маалыматтарды локализациялоо, топтомдорду алып салуу үчүн "тыюу салынган" тизмелер.
6) Аткаруу фазалары (деталдуу)
1. Даярдоо
Dashbordes, Алерт, лимиттер, Ficha-желектери, калыбына келтирүү сыноо менен backaps, стейдж боюнча чуркоо.
2. Көлөкө (көмүскө текшерүү)
Колдонуучуларга таасир этпестен жаңы системага кайрылууларды/жазууларды чагылдыруу. Биз жоопторду/шарттарды салыштырып жатабыз.
3. Dual-write / Dual-read
Биз эки тарапка жазабыз. Окуу - акырындык менен жаңы системага которуу. Карама-каршылыктардын логдору талданат.
4. Backfill
Тарыхый маалыматтарды партияларга жүктөйбүз. Биз CDC лагын көзөмөлдөйбүз, storidge/кэш жүктү көзөмөлдөйбүз.
5. Cutover
Сегменттер боюнча канарим (тенанттар/региондор/пайыздар). Тез артка кайтарууну колдойбуз.
6. Contract
Эски жолдорду кесип, эскирген талааларды/индекстерди/топиктерди "коопсуздук мезгилинен" кийин алып салабыз.
7. Текшерүү жана ретро
Отчет, метрика, сабактар, playbook/чек барактарын жаңыртуу.
7) Миграция учурунда байкоо жана SLO
Техникалык SLI: p50/p95/p99, rate, retry/timeout, utilization, lag CDC, кезек тереңдик.
Бизнес-SLI: транзакциялардын/конверсиялардын ийгилиги, инварианттар (баланстар, лимиттер, дубликаттар).
Атайын белгилер: 'migration _ id', 'phase', 'tenant', 'flag _ state'.
Alerty күзөтчүлөр: куйругу жана ката босоголор, "auto-stop" (abort) SLO боюнча.
Салыштырма панелдер: v1 vs v2, негизги көрсөткүчтөр боюнча "дельта".
8) Артка жана өзгөчө жагдайлар
Логикалык артка: желектер/артка жол багыттоо, backfill тоңдуруп.
Маалыматтар: "ордун толтуруу" (Saga), окуялар реплика, DLQ → баштапкы системасы.
Сырлар/ачкычтар: мурунку ачкычка/сертификатка кайтуу (эки-негизги).
DNS/Traffic: "тескери Drift" Anycast/ALB, TTL кыска көчүрүү терезеде.
Байланыш: алдын ала макулдашылган канал жана статус форматы.
9) Коопсуздук, купуялык, комплаенс
Маалыматтарды минималдаштыруу. Биз керектүү талааларды гана өткөрүп; анонимдөө профилдери көчүрмөдө.
Криптография. "Зымдарда" жана "тынч" шифрлөө, KMS ротациясы; ачкычтар менен операциялардын журналы.
Убакыт жеткиликтүүлүгү. Миграциялык джобдор үчүн убактылуу ролдор, аяктагандан кийин укуктарды тандоо.
Изи. Блогдордо/соодада PD жашыруу, экспортту чектөө.
10) Өзгөрүүлөрдү жана коммуникацияларды башкаруу
RACI: ким ырастайт, ким аткарат, ким маалымдалат.
Freeze-periods: көчүрүү терезесине тиешелүү эмес релиздерди тыюу.
Статустар: T-24h, T-1h, баштоо, канаринг, кесүү, аяктоо, пост-деңиз.
Тышкы өнөктөштөр: шайкештик терезелер, келишим кат, сыноо Sandbox.
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 Текшеръъчъ (Snapshot/тандоо)
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 → түбөлүк кууп жана drift.
Демпотенттиктин жоктугу → дубль/кир маалыматтар.
скрипт жок кол кадамдар → адам каталар.
Дашбордсуз миграция → "сокур учуу".
Тастыкталбаган артка → артка керек болгондо иштебейт.
Керектөөчүлөрдү четке кагуу (BI/өнөктөштөр) → "сынган" отчеттор/интеграция.
13) Архитектордун чек тизмеси
1. Максаты, чек аралары, миграциянын түрү жана натыйжанын инварианттары аныкталдыбы?
2. Керектөөчүлөрдүн жана келишимдердин картасы түзүлдү, шайкештик тесттери жашыл?
3. Даярдалган дашборддор, алерттер, 'migration _ id', SLO/guardrails белгиленген?
4. Ишке shadow жана/же dual-write, backfill idempotenten?
5. Бар практикалык rollback runbook, backup калыбына келтирүү текшерүү?
6. Терезе/координация/байланыш макулдашылган, freeze камтылган?
7. Канаринг жана кеңейтүү/токтотуу критерийлери менен кадам планы даярбы?
8. Коопсуздук/комплаенс: ачкычтар, жетүү, PII-санитария?
9. Документация/SDK/спекла ошол эле релиздик айлампада жаңыланабы?
10. Пост-деңиз жана плейбук аяктагандан кийин жаңылоо пландаштырылган?
Корутунду
Миграциянын плейбуктары - бул тобокелдикти башкаруунун архитектуралык практикасы: майда артка кайтарылуучу кадамдар, ачык-айкын метриктер, даяр артка кайтаруу жана "expand-migrate-contract" дисциплинасы. Сүрөттөлгөн шаблондорду ээрчип, сиз схемаларды, маалыматтарды, кызматтарды жана региондорду токтоп калбастан жана күтүлбөгөн жерден, бизнестин инвариантын жана колдонуучулардын ишенимин сактап каласыз.