Rääkige olukorrast, kus teil õnnestus parandada REST API töö tõhusust.
sobes.tech AI
Vastus AI-lt
Ühes Go projektis tõstsin REST API tõhusust, optimeerides päringute töötlemist ja vähendades vastamisaega.
Mida tehti:
-
Küpsised: lisasin sageli nõutavate andmete vahemälu kasutades mälu-põhist vahemälu (näiteks Redis või sisseehitatud kaart mutexiga), et vähendada koormust andmebaasile.
-
Paralleelne töötlemine: kasutasin gorutine, et paralleelselt täita sõltumatuid operatsioone päringu töötlemise ajal.
-
Andmebaasi päringute optimeerimine: ümber kirjutasin SQL-päringud, lisades indeksid, et vähendada täitmisaja.
-
Konteksti (context.Context) kasutamine: et õigeaegselt katkestada pikad päringud ja vabastada ressursse.
Näide vahemäluga ja gorutinite kasutamisega:
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()
// Andmebaasi päringu imiteerimine
data := "andmed andmebaasist " + 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")
// Paralleelne andmete saamine
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, "Viga", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Tulemuseks oli API vastamisaegade vähenemine ning koormuse vähendamine andmebaasile, mis parandas teenuse üldist jõudlust.