Bosh sahifa Wiki Timeout

Timeout

Timeout — operatsiya belgilangan vaqt ichida yakunlanmasa, kutishni to‘xtatish va nazoratni chaqiruvchiga qaytarish mexanizmidir. U nosoz yoki sekin bog‘liqlik sabab resurslarning cheksiz band bo‘lib qolishini oldini oladi. Timeout xatoning sababini aniq bildirmaydi: server ishlagan, javob yo‘lda kechikkan yoki natija tayyor bo‘lib, mijoz muddatdan oldin uzilgan bo‘lishi mumkin.

Timeout turlari

Connection timeout TCP yoki boshqa transport ulanishini o‘rnatishga ajratilgan vaqtni cheklaydi. Read timeout ulanish mavjud bo‘lgandan keyin ma’lumot kelishini kutadi. Write timeout mijoz yoki serverning bayt yuborish jarayonini chegaralaydi. Pool timeout esa bo‘sh ulanish, oqim yoki worker olish uchun kutishga tegishli.

Umumiy request deadline butun operatsiyaning qolgan vaqt budjetini bildiradi. Har ichki chaqiruvga alohida to‘liq timeout berilsa, ketma-ket xizmatlar jami muddatni bir necha baravar oshiradi. Deadline pastga uzatilib, navbat, retry va hisoblash shu qolgan vaqt ichida bajariladi.

Qiymat tanlash

Juda uzun timeout resurslarni band qiladi va foydalanuvchiga sekin xato beradi. Juda qisqa timeout normal kechikish tebranishlarini nosozlikka aylantirib, qayta urinishlar bo‘ronini keltirishi mumkin. Qiymat xizmatning latency taqsimoti, biznes muddati, tarmoq geografiyasi va yuqori oqimdagi deadline asosida tanlanadi.

Faqat o‘rtacha kechikish yetarli emas. p95, p99 va eng yomon boshqariladigan holatlar ko‘riladi. Cold start, garbage collection, compaction yoki deploy vaqtidagi tebranishlar alohida sinovdan o‘tkaziladi. Bir xil global qiymat barcha endpoint uchun mos kelmasligi mumkin: kichik metadata so‘rovi va katta eksport boshqa budjet talab qiladi.

Retry va idempotency

Timeoutdan keyin avtomatik retry faqat amalning natijasi noaniq ekanini hisobga olishi kerak. GET odatda xavfsiz takrorlanadi. To‘lov yaratish kabi POST serverda bajarilgan, lekin javobi yo‘qolgan bo‘lishi mumkin. Idempotency key bir xil biznes amalining takroriy so‘rovlarini bitta natijaga bog‘laydi.

Retry soni cheklanadi, exponential backoff va jitter qo‘llanadi. Aks holda sekin xizmatga barcha mijozlar bir vaqtda qayta murojaat qilib, yukni oshiradi. Retry budget umumiy deadline ichida qoladi. Circuit breaker vaqtincha muvaffaqiyatsiz bog‘liqlikka yangi ish yuborishni kamaytirishi mumkin.

Bekor qilish va resurslar

Mijoz kutishni to‘xtatgani serverdagi ish avtomatik tugadi degani emas. Cancellation signali downstream xizmat, database query va fon vazifasiga uzatilmasa, “zombi” ishlar davom etib resurs sarflaydi. Ayrim amalni o‘rtada to‘xtatish xavfsiz bo‘lmasa, server uni tugatadi, ammo natijani audit va idempotency holatida saqlaydi.

Kuzatuv timeoutni oddiy “500” ichiga yashirmaydi. Bosqich, target, deadline, sarflangan vaqt va retry raqami strukturali log hamda tracega yoziladi. Timeoutlar sonining oshishi sabab emas, signal bo‘lib, saturation, lock, paket yo‘qotilishi yoki sekin query metrikalari bilan bog‘lanadi.

Server va client chegarasi

Reverse proxy, application server, database driver va tashqi API clientning har birida alohida timeout bo‘lishi mumkin. Tashqi qatlam ichki qatlamdan oldin uzilsa, ichki ish bekorga davom etadi; ichki qatlam juda erta uzilsa, tashqi SLA bajarilmaydi. Budjet odatda tashqaridan ichkariga kamayib boradi va cleanup hamda javob qaytarish uchun zaxira qoldiradi. Konfiguratsiya inventari deploydan keyin effektiv qiymatlar bilan tekshiriladi.

Streaming holati

Uzoq streaming ulanishda umumiy request timeout mos kelmasligi mumkin. Idle timeout ma’lum vaqt bayt kelmasa uzadi, heartbeat esa tiriklikni bildiradi. Sekin, lekin faol transferga progress deadline qo‘llanadi. Heartbeat faqat transport tirikligini ko‘rsatib, biznes oqimi oldinga siljiyotganini kafolatlamaydi.

Bog‘liq tushunchalar

Deadline, Retry, Idempotency, Circuit breaker, Cancellation, Latency percentile, Backoff