Көлөкө жол жана салыштыруу
1) Shadow Traffic деген эмне жана эмне үчүн керек
Shadow-traffic (ошондой эле traffic mirroring/dark launch) - бул колдонуучуларга таасир этпестен, продюсерлик версиясы менен катар кызматтын жаңы версиясына реалдуу суроо-талаптардын/окуялардын коопсуз "прогону". Жаңы версиянын натыйжалары кардарга кайтарылбайт жана тышкы сайд эффекттерин чыгарбайт, бирок салыштыруу системасына чогултулат.
Негизги максаттары:- Шайкештикти текшерүү: схемалар, контракттар, бизнес-логика.
- Аткаруу баалоо: жашыруун, реалдуу жүк боюнча туруктуулук.
- Дрейфтин детекциясы: жооптордогу, бөлүштүрүүдөгү, каталардын жыштыгындагы айырмачылыктар.
- Канарейка релиздерине даярдык: чыныгы трафикти алмаштыруудан мурун тобокелдикти азайтуу.
- Ядро/алгоритмдерди кайра жазуу, DD/кэш көчүрүү, башка рантайм/SDK өтүү, тышкы API провайдерди өзгөртүү.
2) архитектуралык Shadow трафик үлгүлөрү
2. 1 L7-прокси/шлюз (HTTP/gRPC)
Proxy өтүнүчүн кабыл алат → эски нускасынан жооп берет → "көлөкө" өтүнүчүнүн көчүрмөсүн асинхрондук чагылдырат.
синхрондуу API үчүн ылайыктуу.
Күзгү үлүшүн/чыпкасын башкаруу: жолдо, хедер, колдонуучу, тенант.
yaml route:
route:
cluster: prod-v1 request_mirror_policies:
- cluster: shadow-v2 runtime_fraction:
default_value:
numerator: 10 # 10% denominator: HUNDRED trace_sampled: true
Мисал (Nginx):
nginx location /api/ {
proxy_pass http://prod_v1;
mirror/shadow; # request copy
}
location = /shadow {
internal;
proxy_pass http://shadow_v2; # answer ignored
}
2. 2 шиналар окуялар (Kafka/агымдары)
Топик деъгээлинде tee жүргүзүлөт:- Продюсер адаттагыдай эле жазат → prod consumers окуп.
- Параллель "көлөкө" (shadow-pipeline) өзүнчө кум кутусуна ошол эле агымды окуйт.
Параметрлери: MirrorMaker/Replicator, dual-write (этият), бридж "source → prod + shadow".
2. 3 Replayer (жазуу/ойнотуу)
Чыныгы суроо-талаптарды/соодаларды (PCAP/NGINX access, gRPC taps) → контролдук темп менен "көлөкө" ойнотуу.
2. 4 "Синтетикалык көлөкө"
Прод-логтордон жүктөө профилин түзүү + четки учурларда кошумча толтуруу фазасы - купуялуулукту чектөөдө пайдалуу.
3) Обочолонуу абалы жана side таасирлери
Алтын эреже: көлөкө тышкы дүйнөнү өзгөртпөйт.
Reed-онли DD/кэш же өзүнчө Sandbox кирүү (snapshot/реплика).
Чыгуучу терс таасирлерге тыюу салуу: төлөмдөр, каттар, мылтыктар, webhooks → stub/blackhole/record-only.
Команда/POST деъгээлинде боштук: Shadow түп нускасын кайталап катары катталууга тийиш эмес.
PII/сырларды, тесттик провайдерлердин белгилерин жашыруу.
Мисал: күзгүгө жашырып
yaml shadowFilter:
headers:
redact:
- Authorization
- X-Api-Key body:
jsonPaths:
- replace "$ .email" # with token
- "$.card. number"
4) Семплирлөө стратегиялары жана коопсуз жүк
Трафиктин үлүшү: башталышында 1-10%; v2 бюджетке туура келсе көбөйтүлсүн.
Тандоо критерийлери: маршрут, колдонуучу, суроо-талаптын өлчөмү, операциянын түрү боюнча (GET-тер коопсуз).
Perf-бюджет: күзгү аскердик кызмат p95/p99 көбөйтүүгө тийиш эмес. көлөкө дайыма асинхрондук болуп саналат.
Back-pressure: shadow-чынжыр ысып жатканда - күжүрмөн эмес, көлөкө чачуу.
Убакыт: күнүмдүк жана жогорку үлгүлөрүн жабуу үчүн, жок эле дегенде, 24-72 саат.
5) натыйжаларын салыштыруу: ыкмалары жана деңгээл
5. 1 Салыштыруу деңгээл
1. Байт Дифф: жооп/окуя бир-бир орган. Жөнөкөй, бирок морт (таймстамптар, ачкычтардын тартиби).
2. Семантикалык дифф: талааларды нормалдаштыруу жана сорттоо, эпемериддерди (traceId, timestamps, counters) этибарга албоо.
3. Бизнес инварианттар: ошол эле суммалар, статустар, сандар, чек аралар.
4. Статистикалык талдоо: метриктердин бөлүштүрүлүшү дал келеби? (p50/p95, KS-тест, χ ² категориялык).
5. 2 Салыштыруу саясаты
Маскалар/ignore-талаа тизмелери (мисалы, 'updatedAt', 'etag').
Тактык: сандар үчүн абсолюттук/салыштырмалуу ката (мисалы, ± 1e-6).
Tolerance bands: "баанын айырмасы ≤ 0. 01", "каталар + 0 ашык эмес. 1% prod салыштырмалуу".
Компаратордун псевдо-коду
pseudo compare(prod, shadow, policy):
a = normalize(prod, policy)
b = normalize(shadow, policy)
diffs = deepDiff(a, b, ignore=policy. ignore, floatTol=policy. floatTol)
invariants_ok = checkInvariants(a, b, policy. invariants)
return Result(diffs, invariants_ok)
5. 3 суроо-жооп салыштыруу
Милдеттүү Correlation-ID (көлөкөгө ыргытып).
Span Linking: shadow-трек согуш үчүн шилтемени алат.
6) Байкоо жана салыштыруу артефакттары
Метрикасы:- `shadow_requests_total{route,...}`
- `shadow_discrepancies_total{type=byte|semantic|invariant}`
- `shadow_error_ratio` и `shadow_slo_breach_total`
- Перф: 'shadow _ latencies _ ms {p50, p95, p99}'
- Diff Логи: ачкычтар боюнча компакт JSON-дельта.
- Отчеттуулук: топ-N айырмачылыктар менен күнүмдүк отчет, маршруттар/тенанттар боюнча жылуулук карталары.
- UI "diff explorer": түрү боюнча чыпкалар, жол, талаа, CSV экспорт.
7) Өзгөчө учурлар жана кылдат
7. 1 ырааттуулук жана консистенттүүлүк
Shadow-суроолор кийин/мурда келиши мүмкүн; версиялары/сааттары (Lamport/vector) же терезенин жөндөмдүүлүктөрү боюнча нормалдаштырыңыз.
Read-after-write: синхрондуу репликациясыз read-replica менен көлөкө ар кандай жоопторду берет - лаг терезелери аркылуу салыштырыңыз.
7. 2 Кэш/сунуштар
Prod жана shadow кэштерин аралаштырбаңыз.
ML/сунуштоочулар үчүн онлайн метриканы жана оффлайн метриканы өзүнчө салыштырыңыз; кириш белгилерин drift.
7. 3 Тышкы провайдерлер
record-only/stub-режими менен кардарларды ороп.
Эсептешүү кызматтары үчүн (салыктар, курстар) - эки тарап үчүн маалымдамалардын сүрөтүн жазыңыз.
8) Канар/көк-жашыл менен салыштыруу
Shadow: колдонуучулар үчүн нөлдүк тобокелдик, бирок эч кандай чыныгы side эффекттери; логика жана перф үчүн жакшы.
Canary: жаңы версия реалдуу жооптордун аз пайызы; даяр кайтаруу стратегиясын жана SLA талап кылат.
Blue-жашыл: валидациядан кийин заматта которуу; Көлөкө көбүнчө анын алдында колдонулат.
9) ишке ашыруу планы (GitOps-стили)
1. Максаттары жана параметрлери: айырмачылыктар үчүн SLO кандай инварианттар жана жол-жоболорун текшерүү.
2. Trail: Correlation-ID, бөлүштүрүлгөн Trace Links.
3. Прокси-жөндөө: mirror-саясат, семплирлөө, redaction.
4. Изоляция: кум куту DD/кэш, терс таасирлери, сыноо ачкычтары.
5. Компаратор: нормалдаштыруу, ignore-maps, инварианттар, отчеттор.
6. Жүктөө планы: 1-5% баштап, жашыл метриктер менен 20-50% га чейин өсөт.
7. Байкоо: дашборддор "айырмачылыктар/перф/көлөм".
8. Чыгуунун критерийлери: "0 критикалык айырмачылыктар 48 саат", "каталар prod кем эмес", "Перф ± ичинде 5%".
9. canary өтүү: коопсуз үлүшү жана автоматтык гард эрежелери менен реалдуу жоопторду камтыйт.
10) Конфигурация мисалдары
10. 1 Istio (Traffic Mirroring)
yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService spec:
hosts: ["svc. example"]
http:
- route: [{ destination: { host: svc, subset: v1 } }]
mirror:
host: svc subset: v2 mirrorPercentage:
value: 0. 1 # 10%
10. 2 Kafka Tee (эскиз)
text source-topic -> prod-consumer-group
-> shadow-consumer-group (isolated sink/db)
10. 3 Салыштыруу эрежелери (yaml-саясат)
yaml ignoreFields:
- $.traceId
- $.meta. generatedAt floatTolerance:
default: 1e-6 fields:
$.price: 0. 01 invariants:
- name: "nonNegativeTotal"
expr: "$.total >= 0"
- name: "statusMapping"
expr: "map($.status in ['ok','fail'], true)"
11) Анти-үлгүлөрү
Shadow сыртка жазган: реалдуу төлөмдөр/көлөкөдөн билдирүүлөр.
Жалпы кэш/жалпы кезек: кайчылаш таасири жана булганышы.
нормалдаштыруунун жоктугу: Bayt диффузиясы саат/ачкычтын тартибине байланыштуу "кызарат".
Өтө жогорку пайыздык: perf prod деградация.
Узак "түбөлүк көлөкө": экинчи система өзүнчө жашайт жана чындыктан айырмаланат.
12) Shadow режимин ишке чек тизмеси
- Proxy үлүшү жана redaction менен mirror орнотулган.
- Көлөкө изоляцияланган: DD/кэш/тышкы интеграция - бир гана readonly/stub.
- Бардык жерде Correlation-ID ыргытып; сызыктар сызылат.
- Компаратор ignore/normalize жана инварианттарды текшере алат.
- айырмачылыктар жана жүктөө үчүн Dashbord жана Алерт.
- Жолдор/тенанттар боюнча семплирлөө; лимиттер жана back-pressure.
- "жашыл жарык" жол-жоболору жана критерийлери аныкталган.
- canary/blue-green өтүү планы жана кайра.
13) FAQ
Q: Shadow A/B айырмаланат?
A: A/B эки версиясы тең жоопторду колдонуучуларга кайтарат (сплит-эксперимент), Shadow жаңы версиясы колдонуучуга таасир этпейт - анын жооптору гана талданат.
Q: POST/PUT басып мүмкүн?
A: Ооба, эгерде терс таасирлерди изоляциялоо (stub) жана демпотенттик кепилденсе. Көбүнчө GET менен башталат, андан кийин кеңейтүү.
Q: Эгерде элементтердин тартиби бекитилбеген болсо, жоопторду кантип салыштырууга болот?
A: салыштыруу алдында туруктуу ачкыч боюнча сорттоо же көп/ачкычтар боюнча салыштыруу.
Q: DD сын кечигүү менен эмне кылуу керек?
A: киргизүү "салыштыруу терезелери" жана маалымдамалардын snapshot; "дубал" эмес, версиялар боюнча жыйынтыктарды топтоңуз.
14) Натыйжалары
Көлөкө трафик - бул "азапсыз өндүрүш репетициясы": реалдуу жүк, колдонуучулар үчүн нөлдүк тобокелдик, айырмачылыктарды деталдуу талдоо. Ийгилик изоляция, туура семплөө, сапаттуу компаратор жана байкоо менен аныкталат. Сунуш кылынган планды сактоо менен, сиз ишенимдүү canary/blue-green Releases жолду көпүрө жана архитектуранын өнүгүшүн тездетет ойнотулуучу практика болот.