Gölge trafik ve karşılaştırma
1) Gölge trafik nedir ve neden gereklidir
Gölge trafik (aka trafik yansıtma/karanlık başlatma), kullanıcıları etkilemeden üretim sürümüne paralel olarak gerçek taleplerin/olayların hizmetin yeni bir sürümüne güvenli bir şekilde "çalıştırılması'dır. Yeni sürümün sonuçları müşteriye iade edilmez ve dış yan etki üretmez, ancak bir karşılaştırma sisteminde toplanır.
Temel hedefler:- Uyumluluğu denetleme: şemalar, sözleşmeler, iş mantığı.
- Performans değerlendirmesi: gecikme, gerçek yük altında direnç.
- Sürüklenme tespiti: yanıtlardaki farklılıklar, dağılımlar, hata oranı.
- Kanarya sürümleri için hazırlık: Aslında trafik değiştirmeden önce riski azaltmak.
- Çekirdeği/algoritmaları yeniden yazma, veritabanı/önbelleği taşıma, başka bir çalışma zamanı/SDK'ya geçiş, harici API sağlayıcısını değiştirme.
2) Gölge trafiğinin mimari desenleri
2. 1 L7 proxy/ağ geçidi (HTTP/gRPC)
Vekil, isteği kabul eder, eski sürümden bir savaş yanıtı verir, isteğin bir kopyasını eşzamansız olarak "gölgeye" yansıtır.
Senkron API'ler için uygundur.
Paylaş/yansıtma filtresi kontrolü: yolda, başlık, kullanıcı, kiracı.
yaml route:
route:
cluster: prod-v1 request_mirror_policies:
- cluster: shadow-v2 runtime_fraction:
default_value:
numerator: 10 # 10% denominator: HUNDRED trace_sampled: true
Örnek (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 Etkinlik otobüsleri (Kafka/Threads)
Konu düzeyinde, tee yapılır:- Üretici her zamanki gibi yazıyor - tüketicilerin okuduğu prod.
- Paralel olarak, gölge boru hattı aynı akışı ayrı bir sanal alana okur.
Seçenekler: MirrorMaker/Replicator, dual-write (dikkat), source + prod + shadow bridges.
2. 3 Replayer (kayıt/oynatma)
Gerçek isteklerin/izlerin anlık görüntüsü (PCAP/NGINX erişimi, gRPC muslukları) - kontrollü bir hızda "gölgeye" oynamak.
2. 4 "Sentetik gölge"
Üretim günlüklerinden + doldurma kenar durumlarının fazından bir yük profili oluşturmak, gizlilik kısıtlamaları için yararlıdır.
3) Devlet ve yan etkilerin izolasyonu
Altın kural: Gölge dış dünyayı değiştirmez.
Veritabanına/önbelleğe veya ayrı bir sanal alana (snapshot/replica) Reed-on erişimi.
Giden yan etkilerin yasaklanması: ödemeler, mektuplar, kabartmalar, webhooks - saplama/kara delik/sadece kayıt.
Komut/POST idempotence: Gölge, orijinalin tekrarı olarak kaydedilmemelidir.
PII/gizli maskeleme, test sağlayıcı belirteçleri.
Örnek: aynada maskeleme
yaml shadowFilter:
headers:
redact:
- Authorization
- X-Api-Key body:
jsonPaths:
- replace "$ .email" # with token
- "$.card. number"
4) Örnekleme stratejileri ve güvenli yükleme
Trafik payı: Başlangıçta %1-10; v2 bütçe dahilindeyse artırın.
Seçim kriterleri: rota, kullanıcı, istek boyutu, işlem türü (GET'ler daha güvenlidir).
Perf bütçesi: yansıtma p95/p99 savaş hizmetini artırmamalıdır. Gölge her zaman eşzamansızdır.
Geri basınç: Gölge zinciri aşırı ısındığında, savaş isteklerini değil gölgeyi düşürün.
Zaman: Diem ve tepe desenleri başına en az 24-72 saat.
5) Sonuçların karşılaştırılması: yöntemler ve seviyeler
5. 1 Karşılaştırma seviyeleri
1. Byte diff: Bire bir yanıt/olayın gövdesi. Basit ama kırılgan (zaman damgaları, anahtar sırası).
2. Anlamsal diff: alanları normalleştirme ve sıralama, epemeridleri yoksayma (traceId, zaman damgaları, sayaçlar).
3. İş değişmezleri: Aynı miktarlar, durumlar, miktarlar, sınırlar olsun.
4. İstatistiksel Analiz: Metrik Dağılımlar Eşleşiyor mu? (p50/p95, KS testi, kategorik χ ²).
5. 2 Karşılaştırma politikası
Alanların listelerini maskeler/yoksayar (örn. 'updatedAt', 'etag').
Doğruluk: Sayılar için mutlak/göreli hata (örneğin ± 1e-6).
Tolerans bantları: "Fiyat farkı ≤ 0. 01," "+ 0'dan fazla hata yok. Prod'a göre %1"
Karşılaştırıcı pseudocode
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 zapros↔otvet karşılaştırılması
Korelasyon-ID gereklidir.
Bağlantı açıklıkları: gölge izi savaşa bağlantı alır.
6) Gözlemlenebilirlik ve karşılaştırma eserleri
Metrikler:- 'shadow _ requests _ total {route,...}'
- 'gölge _ tutarsızlıklar _ total {type = byte' semantic 'invariant}'
- 'shadow _ error _ ratio' и 'shadow _ slo _ breach _ total'
- Perf: 'shadow _ latencies _ ms {p50, p95, p99}'
- Dağınık günlükler: Anahtarla kompakt JSON deltaları.
- Raporlama: En iyi N tutarsızlıkları olan günlük rapor, rotalara/kiracılara göre ısı haritaları.
- UI "diff explorer": CSV'de türe, rotaya, alana, dışa aktarmaya göre filtreler.
7) Özel günler ve incelikler
7. 1 Tutarlılık ve tutarlılık
Gölge istekleri daha sonra/daha önce gelebilir; Sürümlere/saatlere (Lamport/vektör) veya pencere toleranslarına normalleştirin.
Okuma-sonra-yazma: Eşzamanlı çoğaltma olmadan okuma-çoğaltma ile bir gölge farklı cevaplar verecektir - gecikme pencereleri ile karşılaştırın.
7. 2 Önbellek/öneriler
Prod ve gölge önbelleklerini karıştırmayın.
ML/önerenler için, çevrimiçi metrikleri ve çevrimdışı metrikleri ayrı ayrı karşılaştırın; sürüklenme giriş özelliklerini izleyin.
7. 3 Dış sağlayıcılar
İstemcileri yalnızca kayıt/stub modunda sarın.
Yerleşim hizmetleri için (vergiler, oranlar) - her iki taraf için dizinlerin anlık görüntüsünü düzeltin.
8) Kanarya yan yana/mavi-yeşil
Gölge: Kullanıcılar için sıfır risk, ancak gerçek yan etki yok; Mantık ve perf için harika.
Kanarya: yeni sürümden gerçek cevapların küçük yüzdesi; Hazır bir geri alma stratejisi ve SLA gerektirir.
Mavi-yeşil: doğrulama sonrası anında geçiş; Gölge genellikle önünde kullanılır.
9) Uygulama planı (GitOps tarzı)
1. Hedefler ve metrikler: Hangi değişmezler ve toleranslar hangi SLO'nun tutarsızlıkları kontrol ettiğini kontrol eder.
2. Trace: Korelasyon-ID, dağıtılmış iz bağlantıları.
3. Proxy yapılandırması: ayna ilkesi, örnekleme, redaksiyon.
4. İzolasyon: veritabanı sanal alanı/önbellek, yan taslaklar, test anahtarları.
5. Karşılaştırıcı: normalleştirme, yoksayma-haritalar, değişmezler, raporlar.
6. Yükleme planı: %1-5'ten başlayın, yeşil metriklerle %20-50'ye kadar büyüme.
7. Gözlenebilirlik: "Tutarsızlık/perf/volume" panoları.
8. Çıkış kriterleri: "0 kritik tutarsızlık 48 saat", "prod'dan daha kötü olmayan hatalar", "± %5 içinde sapma".
9. Kanaryaya geçin: Güvenli paylaşım ve otomatik garda kuralları ile gerçek cevaplar ekleyin.
10) Yapılandırma örnekleri
10. 1 Istio (Trafik Yansıtma)
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 Karşılaştırma kuralları (yaml politikası)
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-desenler
Gölge yazıyor: gölgelerden gerçek ödemeler/bildirimler.
Paylaşılan önbellek/paylaşılan kuyruklar: çapraz etki ve kontaminasyon.
Normalleştirme eksikliği: bayt difüzyonları saat/anahtar sırası nedeniyle "kırmızı'dır.
Hareket halindeyken çok yüksek yüzde: Kalem ürününün bozulması.
Uzun "sonsuz gölge": ikinci sistem ayrı yaşar ve gerçeklikten ayrılır.
12) Gölge modu başlatma kontrol listesi
- Proxy, paylaşımlı ve redaksiyonlu bir ayna ile yapılandırılmıştır.
- Gölge izole: DB/önbellekler/dış entegrasyonlar - sadece okunabilir/stub.
- Korelasyon-ID her yerde atılır; İzler bağlantılıdır.
- Karşılaştırıcı, değişmezleri görmezden gelebilir/normalleştirebilir ve kontrol edebilir.
- Tutarsızlıklar ve yük için gösterge panoları ve uyarılar.
- Yollar/kiracılar tarafından örnekleme; Sınırlar ve geri basınç.
- Yeşil ışık toleransları ve kriterleri tanımlanmıştır.
- Kanarya/mavi-yeşil ve geri dönüş planına geçiş.
13) SSS
S: Gölge'nin A/B'den farkı nedir?
C: A/B'de, her iki sürüm de yanıtları kullanıcılara döndürür (bölünmüş deneme), Shadow'da yeni sürüm kullanıcıyı etkilemez - cevapları yalnızca analiz edilir.
S: POST/PUT gölgelenebilir mi?
C: Evet, yan etkiler izolasyon (saplama) ve idempotans garanti edilirse. Genellikle GET ile başlar, sonra genişler.
S: Öğelerin sırası sabit olmadığında yanıtları nasıl karşılaştırırım?
C: Kümeler/anahtarlar olarak karşılaştırmadan veya karşılaştırmadan önce kararlı anahtara göre sıralayın.
S: Veritabanı çoğaltma gecikmeleri ile ne yapmalı?
C: "Karşılaştırma pencereleri've başvuru kitabı anlık görüntülerini girin; Sonuçları duvar saati yerine versiyona göre toplayın.
14) Toplam
Gölge trafik, "üretimin acısız bir provası'dır: gerçek yük, kullanıcılar için sıfır risk, tutarsızlıkların ayrıntılı analizi. Başarı, izolasyon, doğru örnekleme, kalite karşılaştırıcısı ve gözlemlenebilirlik ile belirlenir. Önerilen planın ardından, kanarya/mavi-yeşil bültenlere giden yolu güvenle köprüleyen ve mimarinin evrimini hızlandıran tekrarlanabilir bir uygulama elde edeceksiniz.