Cuente una situación en la que logró mejorar la eficiencia del trabajo de una API REST.
sobes.tech AI
Respuesta de la IA
En uno de mis proyectos en Go, mejoré la eficiencia del API REST optimizando el procesamiento de solicitudes y reduciendo el tiempo de respuesta.
Lo que se hizo:
-
Caché: agregué caché para datos solicitados con frecuencia usando caché en memoria (por ejemplo, Redis o un mapa interno con mutex), para reducir la carga en la base de datos.
-
Procesamiento paralelo: utilicé goroutines para ejecutar operaciones independientes en paralelo durante el procesamiento de la solicitud.
-
Optimización de consultas a la base de datos: reescribí las consultas SQL, agregué índices para reducir el tiempo de ejecución.
-
Uso de context (context.Context): para interrumpir oportunamente solicitudes largas y liberar recursos.
Ejemplo de código con caché y 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()
// Simulación de consulta a la base de datos
data := "datos de la BD para " + 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")
// Obtención de datos en paralelo
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, "Error", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
Como resultado, el tiempo de respuesta del API se redujo y la carga en la base disminuyó, mejorando el rendimiento general del servicio.