Sobes.tech
Middle+

Verbessere die Lösung für die Top-10 in jedem Namespace unter Berücksichtigung, dass die Dienste in verschiedenen Clustern sein können, aber im selben Namespace (muss zusammengeführt werden)

sobes.tech KI

Antwort von AI

Если сервисы могут быть в разных кластерах, но принадлежат одному 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, независимо от того, в каких кластерах они находятся.