Sobes.tech
Junior — Middle

გაქვს გამოცდილება პროექტებში Circuit Breaker ნიმუშის გამოყენებაში?

sobes.tech AI

პასუხი AI-სგან

საკრუიტო გამყოფის ნიმუში გამოიყენება სისტემის მდგრადობის გაზრდისთვის გარეგანი სერვისების ან კომპონენტებთან ურთიერთობის დროს, რომლებიც შეიძლება იყოს მიუწვდომელი ან მუშაობდეს შეცდომებით. Go პროექტებში მე ამ ნიმუშს ვიყენებდი დისტანციური API-ების განმეორებითი გაუმართლებელი ზარების თავიდან ასაცილებლად, რაც საშუალებას აძლევდა სისტემას სწრაფად აღდგეს და არ გადატვირთოს სერვისი.

მოქმედების პრინციპი: თუ შეცდომების რაოდენობა გადის ზღვარს, საკრუიტო გამყოფი «გახსნდება» და შემდეგი ზარები დაუყოვნებლივ აბრუნებს შეცდომას, სერვისთან დაკავშირების მცდელობის გარეშე. გარკვეული დროის შემდეგ, ის ცდილობს «დახურვას» და გადაამოწმოს, განახლდა თუ არა სერვისი.

გამოყენების მაგალითი github.com/sony/gobreaker ბიბლიოთეკასთან:

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

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

    result, err := cb.Execute(func() (interface{}, error) {
        // გარეგანი სერვისის ზარი
        return "პასუხი", nil
    })

    if err != nil {
        fmt.Println("საკრუიტო გამყოფი გახსნილია ან შეცდომა:", err)
    } else {
        fmt.Println("წარმატება:", result)
    }
}