Sobes.tech
Junior — Middle

Van tapasztalata a Circuit Breaker mintázat használatában projektekben?

sobes.tech MI

Válasz az MI-től

A Circuit Breaker minta arra szolgál, hogy növelje a rendszer ellenálló képességét külső szolgáltatásokkal vagy komponensekkel való kommunikáció során, amelyek elérhetetlenek lehetnek vagy hibákkal működhetnek. Go projektekben ezt a mintát alkalmaztam, hogy megakadályozzam a távoli API-k ismételt sikertelen hívásait, ami gyorsabb helyreállást tett lehetővé a rendszer számára, és megakadályozta a szolgáltatás túlterhelését.

Működési elv: ha a hibák száma meghalad egy küszöbértéket, a Circuit Breaker «kinyílik», és a további hívások azonnal hibát adnak vissza anélkül, hogy megpróbálnák elérni a szolgáltatást. Egy idő után megpróbálja «bezárni» a kört, és ellenőrzi, hogy a szolgáltatás helyreállt-e.

Példa a github.com/sony/gobreaker könyvtár használatára:

import (
    "fmt"
    "github.com/sony/gobreaker"
)

func main() {
    cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{})

    result, err := cb.Execute(func() (interface{}, error) {
        // külső szolgáltatás hívása
        return "válasz", nil
    })

    if err != nil {
        fmt.Println("A Circuit Breaker nyitva vagy hiba:", err)
    } else {
        fmt.Println("Siker:", result)
    }
}