Sobes.tech
Middle+

Fejlessze tovább a megoldást minden namespace top-10-esére figyelembe véve, hogy a szolgáltatások különböző klaszterekben lehetnek, de ugyanabban a namespace-ben (egyesíteni kell)

sobes.tech MI

Válasz az MI-től

Ha a szolgáltatások különböző klaszterekben lehetnek, de ugyanahhoz a namespace-hez tartoznak, akkor minden namespace esetében a top-10 adatokat össze kell gyűjteni, az összes klaszter eredményeit egyesítve.

Megközelítés:

  1. Gyűjtsön metrikákat vagy adatokat az összes klaszter szolgáltatásairól.
  2. Egyesítse az adatokat a namespace kulcs szerint.
  3. Minden namespace esetében egyesítse az összes szolgáltatást a különböző klaszterekből.
  4. Rendezzük a szolgáltatásokat a kívánt kritérium szerint (pl. terhelés szerint), és válasszuk ki a top-10-et.

Egyszerűsített Go példával:

 type ServiceData struct {
    Namespace string
    Service   string
    Metric    int
}

// servicesFromClusters — különböző klaszterek adatsorai
func Top10ByNamespace(servicesFromClusters [][]ServiceData) map[string][]ServiceData {
    combined := make(map[string][]ServiceData)

    // Adatok összegyűjtése namespace szerint
    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 {
        // Rendezés metrika szerint csökkenő sorrendben
        sort.Slice(svcs, func(i, j int) bool {
            return svcs[i].Metric > svcs[j].Metric
        })
        // Top-10 kiválasztása
        limit := 10
        if len(svcs) < 10 {
            limit = len(svcs)
        }
        result[ns] = svcs[:limit]
    }

    return result
}

Ez a megközelítés lehetővé teszi a szolgáltatások összegyűjtését és rangsorolását namespace szerint, függetlenül attól, hogy mely klaszterekben találhatók.