Junior — Middle
Ar turite patirties naudodami Circuit Breaker modelį projektuose?
sobes.tech AI
Atsakymas iš AI
Circuit Breaker modelis naudojamas siekiant padidinti sistemos atsparumą sąveikaujant su išorinėmis paslaugomis ar komponentais, kurie gali būti neprieinami arba veikia su klaidomis. Go projektuose šį modelį taikiau siekiant išvengti pakartotinų nesėkmingų nuotolinių API kvietimų, kas leido sistemai greičiau atsigauti ir neperkrauti paslaugos.
Veikimo principas: jei klaidų skaičius viršija nustatytą ribą, Circuit Breaker «atidaromas» ir tolesni kvietimai iš karto grąžina klaidą, nesistengdami pasiekti paslaugos. Po tam tikro laiko bandoma «uždaryti» grandinę ir patikrinti, ar paslauga atsigavo.
Pavyzdys naudojant biblioteką github.com/sony/gobreaker:
import (
"fmt"
"github.com/sony/gobreaker"
)
func main() {
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{})
result, err := cb.Execute(func() (interface{}, error) {
// išorinės paslaugos kvietimas
return "atsakymas", nil
})
if err != nil {
fmt.Println("Circuit breaker atidarytas arba klaida:", err)
} else {
fmt.Println("Sėkmė:", result)
}
}