Bosh sahifa Wiki Persistent queue

Persistent queue

Persistent queue — pipeline yoki messaging komponentida navbatdagi ma’lumotni faqat xotirada emas, diskdagi bardavom formatda saqlaydigan buferdir. Process restarti yoki output vaqtincha ishlamaganda yozuvlar saqlanib qoladi. U availabilityni oshiradi, ammo cheksiz durability yoki exactly-once deliveryni avtomatik bermaydi.

Yozish va acknowledgement

Record queuega append qilinadi va belgilangan durability darajasiga ko‘ra diskka flush qilinadi. Consumer yoki output muvaffaqiyatni bildirgach entry o‘chirishga yaroqli bo‘ladi. Segmentli log formatida butun segment bo‘shagach reclaim qilinishi mumkin.

Ackdan oldin record o‘chirilsa crashda loss, ackdan keyin cleanup kechiksa duplicate replay bo‘lishi mumkin. Queue delivery odatda at-least-once semantikaga yaqin. Downstream idempotency duplicate ni boshqaradi.

Fsync va performance

Har recordda fsync kuchli durability, lekin yuqori latency beradi. Batch fsync bir nechta yozuvni bir disk flushga birlashtiradi; power lossda oxirgi batch yo‘qolishi mumkin. Filesystem va storage controller cache semanticsi ham hisobga olinadi.

Sequential append HDD va SSD uchun samarali. Compression diskni kamaytiradi, CPU va recovery vaqtini oshiradi. Encryption at rest queue ichidagi sensitiv log yoki eventni himoya qiladi, key mavjud bo‘lmasa restart recovery amalga oshmaydi.

Capacity va overflow

Queue maksimal byte, record yoki vaqt limiti bilan boshqariladi. Output uzoq ishlamasa backlog diskni to‘ldiradi. Disk to‘lishi collectorning o‘z logi, operatsion tizim va boshqa workloadga ta’sir qilmasligi uchun alohida volume va quota ishlatiladi.

Overflowda inputni block qilish, yangi yoki eski recordni drop qilish, yoxud secondary storagega spill qilish mumkin. Audit va oddiy debug data bir xil drop siyosatiga ega bo‘lmasligi kerak. Eng eski record yoshi tiklanish maqsadini ko‘rsatadi.

Recovery

Startupda queue segmentlar va checksumlarni tekshiradi. Yarim yozilgan oxirgi entry truncate qilinishi yoki quarantinega ko‘chirilishi mumkin. Butun queue buzilgan deb o‘chirib yuborish data lossga olib keladi; recovery tool va backup siyosati kerak.

Software upgrade on-disk format bilan backward compatibilityga ega bo‘lishi kerak. Downgrade yangi formatni o‘qiy olmasligi mumkin. Rolling update vaqtida bir volume ni ikki process bir vaqtda ochishi lock bilan to‘xtatiladi.

Oqimni tiklash

Destination qaytganda queue ni maksimal tezlikda drain qilish backendni yana overload qilishi mumkin. Rate limit va parallelism current live traffic bilan backlog o‘rtasida adolatni saqlaydi. Oldingi recordlar eskirgan bo‘lsa TTL policy bilan alohida ko‘riladi.

Queue depth, disk usage, enqueue/dequeue rate, retry va corruption metriclari kuzatiladi. Persistent queue mavjudligi monitoringni keraksiz qilmaydi; to‘lib ketishdan oldin operator signal oladi.

Disk formati va tiklanish

Queue diskda segmentlarga bo‘linishi mumkin. Yangi yozuv active segmentga append qilinadi, to‘liq acknowledgment olingan eski segment esa o‘chiriladi. Process kutilmaganda to‘xtasa, startup scan checksum va record chegaralari orqali oxirgi to‘liq yozuvni topadi; yarim yozilgan tail kesib tashlanadi. fsync chastotasi durability va throughput o‘rtasidagi muvozanatni belgilaydi. Disk to‘lganda yangi eventni block qilish, rad etish yoki eski eventni o‘chirish siyosati oldindan aniq bo‘lishi kerak.

Queue encryption disk o‘g‘irlanishiga qarshi yordam beradi, ammo ishlayotgan processdagi o‘qish huquqini cheklamaydi. File permission, key rotation va backup siyosati ham kerak. Queue katalogini oddiy fayl nusxasi bilan ko‘chirishdan avval writer to‘xtatiladi yoki storage snapshotning consistency kafolati ishlatiladi.

Bog‘liq tushunchalar

Message queue, Buffer, Write-ahead log, Backpressure, Acknowledgement, Retry, Disk persistence