Designing for Failure
Ishdan chiqishga tayyor bo'lib loyihalash
Restoranda buyurtma qilgan taomingiz uchun kerakli ingredient TUGAB qolsa, yaxshi ofitsiant sizga "kechirasiz, taom yo'q" deb ESHIKNI yopib qo'ymaydi — u "bu ingredient tugagan, lekin O'XSHASH taomni taklif qilaman" deydi. Restoran BUTUNLAY YOPILMAYDI, faqat bitta imkoniyat CHEKLANADI. Yaxshi tizim dizayni ham xuddi shunday ishlaydi — bunga graceful degradation (nazokat bilan pasayish) deyiladi.
Reliability and Redundancy darsida ko'rganingizdek, katta tizimda ERTAMI-KECHMI biror qism ishdan chiqadi — bu ISTISNO emas, KUTILGAN holat. "Designing for failure" (ishdan chiqishga tayyor bo'lib loyihalash) — tizimni "hech qachon ishdan chiqmaydi" deb FARAZ qilib emas, balki "albatta biror joyda ishdan chiqadi, shunda nima bo'ladi" deb SO'RAB loyihalash falsafasi.
Bu falsafaning ikkita ANIQ vositasi — Introduction to Microservices kursida allaqachon ko'rgansiz. Retry with Exponential Backoff darsi — vaqtinchalik xatoga duch kelganda, DARHOL emas, balki har safar KO'PROQ kutib qayta urinish orqali, vaqtinchalik muammoni "kutib o'tish"ni o'rgatadi. Circuit Breaker in Services darsi esa — ishlamay qolgan xizmatga QAYTA-QAYTA murojaat qilib, o'sha xizmatni yanada OG'IRLASHTIRISH o'rniga, vaqtincha undan VOZ KECHIB, boshqa yo'l (masalan, keshdagi eski ma'lumot yoki soddalashtirilgan javob) bilan davom etishni ta'minlaydi.
- •Timeout — har bir tashqi so'rovga MAKSIMAL kutish vaqti belgilang, aks holda bitta sekin xizmat butun tizimni "osib qo'yishi" mumkin
- •Fallback (zaxira javob) — asosiy manba ishlamasa, soddaroq yoki eskiroq (lekin BOR) javob qaytaring, hech narsa qaytarmaslikdan ko'ra
- •Bulkhead (bo'linma) — bitta xizmatning ishdan chiqishi, BOSHQA xizmatlarga ishlatiladigan resurslarni (masalan, connection pool) tugatib qo'ymasligi uchun resurslarni AJRATIB qo'yish
Muhim farq — "ishdan chiqishning oldini olish" (bu MUMKIN emas, chunki tarmoq, disk, server — barchasi ERTAMI-KECHMI muammo beradi) bilan "ishdan chiqish YUZ berganda, ta'sirini CHEKLASH" (bu tizim dizaynining haqiqiy vazifasi) orasidagi farqni tushunish. Yaxshi tizim — HECH QACHON ishdan chiqmaydigan tizim emas, balki ishdan chiqish YUZ berganda, foydalanuvchi buni deyarli SEZMAYDIGAN tizim.
Key Takeaway
Key Takeaway:
Katta tizimda qismlar ertami-kechmi ishdan chiqadi — buni oldini olishga emas, ta'sirini cheklashga (timeout, retry with backoff, circuit breaker, fallback javoblar orqali) e'tibor qarating. Maqsad — hech qachon buzilmaydigan tizim emas, balki buzilishni foydalanuvchi sezmaydigan tizim.
NEXT UP
Monolith vs Microservices at the Architecture Level