Sobes.tech
Back to questions
Senior
3

Расскажи подробнее про то, как ты снизил P95 Latency.

Companies where asked
Effective IT

Answer from AI

sobes.tech AI

Для снижения P95 latency (95-го процентиля задержки) я применял несколько подходов:

  1. Профилирование и выявление узких мест: с помощью инструментов профилирования (pprof, trace) определял, какие части кода или запросы вызывают наибольшие задержки.

  2. Оптимизация алгоритмов и структур данных: заменял неэффективные алгоритмы на более быстрые, использовал кэширование результатов, уменьшал количество аллокаций.

  3. Параллелизация и асинхронность: перерабатывал блокирующие операции в асинхронные, использовал горутины для параллельной обработки.

  4. Оптимизация взаимодействия с внешними сервисами: минимизировал количество сетевых запросов, использовал пул соединений, внедрял таймауты и повторные попытки.

  5. Балансировка нагрузки и масштабирование: распределял нагрузку между несколькими инстансами сервиса.

Пример оптимизации кода для снижения задержки:

// До оптимизации: последовательные запросы
func fetchData() ([]Data, error) {
    var results []Data
    for _, id := range ids {
        data, err := fetchFromDB(id)
        if err != nil {
            return nil, err
        }
        results = append(results, data)
    }
    return results, nil
}

// После оптимизации: параллельные запросы с горутинами
func fetchData() ([]Data, error) {
    var wg sync.WaitGroup
    results := make([]Data, len(ids))
    errs := make(chan error, len(ids))

    for i, id := range ids {
        wg.Add(1)
        go func(i int, id string) {
            defer wg.Done()
            data, err := fetchFromDB(id)
            if err != nil {
                errs <- err
                return
            }
            results[i] = data
        }(i, id)
    }
    wg.Wait()
    close(errs)

    if len(errs) > 0 {
        return nil, <-errs
    }
    return results, nil
}

Такой подход позволил значительно снизить максимальные задержки и улучшить стабильность отклика сервиса.