Доработай решение для топ-10 по каждому namespace с учётом того, что сервисы могут быть в разных кластерах, но в одном namespace (нужно объединять)

Если сервисы могут быть в разных кластерах, но принадлежат одному namespace, то для топ-10 по каждому namespace нужно агрегировать данные по namespace, объединяя результаты из всех кластеров.

Короткий ответ

Что ответить на собеседовании

Если сервисы могут быть в разных кластерах, но принадлежат одному namespace, то для топ-10 по каждому namespace нужно агрегировать данные по namespace, объединяя результаты из всех кластеров.

Подробный разбор

Ответ с пояснениями

Если сервисы могут быть в разных кластерах, но принадлежат одному namespace, то для топ-10 по каждому namespace нужно агрегировать данные по namespace, объединяя результаты из всех кластеров.

Подход:

  1. Собрать метрики или данные по сервисам из всех кластеров.
  2. Объединить данные по ключу namespace.
  3. Для каждого namespace объединить все сервисы из разных кластеров.
  4. Отсортировать сервисы по нужному критерию (например, по нагрузке) и выбрать топ-10.

Пример на Go (упрощённо):

type ServiceData struct {
    Namespace string
    Service   string
    Metric    int
}

// servicesFromClusters — срез данных из разных кластеров
func Top10ByNamespace(servicesFromClusters [][]ServiceData) map[string][]ServiceData {
    combined := make(map[string][]ServiceData)

    // Объединяем данные по namespace
    for _, clusterData := range servicesFromClusters {
        for _, svc := range clusterData {
            combined[svc.Namespace] = append(combined[svc.Namespace], svc)
        }
    }

    result := make(map[string][]ServiceData)
    for ns, svcs := range combined {
        // Сортируем по метрике по убыванию
        sort.Slice(svcs, func(i, j int) bool {
            return svcs[i].Metric > svcs[j].Metric
        })
        // Берём топ-10
        limit := 10
        if len(svcs) < 10 {
            limit = len(svcs)
        }
        result[ns] = svcs[:limit]
    }

    return result
}

Такой подход позволяет агрегировать и ранжировать сервисы по namespace, независимо от того, в каких кластерах они находятся.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку