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:
-
Obaliť volanie funkcie P() konštrukciou
recover, aby ste zachytili paniku a zabránili zrúteniu celého servisu. -
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.
-
Ak je to možné, opraviť chybu v knižnici a znovu ju zostaviť.
-
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.