GH GambleHub

DLQ və zəhərli mesajların emalı

Dead Letter Queue (DLQ) - müəyyən bir cəhddən sonra və ya aydın texniki/biznes səbəblərə görə (qeyri-sabit sxem, taymaut, versiya ziddiyyəti və s.) ştat məsləhətçisi tərəfindən idarə olunmayan mesajlar üçün təcrid olunmuş növbə/topikdir. Zəhərli mesaj (poison message) - təkrar emalı ardıcıl olaraq səhv ilə başa çatan və paylayanın sabitliyini təhdid edən qeyd.

DLQ-nin məqsədi: SLO-nu saxlamaq, nasazlığı lokallaşdırmaq, əsas axını bloklamamaq və analiz və təhlükəsiz təkrar oynamaq (redrayva) imkanlarını təmin etməkdir.

1) Zəhərli mesajlar haradan gəlir

Sxemlər/müqavilələr: uyğun olmayan dəyişikliklər, mövcud olmayan məcburi sahələr, səhv növlər.
Biznes validasiyaları: dublikatlar, pozulmuş invariantlar, vaxtı keçmiş hadisələr.
Sifariş və səbəblər: «Create» -dən əvvəl «Update» gəldi, buraxılmış korrelyasiyalar, out-of-order.
İdempotentlik: təkrar emal yan təsirlərə səbəb olur.
Xarici asılılıqlar: məhdud limitlər/vaxtlar, API əlçatmazlığı.
Məlumatlar: yük korrupsiyası, səhv kodlaşdırma, ölçünün aşılması.

2) DLQ-yə göndərmə meyarları

Bir və ya bir neçə şərt yerinə yetirildikdə mesaj DLQ-yə düşür:
  • Konsumer/Worker-də maxAttempts emal aşdı.
  • Səhv düzəldilməz (qeyri-retryable) kimi təsnif edilir: qeyri-sabit sxem, kritik resurs olmaması, iş qadağası.
  • Deadline mesajı (TTL/expiration).
  • Bu açar/tenant üçün circuit breaker və ya admission control siyasəti işlədi.
  • Operatorun açıq qərarı (əsas axından əl ilə «eject»).

3) DLQ topologiyaları və nümunələri

Per-queue DLQ: Hər sıra/topik öz DLQ var. Sadə və şəffaf.
Central DLQ (parking lot): mürəkkəb hallar üçün ümumi «park», vahid analiz alətləri üçün əlverişlidir.
DLT (Dead Letter Topic): log yönümlü şinlər üçün (event log) - uğursuzluq səbəbləri olan metadata ilə ayrı bir topik.
Quarantine: əllə analiz üçün sərt giriş və PII sanitariyası ilə karantin bufer.
Shadow-stream: problemli mesajları «kölgə» saxta ilə təhlükəsiz təcrübələr üçün dublyaj.

4) DLQ-ni müşayiət etmək tələb olunan metadata

Minimum dəsti:
  • Uğursuzluq səbəbi: kod/səhv sinfi, stack/trace id.
  • Retray konteksti: 'attempt', 'maxAttempts', 'first _ seen _ ts', 'last _ attempt _ ts'.
  • Korrelyasiya: 'trace _ id', 'span _ id', 'tenant _ id', 'entity _ id', partizan açarı.
  • Orijinal offset/partition/sequence (lastik üçün) və ya message id.
  • Müqavilə/sxem/faydalı yük versiyası.
  • Idempotency-key/Request-id (varsa).
  • Marşrutlaşdırma mənbəyi: növbə adı/topika, konsumer qrupu.

5) DLQ-dən əvvəl retraj siyasətləri

DLQ-yə göndərmədən əvvəl düzgün təkrar cəhdlərdən istifadə edin:
  • Qısa retrasiyalar: 'maxAttempts' 2-5, exponential backoff + jitter, concurrency-da caps.
  • Kooperativ backpressure: artan səhvlər ilə rəqabətin azaldılması.
  • Səhvlərin təsnifatı: retryable ('5xx', taymaut) vs qeyri-retryable (validasiya, schema mismatch).
  • Gecikmiş növbələr (delay queue): 5s → 30s → 2m müvəqqəti uğursuzluqlar üçün.
  • Per-key izolyasiya: xüsusi açar «səs-küy» varsa, bütün partişan bloklamayın.

6) Təhlükəsiz redrave (DLQ-dən təkrar çatdırılma)

Redrave, DLQ-dən emala nəzarət olunan mesajların qaytarılmasıdır.

Prinsiplər:

1. Fixin yoxlanılması: yalnız kodu/konfiqurasiyanı/sxemi düzəltdikdən sonra və ya xarici asılılıqları bərpa etdikdən sonra redrayv.

2. İdempotentlik: prosessorlar təkrar davamlı olmalıdır (upsert, effekt-tolurant əməliyyatlar).

3. Deduplikasiya: 'idempotency _ key '/' message _ id '/' business _ key'.

4. Dozaj və pəncərələr: N mesajları batches, redrayv rate-limit, vaxt/partiyalar üzrə «pəncərələr».

5. Lokal validasiya: redrayvdan əvvəl sxemin sürətli yoxlanılması.

6. Prioritet: redrave qida trafikini əvəz etməməlidir (aşağı prioritet worker/ayrı hovuz).

7. Müşahidə: redrayv üçün ayrı-ayrı metriklər və treyslər; nəticə hesabatı (uğur/təkrar DLQ/itki).

7) Çatdırılma semantikası və qaydası

At-least-once - ən çox yayılmış rejim: idempotentlik və duplikasiya lazımdır.
At-most-once - DLQ söndürülə bilər; zərər riski. Yalnız icazə verilən itkilər zamanı istifadə edin.
Exactly-once (effektiv): biznes anbarında əməliyyatlar və dedups ilə əldə edilir; bahalı və spesifik.
Sifariş: DLQ adətən xüsusi açar/partiya üçün qaydanı pozur. Sifariş kritik olarsa, açar və ardıcıl olaraq yenidən oxuyun.

8) Sxemlər, müqavilələr və validasiya

Schema registry/müqavilələr: aydın versiyalaşdırma, backward/forward uyğunluğu ilə təkamül.
Girişdə validasiya: ağır addımlar əvvəl JSON Schema/Protobuf/Avro vasitəsilə ucuz yoxlama.
Uyğunsuzluq siyasəti: «sındırıcı» sahədə - dərhal 'SCHEMA _ INCOMPATIBLE' kodu ilə DLQ-də.
Redaction PII: DLQ-də yalnız lazım olanları saxlayın; həssas sahələr maska.

9) İdempotentlik və duplikasiya

Idempotency-key: prodüserdə "biznes mənası 'ndan (tenant + entity + operation + ts-bucket) formalaşdırın.
Dedup jurnalları: TTL ilə son 'N' açarları saxlayın; əməliyyatın «effekti» yadda saxlayın.
Upsert/merge: məhdudiyyətsiz «insert-only» çəkinin.
Sayd effektləri: xarici zənglər üçün - zəng etməzdən əvvəl "təkrarlama 'nı qeyd edin və yoxlayın.

10) Müşahidə və SLO

Metriklər (növbə/tenant/açar):
  • DLQ rate (msg/s), mesajların payı, DLQ-də orta/orta «yaş».
  • Redrayv müvəffəqiyyəti (%), təkrar DLQ payı.
  • Səbəblərin təsnifatı: schema, validation, timeout, dependency, unknown.
  • p95/p99 redrayve vs əsas axını emal gecikmə.
  • DLQ ölçüsü, daşınma riski.
Log/Trace:
  • Məcburi etiketlər: 'message _ id', 'entity _ id', 'tenant _ id', 'attempt', 'reason', 'redrive _ batch _ id'.
  • «DLQ filialının» izlənməsi: mənbədən yenidən müvəffəqiyyətə qədər.
SLO:
  • Uğurla işlənmiş mesajların payı T dəqiqədə X% ≥.
  • DLQ case üçün araşdırma və düzəliş vaxtı ≤ Y saat.
  • Maksimum mesaj «yaş» DLQ ≤ Z saat (alert ilə).

11) Təhlükəsizlik və uyğunluq

Ən kiçik imtiyazlar prinsipi üzrə giriş: redrave - yalnız operatorlara/playbuklara.
Audit: Kimlər və nə vaxt meta məlumatların redrayv/silinməsi/redaktəsini tetiklədi.
Sanitariya: Mərkəzi DLQ-yə köçürüldükdə əlavə PII/sirləri silin.
Retention: ayrı saxlama müddəti və DLQ üçün silinmə siyasəti.

12) Multi-tenant

Tags 'tenant _ id/plan': limitləri, redrayv prioritetləri, hesabatları ayırd edin.
Per-tenant DLQ və ya partiyalar: «səs-küylü» müştəri ümumi DLQ-ni vurmamalıdır.
Billing/kvotalar: DLQ həcmi və usage redrayv dəyəri nəzərə alınır.

13) Konfiqurasiya şablonları (nümunə)

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) Əməliyyat pleybukları (runbooks)

1. Anormal DLQ artımı: throttling prod-müştəri daxil edin, top səbəbləri təhlil edin, relizləri/sxemləri yoxlayın.
2. Schema mismatch: sxem geri/fiksasiya, adapter miqrasiyası, yoxlandıqdan sonra redrive.
3. Xarici asılılıq əlçatmazdır: retraj fasiləsi, bərpa edildikdən sonra delay-növbə, redrive.
4. redrave sonra təkrar DLQ: «kölgə» prosessor/simulyator yandırmaq, idempotent yoxlamaq, batch daraltmaq.
5. DLQ daşması: arxiv-storage evakuasiya, açar/səbəblərə görə seçici redrave daxil.

15) Test və xaos

Enjeksiyon səhvlər: schema-break, validation, taymaut, 1-on-N «yapışqan» səhvlər.
Kütləvi redrave: Dozaj və prod təsiri yoxlanılır.
Out-of-order ardıcıllığı: ensure düzgün açar emalı.
Faydalı yük korrupsiyası: validasiya və təhlükəsiz uğursuzluq.
Redrave worker düşdükdən sonra bərpa: batch əməliyyatlarının idempotentliyi.

16) Tipik səhvlər

DLQ → meta məlumatların olmaması səbəbləri klasterləşdirmək və təhlükəsiz redrayv etmək mümkün deyil.
Limitsiz kütləvi redrayv → prodakşenin təkrar deqradasiyası.
No idempotentity/deadup → Duble və yan təsirləri.
Sanitariya olmadan mərkəzi DLQ PII qarışdırın.
Mesajların təkamülü zamanı sxemlərin/müqavilələrin olmaması → «sürprizlər».
Tenant/açar partiyasız yeganə ümumi DLQ.
Qeyri-retryable səhvlər üçün erkən DLQ əvəzinə sonsuz retrajlar.

17) Sürətli reseptlər

Adi iş axını: 3-4 cəhd, jitter ilə eksponensial backoff, səhvlərin erkən təsnifatı, tam metadata ilə DLQ.
Kritik hadisələr (ödəniş): ciddi idempotentlik, qısa müddət, minimum cəhd, sürətli DLQ və əl təhlili.
Fix sonra kütləvi redrive: kiçik batches (100-500), rate-limit, ayrı hovuz worker, müvəffəqiyyət monitorinqi> 95% sürət artmadan əvvəl.
Multi-tenant: redrayv üçün per-tenant limitlər, DLQ-nin ən yaxşı müştəri generatorları haqqında hesabat.

Nəticə

DLQ «zibil qutusu» deyil, nəzarət olunan etibarlılıq dövrəsidir. Dəqiq vurma qaydaları, zəngin meta məlumatlar, idempotentlik və deuplikasiya, təhlükəsiz dozalı redrayv, sxemlərin nizam-intizamı və müşahidə edilməsi SLO üçün təhlükədən zəhərli mesajları idarə olunan mühəndislik prosesinə çevirir - başa düşülən playbook, proqnozlaşdırılan xərclər və istifadəçilərə minimum təsir ilə.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.