Circuit Breaker (O'chirgich, To'xtatuvchi)

|
Circuit Breaker (O'chirgich, To'xtatuvchi)
|
Sana | 26.07.2024 | Hajmi | 1,21 Mb. | | #268701 |
Bog'liq Circuit Breaker (O\'chirgich, To\'xtatuvchi)
CIRCUIT BREAKER PATTERN (Avtomat o'chirgich)
NIMA?
Muammo nimadaligini topa olmadim, Shuning uchun uni nomini o’zgartirib qo’yaverdim
#Circuit breaker -
Muammo nimada?
CIRCUIT BREAKER PATTERN (Avtomat o'chirgich)
Men "Circuit Breaker namunasi" deganda, men avtomat o'chirgich arxitekturasini (Patternini ) nazarda tutyapman. Netflix o'chirgichlar bilan ishlash uchun Hysterix kutubxonasini ishlab chiqdi. Spring Boot ilovasida resilience4j kutubxonasidan foydalangan holda avtomatik toʻxtatuvchidan qanday foydalanishimiz mumkinligini koʻrsataman.
AVTOMATIK O'CHIRIVCHI nima?
Avtomatik o'chiruvchi tushunchasi elektrotexnikadan keladi. Aksariyat elektr tarmoqlarida o'chirgichlar tarmoqni haddan tashqari oqim yoki qisqa tutashuv
natijasida yuzaga keladigan shikastlanishdan himoya qiluvchi kalitlardir. Xuddi shunday, dasturiy ta'minotda, agar biz tashqi servisga yuboradigan so'rovlarimiz muvaffaqiyatsiz bo'lishini yoki kutish vaqt tugashini bilsak, o'chirgich tashqi servisga so'rovni to'xtatadi.
Ya’ ni bizni xonadonda tashqaridan kuchli
kuchlanish kelsa yoki ichki tomondan qisqa
tutashuvlar sodir bo’lsa avtomatik o’chirgich
buni oldini olish uchun ishlab ketadi xonadon
dagi elektr tarmog’ini avtonatik uzadi.
CIRCUIT BREAKER pattern
Ushbu yondashuv resurslarni tejash va tashqi servisga so'rovlar bilan bog'liq muammolarni faol ravishda bartaraf etishning afzalliklariga ega. Avtomatik o'chirgich oldingi so'rovlar tarixiga asoslanib, so'rovni to'xtatish to'g'risida qaror qabul qiladi.
CIRCUIT BREAKER pattern
Circuit Breaker qanday ishlashini ko’rib chiqamiz.
A xizmati B xizmatini chaqiradi, lekin afsuski, B xizmati mavjud emas yoki vaqtincha javob bera olmaydi. Shunday qilib, A xizmati B xizmatidan javob kutishi yoki yuzaga kelgan istisnolarni hal qilishi mumkin.
B xizmatiga yo'naltirilgan keyingi so'rovlar ham shunga o'xshash muammolarga duch keladi, bu esa foydalanuvchilarni kutshi va aniq xato sababini bilishda mumammoga uchraydi. Bunday hollarda, Circuit brekaer ma'lum vaqt uchun so'rov yuborishni to'xtatish, sozlangan kutish vaqti davomida, B Servis ishlayotganligini tekshirish uchun cheklangan miqdordagi so'rovlarni yoqish orqali yordam berishi mumkin.
Agar bu so'rovlar muvaffaqiyatli bo'lsa, u mikroservislarga normal operatsiyalarni davom ettirishga imkon beradi. Agar yo'q bo'lsa, u yana vaqt tugashini boshlaydi.
CIRCUIT BREAKER pattern
Ammo so'rovlarni boshqarishning muqobil usullari mavjud. Odatda Avtomatik o'chirgich oldingi so'rovlarni kuzatib boradi. Aytaylik, 5 so'rovdan 4 tasi muvaffaqiyatsiz yoki kutish vaqti tugaydi, keyin keyingi so'rov muvaffaqiyatsiz bo'ladi.
Bu tashqi xizmatga so'rov yuborishda xatolarni faolroq hal qilishga yordam beradi va so'rov yuboruvchilar xizmati javobni boshqacha hal qilishi mumkin,
bu esa ilova foydalanuvchilariga xato sahifasidan ko'ra yaxshiroq narsani beradi.
Avtomat o'chiruvchi ishlashini yana bir misoli, tashqi servis xizmatlari ma'lum vaqt davomida o'chirilgan bo'lsa, Avtomat o'chiruvchisi ishlab ketadi va keyingi so'rovlarni oldini oladi. tashqi servis muammosini hal qilmaguncha.
CIRCUIT BREAKER pattern
Circuit Breaker uchta holatga ega:
1. Yopiq (CLOSE) 2. Ochiq(OPEN) 3. Yarim Ochiq (HALF-OPEN).
CIRCUIT BREAKER pattern
Yopiq (CLOSED)
Yopiq - Circuit Breakerning dastlabki holati. Mikroservislar muammosiz ishlaganda va o'zaro aloqada bo'lganda, Circuit Breaker yopiladi. Hammasi nazorat ostida bo’lganda.
U konfiguratsiya qilingan vaqt oralig'ida sodir bo'lgan nosozliklar sonini doimiy ravishda kuzatib boradi.
Agar muvaffaqiyatsizlik darajasi belgilangan chegaradan oshsa, uning holati ochiq holatga o'zgaradi. Agar yo'q bo'lsa, u muvaffaqiyatsizliklar sonini va kutish muddatini tiklaydi.
CIRCUIT BREAKER pattern
Ochiq (OPEN)
Ochiq holatda, Circuit Breaker mikroservislar orasidagi o'zaro ta'sir qiluvchi oqimni bloklaydi.
So'rov chaqiruvlari bajarilmaydi va istisnolar tashlanadi. Ochiq holat kutish vaqti tugaguniga qadar qoladi, keyin Yarim Ochiq (Half_Open) holatiga o'zgartiriladi.
Kutish vaqti siz qilgan konfiguratsiyaga bog’liq
CIRCUIT BREAKER pattern
Yarim Ochiq (Half_Open)
Yarim Ochiq (Half_Open) holatida Circuit Breaker cheklangan miqdordagi so'rovlarni o'tkazishga imkon beradi.
Agar muvaffaqiyatsizlik darajasi belgilangan chegaradan katta bo'lsa, u yana Ochiq (Open) holatga o'tadi. Aks holda, bu Yopiq (Close) holatga qaytadi
Yarim Ochiq (Half Open) holatidagi muaffaqtiyatsizliklarni ham konfiguratsiya qilinadi
CIRCUIT BREAKER pattern
KONFIGURATSIYASI
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.slidingWindowSize(10)
.slowCallRateThreshold(65.0f)
.slowCallDurationThreshold(Duration.ofSeconds(3))
.build();
CircuitBreakerRegistry circuitBreakerRegistry =
CircuitBreakerRegistry.of(circuitBreakerConfig);
CircuitBreaker cb = circuitBreakerRegistry.circuitBreaker("BooksSearchServiceBasedOnCount");
CIRCUIT BREAKER pattern
Circuit breaker turlari (COUNT_BASED va TIME_BASED)
slidingWindowType() - Bu konfiguratsiya surma oyna deb ataladi. Asosan, bu Circuit Breakerning qanday ishlashini hal qilishga yordam beradi.
Surma oynaning ikki turi mavjud: COUNT_BASED va TIME_BASED
COUNT_BASED - agar oxirgi N ta chaqiruvlar soni bajarilmasa yoki sekin bo'lsa, sanashga asoslangan Circuit breaker holatni yopiqdan (CLOSE) ochiqga (OPEN) o'tkazadi.
TIME_BASED - so'nggi N soniyadagi javoblar muvaffaqiyatsiz yoki sekin bo'lsa, vaqtga asoslangan Circuit breaker ochiq (OPEN) holatga o'tadi.
CIRCUIT BREAKER pattern
failRateThreshold() - muvaffaqiyatsizlik darajasining foiz chegarasini o'rnatadi. Agar qo'ng'iroqlarning x foizi bajarilmasa, Circuit Breaker o'chadi.
slidingWindowSize() - bu sozlama Circuit Breakerni yoqishda hisobga olinadigan chaqiruvlar sonini aniqlashga yordam beradi.
slowCallRateThreshold() - past chaqiruv tezligi chegarasini foizda o'rnatadi. Agar chaqiruvlarning x foizi sekin bo'lsa, Circuit breaker o'chiriladi.
slowCallDurationThreshold() - chaqiruvlar sekin deb hisoblangan vaqt davomiyligi chegarasini sozlaydi.
minimumNumberOfCalls() - Circuit breakerni xato tezligini hisoblashidan oldin zarur bo'lgan minimal chaqiruvlar soni.
CIRCUIT BREAKER pattern
ignoreException() - Bu parametr Circuit Breakerni e'tiborsiz qoldiradigan va tashqi servis xizmat chaqiruvi muvaffaqiyatli yoki muvaffaqiyatsiz bo'lganda hisobga olinmaydigan istisnoni sozlash imkonini beradi.
waitDurationInOpenState() - Circuit Breaker yarim ochiq holatga kirishdan oldin ochiq holatda qolishi kerak bo'lgan vaqt. Default qiymat 60 soniya.
|
| |