Sobes.tech
Junior — Middle

REST API-nin iş effektivliyini artırmağa nail olduğunuz vəziyyəti danışın.

sobes.tech Süni İntellekt

AI-dan cavab

Go layihələrimdən birində, REST API-nin səmərəliliyini artırdım, sorğuların işlənməsini optimallaşdıraraq və cavab vaxtını qısaldaraq.

Nə edildi:

  1. Keşləşdirmə: tez-tez soruşulan məlumatlar üçün yaddaşda keş əlavə etdim (məsələn, Redis və ya daxili map və mutex istifadə edərək), bu da verilənlər bazasına yükü azaldıb.

  2. Paralel işləmə: sorğunun işlənməsi zamanı müstəqil əməliyyatları paralel şəkildə yerinə yetirmək üçün goroutine-lərdən istifadə etdim.

  3. Verilənlər bazası sorğularını optimallaşdırma: SQL sorğularını yenidən yazdım, icra vaxtını azaltmaq üçün indekslər əlavə etdim.

  4. Context (context.Context) istifadəsi: uzun davam edən sorğuları vaxtında dayandırmaq və resursları azad etmək üçün.

Kodu nümunəsi, keş və goroutine-lərlə:

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()

    // Verilənlər bazasına sorğunun simulasyonu
    data := "BD-dən məlumat üçün " + 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")

    // Paralel məlumat əldə etmə
    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, "Xəta", http.StatusInternalServerError)
        return
    }

    w.Write([]byte(result))
}

Nəticədə, API-nin cavab vaxtı azaldı və verilənlər bazasına yük azaldı, bu da ümumi xidmət performansını yaxşılaşdırdı.