Shadow-2019 և համեմատություն
1) Ի՞ նչ է Shadow-2019-ը, և ինչո՞ ւ է այն անհրաժեշտ։
Shadow-2019 (նա նաև traffic mirroring/dark launch) անվտանգ «grounch» իրական հարցումների/իրադարձությունների նոր տարբերակն է, որը կապված է օգտագործողների վրա ազդեցության հետ։ Նոր տարբերակի արդյունքները չեն վերադառնում հաճախորդին և չեն արտադրում արտաքին սայդային էֆեկտներ, այլ հավաքվում են համեմատության համակարգում։
Հիմնական նպատակները
Մրցույթի ստուգումը 'սխեմաներ, կոդեր, բիզնես տրամաբանություններ։
Արտադրողականության գնահատումը 'լատենտ, կայունություն իրական բեռի տակ։
Դրեյֆի դետեկտիվը 'պատասխանների, բաշխումների, սխալների հաճախության տարբերությունները։
Կանարյան մասունքների պատրաստումը 'ռիսկի նվազեցում իրական անցումից առաջ։
Երբ կիրառեք
Միջուկի/ալգորիթմների վերաշարադրումը, որը հիմնված է BD/kasha-ի վրա, անցում դեպի մեկ այլ ռանտայմ/MSK, արտաքին API պրովայդերի փոփոխություն։
2) Shadow-2019 ճարտարապետական արտոնագրերը
2. 1 L7-71/դարպաս (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։
Արտադրողը գրում է, թե ինչպես են սովորաբար ռուսական կոնսուումերները կարդում։
Զուգահեռ «ստվերը» (shadow-pipeline) կարդում է նույն հոսքը առանձին ավազի մեջ։
Տարբերակները ՝ MirrorMaker/Replicator, drix-write (զգուշորեն), բրիջի «source no + shadow»։
2. 3 Replayer (ձայնագրություն/վերարտադրություն)
Իրական հարցումների/թրեյսների նկարը (PCAP/NGINX 108, gRPC taps) բացատրում է «ստվերի» պարտությունը վերահսկվող տեմպերով։
2. 4 «Սինթետիկ ստվեր»
Prod-logs-ի բեռի շարժիչի արտադրությունը + ներկային դեպքերի ավելացման փուլերը օգտակար են սահմանափակումների դեպքում։
3) Պետության մեկուսացումը և սաիդ էֆեկտները
Ոսկե կանոն 'ստվերը չի փոխում արտաքին աշխարհը։
Rid-onley հասանելիությունը BD/kasha կամ առանձին ավազի (wwww.apshot/կրկնօրինակը)։
Ելքային կողոսկրների արգելքը 'վճարումներ, նամակներ, թնդանոթներ, webhooks nostub/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-a ավելի անվտանգ)։
Պերֆի բյուջեն 'հացահատիկը չպետք է ավելացնի p95/p99 մարտական շարժիչը։ Ստվերը միշտ ասինխրոն է։
Back-pressure-ը 'shadow-շղթայի գերտաքացման ժամանակ ստվերն է, ոչ թե ռազմական հարցումները։
Ժամանակը 'առնվազն 24-72 ժամ, որպեսզի ծածկեն ամենօրյա և պիցցիոն պաթերտները։
5) Արդյունքների համեմատությունը 'մեթոդներ և մակարդակներ
5. 1 Համեմատության մակարդակներ
1. Բայթ պաշտպանություն 'պատասխանը/իրադարձությունը մեկ-մեկ։ Պարզ է, բայց փխրուն (թայմստեմպներ, կարգուկանոն)։
2. Սեմանտիկ պաշտպանություն 'նորմալիզացիա և դաշտեր, անտեսենք էպեմերիդները (trance Id, timestamps, counters)։
3. Բիզնես ինվարատորներ 'արդյոք նույն գումարները, կարգավիճակները, քանակը, սահմանները։
4. Վիճակագրական վերլուծություն 'մետրի բաշխումը համընկնում է։ (p50/p95, KS-թեստը, որը նկարագրվում է կատեգորիկ)։
5. 2 Համեմատության քաղաքականություն
Դիմակներ/ignore-դաշտերի ցուցակները (օրինակ ՝ «www.atedAt», «etag»)։
Ճշգրտությունը ՝ բացարձակ/հարաբերական սխալը թվերի համար (օրինակ ՝ 241e-6)։
Թույլ տվեք (toler.bands). <<տարբերությունը 240 գնի մեջ։ 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 Հարցման համեմատությունը բացատրում է պատասխանը
Պարտական է Eurelation-ID-ին (ստվերում)։
Լինկովկա սպան 'shadow-ուղին ստանում է շարժիչը մարտական։
6) Համեմատության զգացում և արտեֆակտներ
Մետրիկները
`shadow_requests_total{route,...}`
`shadow_discrepancies_total{type=byte|semantic|invariant}`
`shadow_error_ratio` и `shadow_slo_breach_total`
Պերֆ ՝ «shadow _ latencies _ 24_ p50, p95, p99 +»
Ածխաջրածինների լոգները 'կոմպակտ JSON-դելտաները։
Հաշվետվությունները 'ամենօրյա զեկույցը առաջին N-ից, ջերմային քարտեզները/տենանտները։
UI «diff meder» 'ֆիլտրեր, ինչպիսիք են, երթուղին, դաշտը, express CSV-ում։
7) Հատուկ դեպքեր և նրբություններ
7. 1 Հաջորդականություն և հետևողականություն
Shadow հարցումները կարող են գալ ավելի ուշ/առաջ։ նորմալացրեք տարբերակներով/ժամերով (Lampium/vector) կամ պատուհանների թույլատրությամբ։
Read-after-write: ստվերը read-replica-ի հետ առանց սինխրոն վերարտադրման կտա տարբեր պատասխաններ 'համեմատեք lag-պատուհանի միջոցով։
7. 2 Քաշ/առաջարկություններ
Մի խառնեք կաշփոթը և shadow։
ML/առաջարկների համար համեմատեք առցանց մետրերը և օֆլինային մետրերը առանձին; հետևեք drift մուտքային նշանների։
7. 3 Արտաքին պրովայդերներ
Շրջեք record-only/stub ռեժիմով։
Հաշվարկային ծառայությունների համար (հարկեր, դասընթացներ) - երկու կողմերի համար գրացուցակների նկարները։
8) Համեմատություն կանարեկների/blue-green հետ
Shadow 'օգտագործողների զրոյական ռիսկ, բայց իրական SID էֆեկտներ չկան։ լավ տրամաբանության և փետուրի համար։
Կանարի 'իրական պատասխանների փոքր տոկոսը նոր տարբերակից։ պահանջում է արագ արձագանքման ռազմավարություն և SLA։
Blue-green 'ակնթարթային անցում վալիդացիայից հետո։ Shadow-ը հաճախ օգտագործվում է նրա առջև։
9) Իրականացման պլանը (GitOps-ոճ)
1. Նպատակներն ու գծապատկերները 'ինչ ինվարանտներ և թույլ տվեք ստուգել, թե ինչ SLO-ն է տարբերվելու համար։
2. Ուղիներ ՝ Direrelation-ID, բաշխված թրեյս-ոսպնյակներ։
3. Պլանավորումը 'mirror-քաղաքականություն, սեմպլացիա, redaction։
4. Մեկուսացում 'BD/kash, կողպեքներ, թեստային բանալիներ։
5. Կոմպարատորը 'նորմալացում, ignore-maps, invariants, հաշվետվություններ։
6. Բեռի պլանը 'սկսելը 1-5 տոկոսից, հասակը մինչև 20-50 տոկոսը կանաչ մետրերում։
7. Դիտարկումը 'dashbords «անհամապատասխանություն/perf/ծավալ»։
8. Ելքի չափանիշները ՝ «0 կրիտիկական անհամապատասխանություններ 48 ժամ», «սխալները ավելի վատ չեն, քան ռուսական», «պերֆը 355 տոկոսում»։
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) Anti-patterna
Shadow-ը գրում է, իրական վճարումները/ծանուցումները ստվերից։
Ընդհանուր քեշը/ընդհանուր հերթերը 'խաչմերուկ ազդեցությունը և աղտոտումը։
Նորմալիզացիայի բացակայությունը 'բայթ ֆորումները «կարմրացնում» են ժամացույցի/կարգի պատճառով։
Չափազանց բարձր տոկոսն այն է, որ պղպեղի քայքայումը կատարվում է։
Երկար «հավիտենական ստվեր» 'երկրորդ համակարգը ապրում է առանձին և տարբերվում իրականության հետ։
12) Shadow-ռեժիմի գործարկման չեկի ցուցակը
- Մենք ունենք mirror և redaction։
- Ստենը մեկուսացված է 'BD/kashi/արտաքին բջիջները' միայն readonly/stub։
- Ամենուր վարձում են Eurelation-ID; հետքերը ոսպնյակ են։
- Կոմպարատորը կարող է ignore/normalize և ինվարանտների ստուգում։
- Dashbords և alerts տարբերակման և բեռի վրա։
- Սեմպլյացիա երթուղիներով/տենանտներով; սահմանափակումներ և back-pressure։
- Որոշեք նաև կանաչ լույսի չափանիշները։
- Անցում դեպի canary/blue-green և։
13) FAQ
Q: Ինչու՞ է Shadow-ը տարբերվում A/B-ից։
A: A/B երկու տարբերակները վերադարձնում են մրցույթի պատասխանները (Shadow-ի նոր տարբերակը չի ազդում օգտագործողի վրա, նրա պատասխանները միայն վերլուծվում են։
Q 'Կարո՞ ղ եք քայլել POST/POST։
A 'Այո, եթե երաշխավորված է կողմնակի մեկուսացում (stub) և կուռքեր։ Հաճախ սկսում են GET-ից, հետո ընդարձակվում։
Q 'Ինչպե՞ ս կարելի է համեմատել պատասխանները, եթե տարրերի կարգը չի օգտագործվում։
A 'Սորտը համեմատությունից առաջ կամ համեմատեք որպես բազմազանություն։
Q 'Ի՞ նչ անել BD-ի կրկնօրինակման հետ։
Ա 'Ներդրեք «Համեմատության պատուհանները» և գրացուցակների կեղևները։ համախմբեք արդյունքները ըստ տարբերակների, ոչ թե «պատի»։
14) Արդյունքները
Shadow-international-ը «անօգնական փորձարկումն է» 'իրական իրականացում, օգտագործողների զրոյական ռիսկ, մանրամասն տարբերությունների վերլուծաբան։ Հաջողությունը որոշվում է մեկուսացումով, ճիշտ սերմերով, բարձրորակ բաղադրիչով և դիտարկմամբ։ Դուք կստանաք վերարտադրողական պրակտիկա, որը վստահորեն լվանում է canary/blue-green թողարկումների ճանապարհը և արագացնում է ճարտարապետության էվոլյուցիան։