Sobes.tech
Middle+
34

Әрбір namespace-те топ-10 үшін шешімді жетілдіріңіз, егер қызметтер әртүрлі кластерлерде болса да, бір namespace-те болуы керек (біріктіру қажет)

Сұралған компаниялар
X5 groupX5 group

AI-дан жауап

sobes.tech 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, независимо от того, в каких кластерах они находятся.