Sobes.tech
Middle+

Беҳтар кардани ҳалли барои 10 беҳтарин дар ҳар namespace бо дарназардошти он, ки хадамот метавонанд дар кластерҳои гуногун бошанд, аммо дар як namespace (мусоид аст, ки муттаҳид карда шаванд)

sobes.tech AI

Ҷавоб аз 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 ҷамъоварӣ ва ба тартиб гузорем, бе назардошти он, ки дар кадом кластерҳо ҷойгир шудаанд.