Cascading failure — taqsimlangan tizimning bir qismidagi nosozlik yoki sekinlashuv boshqa qismlarga tarqalib, dastlabki muammodan ancha katta uzilishga aylanishidir. Bitta xizmatning javobi kechiksa, unga bog‘liq xizmatlarda navbatlar, qayta urinishlar va resurs bandligi ortadi; natijada sog‘lom komponentlar ham ishlamay qolishi mumkin.
Tarqalish mexanizmi
Mikroxizmatli tizimda foydalanuvchi so‘rovi bir necha quyi xizmatni ketma-ket yoki parallel chaqiradi. Ulardan biri sekinlashganda yuqori qatlamdagi ishchi oqimlar javob kutib turadi. Ularning soni cheklangan bo‘lsa, yangi so‘rovlar navbatga yig‘iladi. Navbatning o‘sishi kechikishni oshiradi, mijozlar timeout oladi va qayta urinish boshlaydi. Qo‘shimcha urinishlar allaqachon qiynalayotgan xizmatga ko‘proq yuk yuborib, ijobiy teskari aloqa hosil qiladi.
Umumiy resurslar ham tarqalish kanali bo‘ladi. Bitta sekin bog‘liqlik barcha ulanish havzasini, xotirani yoki CPU ishchi oqimlarini egallasa, boshqa mustaqil funksiyalar ham resurs ololmaydi. Xizmat topish, autentifikatsiya yoki markaziy ma’lumotlar bazasi kabi keng qo‘llanadigan komponentdagi nosozlik ta’sir doirasini yanada kattalashtiradi.
Himoya mexanizmlari
Timeout va umumiy deadline kutishning cheksiz davom etishini to‘xtatadi. Concurrency limit bir bog‘liqlikka yuboriladigan parallel ishlar sonini cheklaydi. Bulkhead usuli resurslarni alohida havzalarga bo‘lib, bitta funksiyaning boshqalarini siqib chiqarishiga yo‘l qo‘ymaydi. Circuit breaker ketma-ket xatolar ko‘payganda chaqiruvlarni vaqtincha tez rad etib, quyi xizmatga tiklanish imkonini beradi.
Yukni tashlash, ya’ni load shedding, tizim ko‘tara olmaydigan yangi ishni erta rad etadi. Bu qaror foydalanuvchi, endpoint yoki so‘rov ustuvorligiga qarab qo‘llanishi mumkin. Keshdagi eskirgan, lekin yaroqli javobni berish yoki majburiy bo‘lmagan funksiyani o‘chirish ham asosiy xizmatni saqlab qoladi. Qayta urinishlarda son chegarasi, backoff va jitter zarur; har bir qatlam mustaqil ravishda qayta urinsa, urinishlar geometrik ko‘payishi mumkin.
Kuzatuv va sinov
Faqat xato foizini kuzatish yetarli emas. Navbat uzunligi, faol ishlar, ulanish havzasi bandligi, timeoutlar, bekor qilingan ishlar va kechikish percentillari erta signal beradi. Taqsimlangan tracing qaysi bog‘liqlik so‘rov vaqtini egallayotganini ko‘rsatadi. Xizmatlar o‘rtasidagi dependency xaritasi ta’sir doirasini tushunishga yordam beradi.
Nosozlik mashqlari boshqariladigan muhitda kechikish, paket yo‘qolishi yoki qisman mavjudlikni kiritib, himoya mexanizmlarining ishlashini tekshiradi. Sinovda tizimning faqat xatoni qaytarishi emas, resurslarni tez bo‘shatishi va tiklangach normal holatga qaytishi ham baholanadi. Hodisadan keyingi tahlil individual xatoni emas, nosozlikning tarqalish yo‘llari va nazorat mexanizmlarini o‘rganadi.
Tiklanish dinamikasi
Nosoz komponent qaytgach trafikni birdan to‘liq hajmda yuborish yangi qulashga sabab bo‘lishi mumkin. Circuit breaker half-open holatda oz sonli sinov chaqiruviga ruxsat beradi, autoscaling esa yangi instansiyalar tayyor bo‘lish vaqtini hisobga oladi. Navbatdagi eskirgan ishlarni bajarish o‘rniga deadline’i o‘tgan so‘rovlar tashlanadi. Keshlar bir vaqtda yangilanib origin xizmatga zarba bermasligi uchun muddatlarga jitter beriladi. Tiklanish ko‘rsatkichi faqat xato foizi tushishi emas, navbat, resurs bandligi va kechikishning barqaror normal qiymatga qaytishini ham qamrab oladi.
Capacity planning normal yuk bilan birga bitta zona, replika yoki dependency yo‘qolgan holatdagi qolgan quvvatni hisoblaydi. Sog‘lom paytda barcha resursni band qilish nosozlik paytida zaxira qoldirmaydi. Xizmat darajasi maqsadi degradatsiya rejimida qaysi funksiyalar saqlanishini oldindan belgilaydi.
Bog‘liq tushunchalar
Circuit breaker, Bulkhead, Load shedding, Backpressure, Retry storm, Timeout, Distributed tracing