DLQ և թունավոր հաղորդագրությունների մշակում
Dead Letter Queue-ը (DLQ) մեկուսացված հերթն է/տոպիկ հաղորդագրությունների համար, որոնք չեն կարողացել մշակել ստանդարտ կոնսուիմեր տվյալ թվով փորձերից հետո կամ ակնհայտ մեթոդներով/բիզնես պատճառներով (ոչ որակյալ սխեմա, թայմաուտ, տարբերակների հակամարտություն և այլն)։ Թունավոր հաղորդագրությունը (poison) ձայնագրությունն է, որի վերարտադրումը կայուն ավարտվում է սխալով և վտանգում է ռուսական pline կայունությունը։
DLQ-ի նպատակն է պահպանել SLO-ը, տեղայնացնել ձախողումը, կանխել հիմնական հոսքի արգելափակումը և երաշխավորել վերլուծության և անվտանգ վերարտադրման հնարավորությունները (ռեդրեյվվա)։
1) Որտեղի՞ ց են գալիս թունավոր հաղորդագրությունները
Սխեմաներ/պայմանագրեր 'անհամատեղելի փոփոխություններ, որոնք չունեն պարտադիր դաշտեր, սխալ տեսակներ։
Բիզնես վալիդացիա 'կրկնօրինակներ, խախտված ինվարանտներ, ժամկետանց իրադարձություններ։
Կարգուկանոնը և պատճառաբանությունը 'եկավ «Corate» մինչև «Create», բաց թողնելով հարաբերությունները, out-of-order։
Idempotention 'վերարտադրումը առաջացնում է կողմնակի էֆեկտներ։
Արտաքին կախվածությունը 'սահմանափակ սահմանաչափեր/թայմաուտներ, API անհասանելիություն։
Տվյալները ՝ ծանրաբեռնվածության կոռուպցիա, սխալ կոդավորում, չափի ավելցուկ։
2) DLQ ուղարկման չափանիշները
Հաղորդագրությունը ընկնում է DLQ-ում, եթե կա մեկ կամ մի քանի պայմաններ
Ավելի բարձր է Attempional-ի մշակումը կոնսուումերի/worker-ի մոտ։
Սխալը դասակարգվում է որպես անսարքություն (non-retryable) 'անգնահատելի սխեմա, կրիտիկական ռեսուրսի բացակայություն, բիզնեսի արգելք։
Deadom հաղորդագրությունների (TTL/expiration)։
Քաղաքական գործիչը աշխատում էր circuit breaker կամ admission corl-ի համար այս ստեղնի/տենբերի համար։
Օպերատորի ակնհայտ լուծումը («eject» հիմնական հոսքից)։
3) DLQ-ի դիֆերենցիալ և արտոնագիր
Per-queue DLQ: Յուրաքանչյուր հերթում/տոպիկը ունի իր DLQ-ն։ Պարզ և զզվելի։
Central DLQ (parking lot), ընդհանուր «պարկինգը» բարդ դեպքերի համար, հարմար է մեկ վերլուծության գործիքների համար։
DLT (Dead Letter Topic) 'Log-կողմնորոշված անվադողերի համար (event log) - առանձին կացինկ, որը ունի մերժման պատճառներ։
Quarantine: կարանտինային բուֆեր, կոշտ հասանելիությամբ և PII-ռոտացիայով ձեռքով վերլուծության համար։
Shadow-stream: «ստվերում» խնդրահարույց հաղորդագրությունների կրկնօրինակումը ֆիքսի հետ անվտանգ փորձերի համար։
4) Մեթադները, որոնք պետք է ուղեկցեն DLQ-ին
Նվազագույն հավաքածու
Ձախողման պատճառը կոդ/սխալի դաս, stack/trace id.
Ռետրերի կոնտեքստը '«attempt',» «Attemprone», «first _ seen _ ts», «lente _ attempt _ ts»։
Հարաբերակցություն ՝ «trace _ id», «բանաձև _ id», «tenom _ id», «entity _ id», կուսակցության բանալին։
Բնօրինակը www.set/part.ru/sequence (լոգարանի անվադողերի համար) կամ 108-id։
Պայմանագիրը/սխեման/բեռի տարբերակը։
Idempotency-key/Request-id (եթե կա)։
Ուղղման աղբյուրը 'հերթի/տոպիկի անունը, կոնսուումեր խումբը։
5) Գետերի քաղաքականությունը մինչև DLQ
Նախքան DLQ ուղարկելը օգտագործեք ճիշտ կրկնվող փորձեր
Condumer-ի կարճ ռետրերը ՝ "www.Attempom '2-5, exponential backoff + ջիտթեր, concurrency։
Կոոպերատիվ backpressure, մրցակցության նվազումը սխալների աճի ժամանակ։
Սխալների դասակարգումը ՝ retryable («5xx», timaut) vs non-retryable (վալիդացիա, schema mismatch)։
Հետաձգված գծերը (wwww.ay queue): 5s 3530s 42m-ը ռուսական ձախողումների համար։
Per-key մեկուսացում 'եթե «աղմուկ» հատուկ բանալին, մի արգելափակեք ամբողջ խմբաքանակը։
6) Անվտանգ ռեդրեյվը (կրկնվող DLQ-ից)
Ռեդրեյվը DLQ-ի հաղորդագրությունների վերահսկվող գրանցումն է մշակման մեջ։
Սկզբունքները
1. Ֆիքսի ստուգումը 'ռեդրեյվը միայն կոդի/կազմաձևի/սխեմայի շտկումից հետո կամ արտաքին կախվածության վերականգնումից հետո։
2. Idempotention: մշակողները պետք է դիմացկուն լինեն կրկնությանը (ups.ru, holurand վիրահատություններ)։
3. Deduplication: «idempotency _ key »/« բանաձև _ id »/« business _ key»։
4. Դոզացիան և պատուհանները 'N հաղորդագրությունների batches, rate-limit redrive, «պատուհաններ» ժամանակի/կուսակցության վրա։
5. Տեղական վալիդացիան 'ռեդրեյվի առջև սխեմայի արագ ստուգումը (վաղ ոչ որակյալ դեպքերի reject)։
6. Առաջնահերթություն. Ռեդրեյվը չպետք է փոխարինի տեմպը (վորկերների ցածր գերակայությունը/առանձին փամփուշտը)։
7. Դիտարկումը 'առանձին մետրեր և հետքեր ռեդրեյի համար։ արդյունքների զեկույցը (հաջողություն/կրկնվող DLQ/կորուստ)։
7) Առաքման իմաստաբանությունը և կարգը
At-leport-once-ը ամենատարածված ռեժիմն է 'անհրաժեշտ է idempotention և dedeplication։
At-most-once-DLQ-ը կարող է անջատվել; կորստի ռիսկը։ Օգտագործեք միայն թույլատրելի կորուստների դեպքում։
Exactly-once-ը (արդյունավետ) 'հասնում է գործարքների և դեդուպի բիզնես պահարանում։ թանկ և հատուկ։
Կարգը 'DLQ-ն սովորաբար փակում է որոշակի ստեղնը/կուսակցությունը։ Եթե կարգուկանոնը կրիտիկական է, ռեդրեյվվրե՛ ք բանալիով և հետևողականորեն։
8) Սխեմաներ, պայմանագրեր և վալիդացիա
Schema registry/պայմանագրերը 'ռուսական տարբերակումը, էվոլյուցիան backward/forward-ի հետ։
Մուտքի վալիդացիան 'JSON Schema/Eurobuf/Avro-ի միջոցով լուրջ քայլերից առաջ։
Անհամատեղելիության քաղաքականությունը '«կոտրող» դաշտում, անմիջապես DLQ-ում' «SCHEMA _ INCOMPATIBLE» կոդով։
Redaction PII 'DLQ-ում պահեք միայն անհրաժեշտ։ զգայուն դաշտերը քողարկեք։
9) Idempotenty և deduplication
Idempotency-key: Ձևավորեք «բիզնես իմաստից» (tenault + entity + operation + ts-bucket)։
Dedup-ամսագրեր 'պահեք վերջին' N '2019 TTL-ի հետ։ հիշեք գործողության «էֆեկտը»։
Ups.ru/merge: խուսափեք «insport-only» առանց սահմանափակումների։
Said-էֆեկտներ 'արտաքին զանգերի համար, լրագրեք և ստուգեք «վարորդը» զանգահարելուց առաջ։
10) Դիտարկումը և SLO-ն
Մետրիկները (հերթով/տենանտու/բանալին)
DLQ rate (www.g/s), հաղորդագրությունների մասը, միջին/միջին «տարիքը» DLQ-ում։
Ռեդրեյվի հաջողությունը (%), կրկնվող DLQ մասը։
Պատճառների դասակարգումը 'schema, validation, timeout, dependency, unknown։
p95/p99 հիմնական հոսքի վերամշակման լատենտ ռեդրեյում։
DLQ չափսը, լյարդի վտանգը։
Լոգա/թրեյսինգ
Պարտադիր թեգերը ՝ «բանաձև _ id», «entity _ id», «tenium _ id», «attempt», «reason», «redrive _ batch _ id»։
«DLQ» -ի ճյուղերը 'աղբյուրից մինչև երկրորդ հաջողությունը։
SLO:- Հաջողությամբ մշակված հաղորդագրությունների մասնաբաժինը X տոկոսը T րոպեում։
- DLQ-քեյսի համար հետազոտության և շտկման ժամանակը Ye ժամ է։
- Հաղորդագրությունների առավելագույն «տարիքը» DLQ 24Z ժամ (ալերտով)։
11) Անվտանգություն և համապատասխանություն
Ամենափոքր արտոնությունների սկզբունքով հասանելիությունը 'ռեդրեյվը' միայն օպերատորներ/պլեյբուսներ։
Աուդիտ 'ով և երբ ռեդգերվ/հեռացում/խմբագրում մետատվյալներին։
Ռոտացիան 'central DLQ տեղափոխվելիս հեռացրեք ավելցուկ PII/գաղտնիքները։
Retention 'DLQ-ի համար պահեստավորման և քաղաքականության առանձին ժամկետներ։
12) Multi-tenanty
Թեգերը 'tenrone _ id/plan': Տարբերեք սահմանները, ռեդրեյվի գերակայությունները, հաշվետվությունները։
Նախկին ստենանտային DLQ կամ կուսակցություն. Որպեսզի «աղմկոտ» հաճախորդը չմոռանա ընդհանուր DLQ-ը։
Billing/քվոտաներ 'հաշվի առեք DLQ-ի ծավալը և usage-ի հազվագյուտ արժեքը։
13) Միգրացիոն ձևանմուշները (օրինակ)
yaml consumer:
max_attempts: 4 backoff:
strategy: exponential_full_jitter initial_ms: 200 max_ms: 5000 classify_errors:
retryable: [TIMEOUT, DEP_UNAVAILABLE, 5xx]
nonretryable:[SCHEMA_INCOMPATIBLE, VALIDATION_FAILED, DUPLICATE]
concurrency_caps:
per_partition: 8 per_tenant: 50
dlq:
type: topic name: myapp. events. dlq metadata:
include: [reason, stack, attempt, first_seen_ts, last_attempt_ts, schema_version,
tenant_id, entity_id, trace_id, source_topic, partition, offset]
retention_hours: 168 pii_redaction: true
redrive:
mode: batch batch_size: 500 rate_limit_per_sec: 50 priority: low validate_schema_before_redrive: true idempotency:
dedup_ttl_hours: 24 ordering:
by_key: true
14) Վիրահատական պլեյբուկները (runbooks)
1. DLQ-ի աննորմալ աճը 'ներառել throtling prod-consumer-ը, վերլուծել լավագույն պատճառները, ստուգել ալգորիթմները/սխեմաները։
2. Schema mismatch: ռեպորտաժ/սխեմայի ամրագրում, ադապտեր, redrive ստուգումից հետո։
3. Արտաքին կախվածությունը անհասանելի է 'գետերի դադար, միացրեք www.ay-րդ, redrive վերականգնումից հետո։
4. Կրկնվող DLQ-ն ռեդրեյից հետո 'ներառել «ստվերային» մշակողը/սիմուլյատորը, ստուգել իկեմպոտենտալությունը, փչացնել batch։
5. DLQ-ի հալեցումը 'արխիվը-storage-ում, ներառել ընտրովի ռեդրեյվը։
15) Փորձարկում և քաոս
Սխալների միգրացիան 'schema-break, valivation, timauts, 1-on-N «schema-break» սխալներ։
Զանգվածային ռեդրեյվը 'դեղորայքի և ազդեցության ստուգումը։
Out-of-order հաջորդականության 'ensure ճիշտ բուժումը բաների վրա։
Ծանրաբեռնվածության կոռուպցիան 'վալիդացիան և անվտանգ մերժումը։
Վերականգնումը ռեդրեյվ-վորքերի անկումից հետո 'batch վիրահատությունների համադրելիությունը։
16) Տիպիկ սխալներ
DLQ-ում մետաղադրամների բացակայությունը անհնար է կլաստավորել պատճառները և ապահով ռեդվիզացնել։
Զանգվածային ռեդրեյվը առանց սահմանների հաստատվում է կրկնվող դեգրադացիան։
Գոյություն չունի idempotenty/dedup wwindows և կողմնակի էֆեկտներ։
PII խառնուրդը central DLQ-ում առանց ռոտացիայի։
Սխեմաների/կոդերի բացակայությունը «անակնկալներ» է հաղորդագրությունների էվոլյուցիայի ժամանակ։
Միակ ընդհանուր DLQ-ն առանց տենանտների/բաների խմբաքանակի։
Անսահման ռետրերը վաղ DLQ-ի փոխարեն non-retryable սխալների համար։
17) Արագ բաղադրատոմսեր
Սովորական բիզնեսի հոսքը '3-4 փորձեր, էքսպոնենցիալ backoff c jitter, սխալների վաղ դասակարգումը, DLQ ամբողջական մետատվյալներով։
Կրիտիկական իրադարձություններ (1934) 'խիստ կուռք, կարճ թայմաուտներ, առնվազն փորձեր, արագ DLQ և ձեռքով վերլուծություն։
Զանգվածային ռեդրեյվը ֆիքսից հետո 'small batches (100-500), rate-limit, առանձին workers փամփուշտը, հաջողության բարձրացումը> 95 տոկոսը արագությունից առաջ։
Multi-tenant: Redrain-tenant-ը, DLQ-ի լավագույն հաճախորդների զեկույցը։
Եզրակացություն
DLQ-ը ոչ թե «աղբի զամբյուղը» է, այլ վստահության վերահսկվող լուծումը։ Հասանելիության հստակ կանոնները, հարուստ մետատվյալները, գաղափարախոսությունը և դեդուպլիկացիան, անվտանգ չափված ռեդրեյդը, սխեմաների կարգապահությունը և դիտարկումը վերածում են թունավոր հաղորդագրությունները SLO-ի սպառնալիքից դեպի կառավարվող ինժեներական գործընթաց 'հասկանալի պլեյբուսներով, կանխատեսելի ծախսերով և օգտագործողների վրա նվազագույն ազդեցությամբ։