Resource exhaustion — tizimdagi cheklangan resurs talabdan ortiq band bo‘lib, yangi ishni qabul qilish yoki mavjud xizmatni davom ettirish qobiliyati pasayadigan holatdir. Resurs CPU, xotira, disk joyi, file descriptor, thread, connection, port, queue yoki tashqi xizmat kvotasi bo‘lishi mumkin. Sabab qonuniy yuk, dastur xatosi yoki ataylab uyushtirilgan DoS hujumi bo‘ladi.
Resurs turlari
Memory leak ajratilgan xotirani qaytarmay, processni asta-sekin limitga olib keladi. Disk log rotation ishlamasa yoki vaqtinchalik fayl tozalanmasa to‘ladi. File descriptor yopilmasa socket va fayl ochish muvaffaqiyatsiz bo‘ladi. Thread-per-request modeli ko‘p sekin ulanishda thread poolni tugatishi mumkin.
CPU saturationda navbat oshadi va latency keskin ko‘tariladi. Bu faqat 100 foiz CPU emas: bitta serial lock yoki event-loopni bloklagan amal ayrim core bo‘sh bo‘lsa ham xizmatni to‘xtatadi. Network bandwidth va connection tracking jadvali ham alohida cheklovdir.
Cascade mexanizmi
Bir xizmat sekinlashganda upstream so‘rovlar uzoqroq ochiq qoladi. Client retry qilsa yuk yana oshadi, connection pool band bo‘ladi va boshqa dependency’lar ham ta’sirlanadi. Shu tariqa kichik bottleneck cascading failurega aylanadi.
Cheksiz queue vaqtincha trafikni yashiradi, ammo xotira sarfi va eski so‘rov latency’sini oshiradi. Tizim real quvvatdan ko‘p ishni qabul qilgan bo‘lsa, bounded queue va load shedding ortiqcha talabni erta rad etib, sog‘lom so‘rovlar uchun resurs saqlaydi.
Himoya qatlamlari
Rate limit foydalanuvchi, token yoki IP bo‘yicha talab tezligini cheklaydi. Concurrency limit ayni vaqtda ishlayotgan vazifalar sonini boshqaradi. Timeout resursning cheksiz kutib qolishiga yo‘l qo‘ymaydi. Circuit breaker nosog‘lom dependency’ga yangi so‘rov yuborishni vaqtincha to‘xtatadi.
Bulkhead pool va queue’larni workloadlar orasida ajratib, bir mijoz yoki funksiya barcha sig‘imni egallashining oldini oladi. OS cgroup yoki container limitlari bir processning host resurslarini tugatishini cheklaydi. Limit bilan birga request va limit qiymati mos bo‘lmasa OOM kill yoki throttling kutilmagan bo‘lishi mumkin.
Aniqlash
Monitoring usage’dan tashqari saturation, queue depth, wait time, allocation failure va reject sonini ko‘rsatadi. Xotira uchun RSS, heap, page fault va swap; disk uchun free bytes hamda inode; socket uchun descriptor va ephemeral port kuzatiladi. Faqat o‘rtacha qiymat qisqa portlashni yashirishi mumkin.
Capacity test barqaror yuk, spike, dependency sekinligi va uzoq davom etadigan soak testni qamrab oladi. Profiling qaysi obyekt, lock yoki funksiya resursni ushlab turganini ko‘rsatadi. Fault injection recovery mexanizmini ishlab turgan tizimda tekshiradi.
Tiklanish
Incidentda avval yangi yuk kamaytiriladi, xavfsiz bo‘lsa sig‘im oshiriladi va eng ko‘p resurs band qilgan ish ajratiladi. Restart vaqtincha yordam berishi mumkin, lekin leak yoki trafik sababi qolsa muammo qaytadi. Post-incident tahlil limit, alert, retry budget va capacity modelni yangilaydi.
Admission control
Tizim sig‘imi allaqachon band bo‘lganda yangi so‘rovni qabul qilib navbatga qo‘yish mavjud ishlarning ham deadline’dan chiqishiga sabab bo‘lishi mumkin. Admission control so‘rov narxi, tenant kvotasi va joriy saturationga qarab ishni boshlashdan oldin qaror qiladi. Rad javobi retry-after yoki aniq overload status bilan beriladi. Muhim trafik uchun reserved capacity saqlanishi mumkin. Batch ishlar peak vaqtda pause qilinadi, interactive so‘rovlar esa ustuvor navbatdan foydalanadi. Bu siyosat load test va real telemetriya bilan muntazam yangilanadi.
Bog‘liq tushunchalar
Denial of service, Rate limiting, Load shedding, Circuit breaker, Bulkhead, Capacity planning