Pastāstiet par situāciju, kad jums izdevās uzlabot REST API darba efektivitāti.
sobes.tech AI
Atbilde no AI
Vienā Go projektā es uzlaboju REST API efektivitāti, optimizējot pieprasījumu apstrādi un samazinot atbildes laiku.
Kas tika izdarīts:
-
Kešošana: pievienoju bieži pieprasīto datu kešošanu ar in-memory kešatmiņu (piemēram, Redis vai iebūvētu map ar mutex), lai samazinātu slodzi uz datu bāzi.
-
** Paralēla apstrāde**: izmantoju gorutīnas, lai paralēli izpildītu neatkarīgas operācijas pieprasījuma apstrādē.
-
Datu bāzes vaicājumu optimizācija: pārstrādāju SQL vaicājumus, pievienoju indeksus, lai samazinātu izpildes laiku.
-
Konteksta (context.Context) izmantošana: lai savlaicīgi pārtrauktu ilgstošus vaicājumus un atbrīvotu resursus.
Piemērs ar kešošanu un gorutīnām:
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()
// Datu pieprasījuma imitācija
data := "dati no DB par " + 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")
// Paralēla datu iegūšana
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, "Kļūda", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Rezultātā API atbildes laiks samazinājās, slodze uz datu bāzi — arī, kas uzlaboja kopējo pakalpojuma veiktspēju.