Povedajte o situácii, kedy sa vám podarilo zvýšiť efektívnosť práce REST API.
sobes.tech AI
Odpoveď od AI
V jednom z mojich projektov v Go som zlepšil efektivitu REST API optimalizáciou spracovania požiadaviek a skrátením času odozvy.
Čo bolo urobené:
-
Caching: pridanie cache pre často požadované údaje pomocou in-memory cache (napríklad Redis alebo zabudovaná mapa s mutexom), aby sa znížilo zaťaženie databázy.
-
Paralelné spracovanie: použitie goroutine na paralelné vykonávanie nezávislých operácií počas spracovania požiadavky.
-
Optimalizácia dopytov na databázu: prepísanie SQL dopytov, pridanie indexov na skrátenie času ich vykonávania.
-
Použitie context (context.Context): na včasné prerušenie dlhých požiadaviek a uvoľnenie zdrojov.
Príklad kódu s cache-ovaním a goroutine-ami:
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()
// Simulácia dopytu na databázu
data := "dáta z DB pre " + 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ískavanie dát
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))
}
Ako výsledok, doba odozvy API sa skrátila a záťaž na databázu klesla, čo zlepšilo celkový výkon služby.