Назад к вопросам
X5 group
Middle+
7
Доработай решение для топ-10 по каждому namespace с учётом того, что сервисы могут быть в разных кластерах, но в одном namespace (нужно объединять)
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если сервисы могут быть в разных кластерах, но принадлежат одному namespace, то для топ-10 по каждому namespace нужно агрегировать данные по namespace, объединяя результаты из всех кластеров.
Подход:
- Собрать метрики или данные по сервисам из всех кластеров.
- Объединить данные по ключу
namespace. - Для каждого namespace объединить все сервисы из разных кластеров.
- Отсортировать сервисы по нужному критерию (например, по нагрузке) и выбрать топ-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, независимо от того, в каких кластерах они находятся.