Povězte o situaci, kdy se vám podařilo zvýšit efektivitu práce REST API.
sobes.tech AI
Odpověď od AI
V jednom z mých projektů v Go jsem zvýšil efektivitu REST API optimalizací zpracování požadavků a zkrácením doby odezvy.
Co bylo provedeno:
-
Caching: přidal jsem kešování často požadovaných dat pomocí in-memory cache (například Redis nebo vestavěná mapa s mutexem), aby se snížila zátěž na databázi.
-
Paralelní zpracování: použil jsem gorutiny k paralelnímu provádění nezávislých operací během zpracování požadavku.
-
Optimalizace dotazů na databázi: přepsal jsem SQL dotazy, přidal indexy, aby se zkrátila doba jejich provádění.
-
Použití context (context.Context): pro včasné přerušení dlouhých požadavků a uvolnění zdrojů.
Příklad kódu s kešováním a gorutinami:
var cache = make(map[string]string)
var mu sync.RWMutex
func getData(key string) (string, error) {
mu.RLock()
if val, ok := cache[key]; ok {
mu.RUnlock()
return val, nil
}
mu.RUnlock()
// Simulace dotazu na databázi
data := "data z DB pro " + key
mu.Lock()
cache[key] = data
mu.Unlock()
return data, nil
}
func handler(w http.ResponseWriter, r *http.Request) {
key := r.URL.Query().Get("key")
// Paralelní získání dat
var wg sync.WaitGroup
var result string
var err error
wg.Add(1)
go func() {
defer wg.Done()
result, err = getData(key)
}()
wg.Wait()
if err != nil {
http.Error(w, "Chyba", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Výsledkem je snížení doby odezvy API a snížení zátěže na databázi, což zlepšilo celkový výkon služby.