GH GambleHub

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-ի սպառնալիքից դեպի կառավարվող ինժեներական գործընթաց 'հասկանալի պլեյբուսներով, կանխատեսելի ծախսերով և օգտագործողների վրա նվազագույն ազդեցությամբ։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։