Разкажете за ситуация, в която сте успели да повишите ефективността на работата на REST API.
sobes.tech AI
Отговор от AI
В един от проектите ми на Go подобрих ефективността на REST API, като оптимизирах обработката на заявките и намалих времето за отговор.
Какво беше направено:
-
Кеширане: добавих кеширане за често изисквани данни с помощта на in-memory кеш (например Redis или вграден map с mutex), за да намаля натоварването върху базата данни.
-
Паралелна обработка: използвах горутини за паралелно изпълнение на независими операции по време на обработката на заявката.
-
Оптимизация на заявки към базата: преписах SQL заявките, добавих индекси, за да намаля времето за изпълнение.
-
Използване на context (context.Context): за своевременно прекъсване на дълги заявки и освобождаване на ресурси.
Примерен код с кеширане и горутини:
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()
// Имитация на заявка към базата
data := "данни от БД за " + 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")
// Паралелно получаване на данни
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, "Грешка", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Като резултат, времето за отговор на API-то се намали, натоварването върху базата данни се понижи, което подобри цялостната производителност на услугата.