Sobes.tech
Middle+

Vylepšite riešenie pre top-10 v každom namespace s ohľadom na to, že služby môžu byť v rôznych klastroch, ale v rovnakom namespace (je potrebné ich zlúčiť)

sobes.tech AI

Odpoveď od AI

Ak služby môžu byť v rôznych klastroch, ale patria do rovnakého namespace, potom je potrebné pre top-10 v každom namespace agregovať údaje podľa namespace, spojením výsledkov zo všetkých klastrov.

Prístup:

  1. Zhromaždite metriky alebo údaje o službách zo všetkých klastrov.
  2. Zlúčte údaje podľa kľúča namespace.
  3. Pre každý namespace, spojte všetky služby z rôznych klastrov.
  4. Usporiadať služby podľa požadovaného kritéria (napríklad zaťaženia) a vybrať top-10.

Príklad v Go (zjednodušený):

 type ServiceData struct {
    Namespace string
    Service   string
    Metric    int
}

// servicesFromClusters — pole dát z rôznych klastrov
func Top10ByNamespace(servicesFromClusters [][]ServiceData) map[string][]ServiceData {
    combined := make(map[string][]ServiceData)

    // Zlúčenie dát podľa 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 {
        // Triedenie podľa metriky v zostupnom poradí
        sort.Slice(svcs, func(i, j int) bool {
            return svcs[i].Metric > svcs[j].Metric
        })
        // Vybrať top-10
        limit := 10
        if len(svcs) < 10 {
            limit = len(svcs)
        }
        result[ns] = svcs[:limit]
    }

    return result
}

Tento prístup umožňuje agregáciu a zoradenie služieb podľa namespace, bez ohľadu na to, v ktorých klastroch sa nachádzajú.