GoDasturchi
Designing for Failure

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

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