GH GambleHub

Shadow ტრაფიკი და შედარება

1) რა არის Shadow ტრაფიკი და რატომ არის ეს საჭირო

Shadow ტრაფიკი (aka traffic mirroring/dark launch) არის რეალური მოთხოვნის/მოვლენების უსაფრთხო „გადახრა“ სამსახურის ახალი ვერსიისთვის, წარმოების ვერსიის პარალელურად, მომხმარებლებზე გავლენის გარეშე. ახალი ვერსიის შედეგები არ უბრუნდება კლიენტს და არ აწარმოებს გარე გვერდითი ეფექტებს, მაგრამ იკრიბება შედარების სისტემაში.

ძირითადი მიზნები:
  • თავსებადობის შემოწმება: სქემები, კონტრაქტები, ბიზნეს ლოგიკა.
  • პროდუქტიულობის შეფასება: ლატენტობა, რეალური დატვირთვის წინააღმდეგობა.
  • დრიფტის გამოვლენა: განსხვავებები პასუხებში, განაწილებებში, შეცდომების სიხშირეში.
  • კანარის გამოშვებისთვის მზადება: რისკის შემცირება ტრაფიკის რეალურ გადართვამდე.
როდის უნდა გამოვიყენოთ:
  • ბირთვის/ალგორითმების გადაწერა, BD/ქეშის მიგრაცია, სხვა ranthim/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 მოვლენების საბურავები (კაფკა/ნაკადები)

ტოპიკის დონეზე, tee მზადდება:
  • პროდიუსერი წერს, ჩვეულებისამებრ, კონსერვატორებს კითხულობს.
  • პარალელურად, „ჩრდილი“ კითხულობს იმავე ნაკადს ცალკეულ ქვიშის ყუთში.

პარამეტრები: MirrorMaker/Replicator, ორმაგი write (ფრთხილად), bridges „წყარო - + shadow“.

2. 3 Replayer (ჩანაწერი/რეპროდუქცია)

რეალური მოთხოვნების/ტრეისების სურათი (PCAP/NGINX Access, grRPC taps) - „ჩრდილში“ დაკვრა კონტროლირებადი ტემპით.

2. 4 სინთეზური ჩრდილი

დატვირთვის პროფილის წარმოქმნა პროდ-ლოგებიდან + რეგიონალური საქმეების შევსების ფაზიდან - სასარგებლოა კონფიდენციალურობის შეზღუდვებით.

3) სახელმწიფო იზოლაცია და გვერდითი ეფექტები

ოქროს წესი: ჩრდილი არ ცვლის გარე სამყაროს.

Rid-only წვდომა BD/ქეში ან ცალკე ქვიშის ყუთში (snapshot/რეპლიკა).
გამავალი გვერდების აკრძალვა: გადასახადები, წერილები, ქვემეხები, webhooks - stub/blackhole/record-only.
Idempotention ბრძანების დონეზე/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. სემანტიკა: ჩვენ ვატარებთ ნორმალიზებას და ვაყენებთ ველს, უგულებელყოფთ ეპემერიდებს (tracaID, timestamps, counters).
3. ბიზნეს ინვარიანტები: იგივე თანხები, სტატუსები, რაოდენობა, საზღვრები.
4. სტატისტიკური ანალიზი: მეტრიკის განაწილება ემთხვევა? (p50/p95, KS ტესტი, s ² კატეგორიული).

5. 2 შედარებითი პოლიტიკა

ნიღბები/ignore ველების სიები (მაგ., 'განახლება', 'etag').
სიზუსტე: რიცხვების აბსოლუტური/ფარდობითი შეცდომა (მაგალითად, ± 1e-6).

Tolerance bands: "ფასის სხვაობა 0. 01“, „შეცდომები აღარ არის + 0. 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 (გადაყარეთ ჩრდილში).
Spans linkovka: 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'
  • დიფების ლოგოები: კომპაქტური JSON დელტა კლავიშებზე.
  • ანგარიში: ყოველდღიური ანგარიში ტოპ N განსხვავებებიდან, თერმული ბარათები მარშრუტებზე/ტენანტებზე.
  • UI „diff Explorer“: ფილტრები ტიპის, მარშრუტის, ველის, ექსპორტი CSV- ში.

7) განსაკუთრებული შემთხვევები და დახვეწილობა

7. 1 თანმიმდევრობა და თანმიმდევრულობა

Shadow მოთხოვნები შეიძლება მოგვიანებით/ადრე მოვიდეს; ნორმალიზება/საათების მიხედვით (Lamport/vector) ან ფანჯრის გასწვრივ.
Read-after-write: ჩრდილი read-replica- სთან სინქრონული რეპლიკაციის გარეშე მისცემს სხვადასხვა პასუხებს - შეადარეთ ლამპის ფანჯრები.

7. 2 კეში/რეკომენდაციები

ნუ შეურიეთ ქეში და shadow.
ML/რეკომენდატორებისთვის შეადარეთ ონლაინ მეტრიკა და ოფლაინ მეტრიკა ცალკე; დააკვირდით შეყვანის ნიშნებს.

7. 3 გარე პროვაიდერები

გადააკეთეთ მომხმარებლები ჩანაწერების რეჟიმში.
გაანგარიშებული მომსახურებისთვის (გადასახადები, კურსები) - ჩაწერეთ საცნობარო წიგნების სურათი ორივე მხარისთვის.

8) კანარის შედარება/ცისფერი-მწვანე

Shadow: მომხმარებლებისთვის ნულოვანი რისკი, მაგრამ არ არსებობს რეალური გვერდითი ეფექტები; მშვენიერია ლოგიკისთვის და პერფისთვის.
Canary: ახალი ვერსიიდან რეალური პასუხების მცირე პროცენტი; მოითხოვს მზა დაბრუნების სტრატეგიას და SLA.
Blue-green: მყისიერი გადართვა ვალიდაციის შემდეგ; Shadow ხშირად გამოიყენება მის წინ.

9) განხორციელების გეგმა (GitOps სტილი)

1. მიზნები და მეტრიკა: რომელი ინვარიანტები და დაშვება ვამოწმებთ რა SLO- ს განსხვავებებს.
2. ტრეკერი: Correlation-ID, განაწილებული ტრეისი ხაზები.
3. მარიონეტული კონფიგურაცია: mirror პოლიტიკა, sexaction, redaction.
4. იზოლაცია: BD/ქეში ქვიშის ყუთი, გვერდითი დანამატები, ტესტის გასაღებები.
5. კომპარატორი: ნორმალიზაცია, ignore-maps, ინვარიანტები, მოხსენებები.
6. დატვირთვის გეგმა: დაწყება 1-5% -ით, ზრდა 20-50% -მდე მწვანე მეტრებში.
7. დაკვირვება: დაშბორდები „შეუსაბამობა/პერფი/მოცულობა“.
8. გამოსვლის კრიტერიუმები: „0 კრიტიკული შეუსაბამობა 48 საათის განმავლობაში“, „შეცდომები არ არის უარესი, ვიდრე scream“, „პერფი ± 5% ფარგლებში“.
9. გადასვლა კანზე: ჩართეთ რეალური პასუხები უსაფრთხო წილით და ავტომატური გარბენის წესებით.

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 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 წერს გარედან: რეალური გადახდები/შეტყობინებები ჩრდილიდან.
საერთო ქეში/ზოგადი ხაზები: ჯვარედინი გავლენა და დაბინძურება.
ნორმალიზაციის არარსებობა: ბაიტის დიფები „წითელია“ საათების/შეკვეთის გამო.
ძალიან მაღალი პროცენტი სიჩქარით: პერფის დეგრადაცია.
გრძელი „მარადიული ჩრდილი“: მეორე სისტემა ცხოვრობს ცალკე და განსხვავდება რეალობასთან.

12) Shadow რეჟიმის გაშვების ჩეკის სია

  • მარიონეტული mirror აქვს წილი და redaction.
  • ჩრდილი იზოლირებულია: BD/ქეში/გარე ინტეგრაცია - მხოლოდ readonly/stub.
  • Correlation-ID ყველგან; ტრეკები არის ლინზები.
  • კომპოზიტორს შეუძლია ignore/normalize და შეამოწმოს ინვარიანტები.
  • დაშბორდები და ალერტები განსხვავებებისა და დატვირთვის შესახებ.
  • სემპლაცია მარშრუტებზე/ტენანტებზე; შეზღუდვები და უკანდახევა.
  • განისაზღვრება მწვანე შუქის დაშვება და კრიტერიუმები.
  • გეგმა გადასვლისთვის/ცისფერი-მწვანე და დაბრუნება.

13) FAQ

Q: როგორ განსხვავდება Shadow A/B?
A: A/B ორივე ვერსია მომხმარებლებს პასუხებს უბრუნებს (სპლიტ ექსპერიმენტი), Shadow- ში ახალი ვერსია გავლენას არ ახდენს მომხმარებელზე - მისი პასუხები მხოლოდ ანალიზდება.

Q: შესაძლებელია POST/PUT?
A: დიახ, თუ გარანტირებულია გვერდითი იზოლაცია (stub) და imempotence. ხშირად იწყებენ GET- ს, შემდეგ კი აფართოებენ.

Q: როგორ შევადაროთ პასუხები, თუ ელემენტების რიგი არ არის ფიქსირებული?
ა: შეადარეთ ან შეადარეთ, როგორც კლავიშებს.

Q: რა უნდა გავაკეთოთ BD- ს რეპლიკების შეფერხებებით?
A: შეიყვანეთ „შედარების ფანჯრები“ და საცნობარო წიგნების სლაიდები; დააკავშიროთ შედეგები ვერსიით და არა „სტენოკარდიით“.

14) შედეგები

Shadow ტრაფიკი არის „წარმოების უმტკივნეულო რეპეტიცია“: რეალური დატვირთვა, მომხმარებლებისთვის ნულოვანი რისკი, განსხვავებების დეტალური ანალიტიკა. წარმატება განისაზღვრება იზოლაციით, სწორი ნიმუშით, მაღალი ხარისხის კომპარატორით და დაკვირვებით. შემოთავაზებული გეგმის შემდეგ, თქვენ მიიღებთ რეპროდუქციულ პრაქტიკას, რომელიც დამაჯერებლად ხოცავს გზას/ცისფერ-მწვანე რელიქვიებამდე და აჩქარებს არქიტექტურის ევოლუციას.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.