Sobes.tech
Junior — Middle

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:

  1. 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.

  2. ** Paralēla apstrāde**: izmantoju gorutīnas, lai paralēli izpildītu neatkarīgas operācijas pieprasījuma apstrādē.

  3. Datu bāzes vaicājumu optimizācija: pārstrādāju SQL vaicājumus, pievienoju indeksus, lai samazinātu izpildes laiku.

  4. 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.