Povestiți o situație în care ați reușit să creșteți eficiența muncii unei API REST.
sobes.tech AI
Răspuns de la AI
În unul dintre proiectele mele în Go, am îmbunătățit eficiența API-ului REST prin optimizarea procesării cererilor și reducerea timpului de răspuns.
Ce s-a făcut:
-
Caching: am adăugat caching pentru datele solicitate frecvent folosind un cache în memorie (de exemplu, Redis sau un map intern cu mutex), pentru a reduce sarcina asupra bazei de date.
-
Procesare paralelă: am folosit goroutines pentru a executa operațiuni independente în paralel în timpul procesării cererii.
-
Optimizarea interogărilor la bază de date: am rescris interogările SQL, am adăugat indecși pentru a reduce timpul de execuție.
-
Utilizarea contextului (context.Context): pentru a întrerupe la timp cererile lungi și a elibera resursele.
Exemplu de cod cu caching și goroutines:
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()
// Simulare cerere la bază
data := "date din Baza de date pentru " + 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")
// Obținerea datelor în paralel
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, "Eroare", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Ca rezultat, timpul de răspuns al API-ului s-a redus, iar sarcina pe baza de date a scăzut, ceea ce a îmbunătățit performanța generală a serviciului.