Kölegeli trafik we deňeşdirme
1) Şadow-traffigi näme we näme üçin zerur?
"Shadow-traffic" (şeýle hem traffic mirroring/dark launch) - hakyky haýyşlaryň/wakalaryň ulanyjylara täsir etmezden önümçilik wersiýasy bilen paralel hyzmatyň täze wersiýasyna howpsuz "geçmegi". Täze wersiýanyň netijeleri müşderä gaýtarylmaýar we daşarky saýd-effektleri öndürmeýär, ýöne deňeşdirme ulgamyna ýygnalýar.
Esasy maksatlar:- Şemalaryň, şertnamalaryň, işewürlik logikasynyň laýyklygyny barlamak.
- Öndürijilige baha bermek: gizlinlik, hakyky ýük astynda durnuklylyk.
- Dreýfiň detekasiýasy: jogaplardaky, paýlanyşdaky, ýalňyşlyklaryň ýygylygyndaky tapawutlar.
- Kanareýanyň çykmagyna taýýarlyk: traffigiň hakyky üýtgemeginden öň töwekgelçiligi azaltmak.
- Ýadro/algoritmleri täzeden ýazmak, DB/nagt göçmek, başga bir rantaime/SDK geçmek, daşarky API üpjün edijisini üýtgetmek.
2) Şadow-traffigiň binagärlik nusgalary
2. 1 L7-proxy/şlýuz (HTTP/gRPC)
Proxy soragy kabul edýär → köne wersiýadan söweş jogabyny berýär → "kölege" haýyşyň göçürmesini asinhron görnüşde görkezýär.
Sinhron API üçin amatly.
Aýna paýyny/süzgüçini dolandyrmak: ýolda, giderde, ulanyjyda, tenantda.
yaml route:
route:
cluster: prod-v1 request_mirror_policies:
- cluster: shadow-v2 runtime_fraction:
default_value:
numerator: 10 # 10% denominator: HUNDRED trace_sampled: true
Mysal (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 Waka tekerleri (Kafka/Akymlar)
Topik derejesinde tee:- Prodýuser adatdakysy ýaly ýazýar → prod konsumerleri okaýarlar.
- Şol bir wagtyň özünde "kölege" (shadow-pipeline) aýratyn sandyk gutusyna şol bir akymy okaýar.
Saýlawlar: MirrorMaker/Replicator, dual-write (seresap), "source → prod + shadow".
2. 3 Replayer (ýazgy/çalmak)
Hakyky haýyşlaryň/söwdalaryň suraty (PCAP/NGINX access, gRPC taps) → gözegçilik edilýän tizlikde "kölege" oýnamak.
2. 4 "Sintetiki kölege"
Prod-loglardan ýükleýiş profiliniň döredilmegi, gizlinlik çäklendirmelerinde peýdalydyr.
3) Ýagdaýy we saýd täsirlerini izolirlemek
Altyn düzgün: kölege daşky dünýäni üýtgetmeýär.
Reid-onli DB/keshe ýa-da aýratyn sandyk gutusyna girmek (snapshot/replika).
Çykýan täsirleri gadagan etmek: tölegler, hatlar, toplar, webhooks → stub/blackhole/record-only.
Toparlaryň/POST: Şadow derejesindäki görelde asyl nusgasynyň gaýtalanmagy hökmünde hasaba alynmaly däldir.
PII/syrlary gizlemek, synag üpjün edijileriniň bellikleri.
Mysal: aýnada gizlemek
yaml shadowFilter:
headers:
redact:
- Authorization
- X-Api-Key body:
jsonPaths:
- replace "$ .email" # with token
- "$.card. number"
4) Semplemek strategiýalary we howpsuz ýük
Traffigiň paýy: başda 1-10%; eger v2 býujete laýyk gelýän bolsa, ony artdyrmak.
Saýlama ölçegleri: ugur, ulanyjy, haýyşnamanyň ululygy, amalyň görnüşi boýunça (GET-ler has ygtybarly).
Perf-býudjet: aýna şöhlelendirmek p95/p99 söweş hyzmatyny artdyrmaly däldir. Kölegeler hemişe asinkron.
Back-pressure: shadow-zynjyry gyzdyrylanda - söweş haýyşlary däl-de, kölegeleri süpürmek.
Wagt: gündelik we iň ýokary nagyşlary ýapmak üçin azyndan 24-72 sagat.
5) Netijeleri deňeşdirmek: usullar we derejeler
5. 1 Deňeşdirme derejeleri
1. Baýt diff: Jogap/Waka bedeni birin-birin. Ýönekeý, ýöne näzik (wagtlar, açar tertibi).
2. Semantik diff: meýdanlary kadalaşdyrýarys we tertipleşdirýäris, epemeridleri äsgermezlik edýäris (traceId, timestamps, counters).
3. Işewür-inwariantlar: şol bir mukdarlar, statuslar, sanlar, serhetler.
4. Statistiki derňew: metrleriň paýlanyşy gabat gelýärmi? (p50/p95, KS-synag, χ kategoriýalara ²).
5. 2 Deňeşdirmek syýasaty
Maskalar/ignore-meýdan sanawlary (mysal üçin, 'updatedAt', 'etag').
Takyklygy: sanlar üçin mutlak/deňeşdirme ýalňyşlygy (mysal üçin ± 1e-6).
Rugsat (tolerance bands): "bahadaky tapawut ≤ 0. 01", "ýalňyşlyklar + 0-dan köp bolmaly däldir. Prod bilen deňeşdirilende 1%".
Komparatoryň ýalan resminamasy
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 Soragy deňeşdirmek jogap
Correlation-ID hökmanydyr.
Span linklemek: shadow-track söweş linkini alýar.
6) Synlamak we deňeşdirmek artefaktlary
Metrikler:- `shadow_requests_total{route,...}`
- `shadow_discrepancies_total{type=byte|semantic|invariant}`
- `shadow_error_ratio` и `shadow_slo_breach_total`
- Perf: 'shadow _ latencies _ ms {p50, p95, p99}'
- Diff ýazgylary: açarlar boýunça ykjam JSON-delta.
- Hasabat: Top-N tapawutlardan gündelik hasabat, marşrutlar/tenantlar boýunça ýylylyk kartalary.
- UI "diff explorer": CSV-de görnüşi, ugry, meýdany, eksporty boýunça süzgüçler.
7) Aýratyn ýagdaýlar we inçelikler
7. 1 Yzygiderlilik we yzygiderlilik
Şadow-soraglar soň/has ir gelip biler; wersiýalaryna/sagatlaryna (Lamport/vector) ýa-da penjirelerine görä kadalaşdyryň.
Read-after-write: sinhron replikasyz read-replica kölegesi dürli jogaplar berer - lag-penjireler arkaly deňeşdiriň.
7. 2 Nagt pul/teklipler
Prod we shadow kesişlerini garyşdyrmaň.
ML/maslahat berijiler üçin onlaýn metrikleri we awtonom metrikleri aýratyn deňeşdiriň; giriş alamatlaryny yzarlaň.
7. 3 Daşarky üpjün edijiler
Müşderileri record-only/stub-re modeime öwüriň.
Hasaplaşyk hyzmatlary üçin (salgytlar, nyrhlar) - iki tarap üçin maglumat kitapçalarynyň suratyny düzüň.
8) Kanareýalar bilen deňeşdirme/gök-ýaşyl
Shadow: ulanyjylar üçin töwekgelçilik ýok, ýöne hakyky sad effektleri ýok; logika we perf üçin ajaýyp.
Canary: täze wersiýadan hakyky jogaplaryň az göterimi; taýýar yza gaýdyp gelmek we SLA strategiýasyny talap edýär.
Gök-ýaşyl: tassyklamadan soň derrew geçiş; Shadow köplenç onuň öňünde ulanylýar.
9) Giriş meýilnamasy (GitOps stili)
1. Maksatlar we metrikler: tapawut üçin haýsy SLO-ny barlaýarys.
2. Tracking: Correlation-ID, paýlanan ýol linkleri.
3. Proxy sazlamak: mirror-syýasat, sempleme, redaction.
4. Izolýasiýa: gum gutusy DB/keş, zyýanly düwmeler, synag açarlary.
5. Komparator: kadalaşma, ignore-maplar, inwariantlar, hasabatlar.
6. Iş meýilnamasy: 1-5% -den başlamak, ýaşyl metrlerde 20-50% -e çenli ösüş.
7. Syn edilmegi: daşbordlar "tapawutlar/perf/göwrüm".
8. Çykyş ölçegleri: "0 kritiki tapawut 48 sagat", "ýalňyşlyklar proddan erbet däl", "perf ± 5%".
9. canary geçişi: ygtybarly paýy we awtomatiki gard düzgünleri bilen hakyky jogaplary goşmak.
10) Konfigurasiýa mysallary
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 (eskiz)
text source-topic -> prod-consumer-group
-> shadow-consumer-group (isolated sink/db)
10. 3 Deňeşdirme düzgünleri (yaml-syýasat)
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) Anti-patternler
Şadow: kölegeden hakyky tölegleri/habarnamalary ýazýar.
Umumy kesiş/umumy nobatlar: çapraz täsir we hapalanma.
Kadalaşmagyň ýoklugy: sagat/açar tertibi sebäpli baýt diffleri "gyzarýar".
Gidişde gaty ýokary göterim: perf prod.
Uzak "baky kölege": ikinji ulgam aýratyn ýaşaýar we hakykat bilen tapawutlanýar.
12) Kölegeli re modeimi işe girizmegiň barlag sanawy
- Proxy paýy we redaction bilen mirror gurýar.
- Kölege izolirlenen: DB/nagt pul/daşarky integrasiýa - diňe readonly/stub.
- Correlation-ID hemme ýerde zyňylar; ýollar çyzylýar.
- Komparator ignore/normalize we invariantlary barlamagy bilýär.
- Tapawutlar we ýükler üçin daşbordlar we alertler.
- Marşrutlar/tenantlar boýunça semplemek; çäkleri we back-pressure.
- "Ýaşyl ýagtylygyň" çäkleri we ölçegleri kesgitlenildi.
- canary/blue-green geçiş meýilnamasy.
13) FAQ
Q: Şadow A/B-den nähili tapawutlanýar?
A: A/B-de iki wersiýa hem ulanyjylara jogap berýär (bölünen synag), Şadowda täze wersiýa ulanyja täsir etmeýär - onuň jogaplary diňe seljerilýär.
Q: POST/PUT goýup bolarmy?
A: Hawa, eger täsirleriň izolýasiýasy (stub) we idempotentlik kepillendirilen bolsa. Köplenç GET-den başlaýarlar, soň giňeldýärler.
Q: Elementleriň tertibi kesgitlenmedik bolsa, jogaplary nädip deňeşdirmeli?
A: Deňeşdirmezden ozal durnukly açar bilen sortlaň ýa-da köp/açar bilen deňeşdiriň.
Q: BD-iň yza süýşürilmegi bilen näme etmeli?
A: "Deňeşdirme penjirelerini" we maglumat kitaplarynyň snapshotlaryny giriziň; netijeleri "diwar" däl-de, wersiýalara görä jemläň.
14) Netijeler
Şadow-traffik "önümçiligiň agyrysyz repetisiýasy": hakyky ýük, ulanyjylar üçin nol töwekgelçilik, gapma-garşylyklaryň jikme-jik seljermesi. Üstünlik izolýasiýa, dogry sempleme, hil komparatory we syn edilmegi bilen kesgitlenýär. Teklip edilýän meýilnama laýyklykda, canary/blue-green relizlerine ynamly ýol açýan we arhitekturanyň ewolýusiýasyny çaltlaşdyrýan gaýtalanýan tejribe alarsyňyz.