Ispričajte o situaciji u kojoj ste uspjeli povećati efikasnost rada REST API-ja.
sobes.tech АИ
Одговор од АИ
U jednom od mojih projekata u Go jeziku, poboljšao sam efikasnost REST API-ja optimizacijom obrade zahteva i skraćenjem vremena odgovora.
Šta je urađeno:
-
Keširanje: dodao sam keširanje često traženih podataka pomoću in-memory keša (npr. Redis ili ugrađena mapa sa mutexom), kako bih smanjio opterećenje na bazu podataka.
-
Paralelna obrada: koristio sam goroutine za paralelno izvršavanje nezavisnih operacija tokom obrade zahteva.
-
Optimizacija upita ka bazi: prepisao sam SQL upite, dodao indekse da skratim vreme izvršenja.
-
Korišćenje context (context.Context): za pravovremeno prekidanje dugih zahteva i oslobađanje resursa.
Primer koda sa keširanjem i goroutine-ima:
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()
// Simulacija zahteva ka bazi
data := "podatak iz baze za " + 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")
// Paralelno dobijanje podataka
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, "Greška", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Kao rezultat, vreme odgovora API-ja se smanjilo, a opterećenje na bazu je opalo, što je poboljšalo ukupnu performansu servisa.