GH GambleHub

Shadow-трафик және салыстыру

1) Shadow-трафик дегеніміз не және ол не үшін қажет

Shadow-трафик (сондай-ақ traffic mirroring/dark launch) - бұл пайдаланушыларға әсер етпейтін өндірістік нұсқамен қатар сервистің жаңа нұсқасына нақты сұрауларды/оқиғаларды қауіпсіз «айдап өту». Жаңа нұсқаның нәтижелері клиентке қайтарылмайды және сыртқы сайд-эффектілерді шығармайды, тек салыстыру жүйесіне жиналады.

Негізгі мақсаттар:
  • Схемалардың, келісімшарттардың, бизнес-логиканың үйлесімділігін тексеру.
  • Өнімділікті бағалау: жасырындылық, нақты жүктемедегі тұрақтылық.
  • Дрейфтің детекциясы: жауаптардағы, таратулардағы, қателер жиілігіндегі айырмашылықтар.
  • Канареялық релиздерге дайындық: трафикті нақты ауыстырып қосу алдында тәуекелді төмендету.
Қашан қолдану керек:
  • Ядроны/алгоритмдерді, ДБ/кэштерді көшіру, басқа рантаймға/SDK ауысу, сыртқы API провайдерін ауыстыру.

2) Shadow-трафиктің сәулеттік үлгілері

2. 1 L7-прокси/шлюз (HTTP/gRPC)

Прокси сұрауды қабылдайды → ескі нұсқасынан жауынгерлік жауап береді → сұраудың көшірмесін «көлеңкеге» бейсинхронды түрде бейнелейді.

Синхронды API үшін қолайлы.
Айналау үлесін/сүзгісін басқару: жол, хедер, пайдаланушы, тенант бойынша.

Мысал (Envoy):
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 оқиды.
  • Сонымен қатар «көлеңке» (shadow-pipeline) сол ағынды жеке құмсалғышқа оқиды.

Параметрлері: MirrorMaker/Replicator, dual-write (абайлаңыз), «source → prod + shadow» бриджілері.

2. 3 Replayer (жазу/ойнату)

Нақты сұрауларды/трестерді (PCAP/NGINX access, gRPC taps) → бақыланатын қарқынмен «көлеңкеге» ойнату.

2. 4 «Синтетикалық көлеңке»

Сынамалардан жүктеме профилін генерациялау + шеткі жағдайларды қосымша толтыру фазасы - құпиялылықты шектеу кезінде пайдалы.

3) Жай-күйді және сайд-эффектілерді оқшаулау

Алтын ереже: көлеңке сыртқы әлемді өзгертпейді.

Рид-онли ДБ/кэшке немесе жеке құмсалғышқа қол жеткізу (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-тер қауіпсіз).
Перф-бюджет: айналау жауынгерлік сервистің 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').
Дәлдігі: сандар үшін абсолютті/салыстырмалы қателік (мысалы, ± 1е-6).
Рұқсаттар (tolerance bands): "бағадағы айырма ≤ 0. 01», «қателер + 0 артық емес. prod қатысты 1%".

Компаратордың жалған құжаты

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 linkovka: shadow-трасса жауынгерлік link алады.

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}'
  • Диффф логтары: кілттер бойынша ықшам 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) Канареялық/blue-green

Shadow: пайдаланушылар үшін нөлдік тәуекел, бірақ нақты сайд әсерлері жоқ; логика мен перф үшін өте жақсы.
Canary: жаңа нұсқадан нақты жауаптардың аз пайызы; дайын қайтару стратегиясын және SLA талап етеді.
Blue-green: валидациядан кейін дереу ауыстырып қосу; Shadow көбінесе оның алдында қолданылады.

9) Енгізу жоспары (GitOps-стиль)

1. Мақсаттар мен өлшемдер: қандай инварианттар мен рұқсаттарды тексереміз, қандай SLO айырмашылықтарға.
2. Трассировка: Correlation-ID, бөлінген трейс-линкалар.
3. Прокси теңшеу: mirror саясаты, семплеу, redaction.
4. Оқшаулау: құмсалғыш ДБ/кэш, жанама тұйықтағыштар, қамыр кілттері.
5. Компаратор: қалыпқа келтіру, ignore-маптар, инварианттар, есептер.
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 сыртқа жазады: көлеңкеден нақты төлемдер/хабарламалар.
Жалпы кэш/жалпы кезектер: айқаспалы әсер ету және ластану.
Қалыпқа келтірудің болмауы: сағат/кілттердің тәртібіне байланысты байттық диффуздар «қызарады».
Өте жоғары пайыз: перф prod деградациясы.
Ұзақ «мәңгілік көлеңке»: екінші жүйе бөлек өмір сүреді және шындықпен бөлінеді.

12) Shadow режимін іске қосу

  • Прокси үлесімен mirror және redaction орнатылған.
  • Көлеңке оқшауланған: ДБ/кэштер/сыртқы интеграциялар - тек readonly/stub.
  • Барлық жерде Correlation-ID лақтырылады; трассировкалар сызылады.
  • Компаратор ignore/normalize және инварианттарды тексере алады.
  • Айырмашылықтар мен жүктемеге арналған дашбордтар мен алерталар.
  • Бағыттар/тенанттар бойынша тұқымдастыру; лимиттер және back-pressure.
  • «Жасыл жарық» шақтамалары мен өлшемдері анықталды.
  • canary/blue-green көшу және қайтару жоспары.

13) FAQ

Q: Shadow A/B айырмашылығы қандай?
A: A/B-де екі нұсқа да пайдаланушыларға жауаптар қайтарады (сплит-эксперимент), Shadow-да жаңа нұсқа пайдаланушыға әсер етпейді - оның жауаптары тек талданады.

Q: POST/PUT қоюға бола ма?
А: Иә, егер зиянды оқшаулау (stub) және демпотенттілік кепілдендірілген болса. Жиі GET бастап, одан кейін кеңейтеді.

Q: Егер элементтердің тәртібі белгіленбесе, жауаптарды қалай салыстыруға болады?
A: Салыстыру алдында тұрақты кілт бойынша сұрыптаңыз немесе көптік ретінде/кілттер бойынша салыстыру.

Q: ДБ репликаларының кідірістерімен не істеу керек?
А: «Салыстыру терезелерін» және анықтамалықтардың снапшоттарын енгізіңіз; нәтижелерді «қабырғамен» емес, нұсқалар бойынша біріктіріңіз.

14) Қорытынды

Shadow-трафик - бұл «өнімнің ауыртпалықсыз дайындығы»: нақты жүктеме, пайдаланушылар үшін нөлдік тәуекел, айырмашылықтарды егжей-тегжейлі талдау. Табыс оқшаулаумен, дұрыс тұқымдастырумен, сапалы компаратормен және бақылаушылықпен анықталады. Ұсынылған жоспарды орындағанда, сіз canary/blue-green релиздеріне сенімді түрде жол ашатын және архитектураның эволюциясын жылдамдататын ойнатылатын тәжірибеге ие боласыз.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.