Sobes.tech
Senior

Služba v produkcii nie je stabilná dlhšie ako 5 minút. Podarilo sa nám lokalizovať problém: existuje funkcia P() v tretej knižnici, ktorá s určitou pravdepodobnosťou spôsobí panic. Ako tento problém vyriešiť? Knižnica je open source, kód je možné zobraziť v vendor.

sobes.tech AI

Odpoveď od AI

Ak funkcia P() z vonkajšej knižnice spôsobí s určitou pravdepodobnosťou paniku a kód knižnice je otvorený, je možné podniknúť nasledovné kroky:

  1. Obaliť volanie funkcie P() konštrukciou recover, aby ste zachytili paniku a zabránili zrúteniu celého servisu.

  2. Preskúmať kód funkcie P() v vendor, aby ste pochopili príčiny paniky — možno ide o chybu v logike alebo nesprávne použitie.

  3. Ak je to možné, opraviť chybu v knižnici a znovu ju zostaviť.

  4. Ak oprava nie je možná alebo si vyžaduje čas, môžete napísať obal okolo P(), ktorý bude funkciu bezpečne volať a spracovávať chyby.

Príklad obalu s recover v Go:

func safeP() (err error) {
    defer func() {
        if r := recover(); r != nil {
            err = fmt.Errorf("chyba zachytená: %v", r)
        }
    }()
    P() // volanie problematickej funkcie
    return nil
}

Týmto spôsobom služba nespadne kvôli panike, a bude možné zaznamenávať a analyzovať chyby.