Sobes.tech
Middle+

Ulepsz rozwiązanie dla top-10 w każdym namespace, biorąc pod uwagę, że usługi mogą być w różnych klastrach, ale w tym samym namespace (należy je połączyć)

sobes.tech AI

Odpowiedź od AI

Jeśli usługi mogą znajdować się w różnych klastrach, ale należą do tego samego namespace, to dla top-10 każdego namespace należy zintegrować dane według namespace, łącząc wyniki ze wszystkich klastrów.

Podejście:

  1. Zebrać metryki lub dane o usługach ze wszystkich klastrów.
  2. Połączyć dane według klucza namespace.
  3. Dla każdego namespace, połączyć wszystkie usługi z różnych klastrów.
  4. Posortować usługi według wymaganego kryterium (np. obciążenia) i wybrać top-10.

Przykład w Go (uproszczony):

 type ServiceData struct {
    Namespace string
    Service   string
    Metric    int
}

// servicesFromClusters — tablica danych z różnych klastrów
func Top10ByNamespace(servicesFromClusters [][]ServiceData) map[string][]ServiceData {
    combined := make(map[string][]ServiceData)

    // Połączenie danych według 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 {
        // Sortowanie po metrze w kolejności malejącej
        sort.Slice(svcs, func(i, j int) bool {
            return svcs[i].Metric > svcs[j].Metric
        })
        // Wybierz top-10
        limit := 10
        if len(svcs) < 10 {
            limit = len(svcs)
        }
        result[ns] = svcs[:limit]
    }

    return result
}

Ten sposób pozwala na agregację i sortowanie usług według namespace, niezależnie od tego, w których klastrach się znajdują.