Sobes.tech
Junior — Middle

REST API ишинин натыйжалуулугун жогорулатууга жетишкен учурду баяндаңыз.

sobes.tech AI

AIден жооп

Менин Go долбоорлорумдун биринде, REST APIнин эффективдүүлүгүн жакшырттым, суроолорду иштетүүнү оптималдаштырып жана жооп берүү убактысын кыскарттым.

Эмне жасалды:

  1. Кэш: көп суралган маалыматтарды in-memory кэш (мисалы, Redis же ички карта менен mutex) аркылуу кэштедим, бул базага жүктү азайтты.

  2. Параллел иштетүү: суроонун иштөөсүндө көзкарандысыз операцияларды параллелдүү аткаруу үчүн goroutine колдонулду.

  3. Базадагы суроолорду оптималдаштыруу: SQL суроолорун кайра жаздым, аткаруу убактысын кыскартуу үчүн индекстер кошулду.

  4. Context (context.Context) колдонуу: узак убакытка созулган суроолорду убагында үзгүлтүккө учуратуу жана ресурстарды бошотуу үчүн.

Коддун мисалы, кэш жана goroutine менен:

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нин жооп берүү убактысы кыскарды жана база жүктөмү азайды, бул кызматтын жалпы иштешин жакшыртты.