Sobes.tech
Middle+

Ар бир namespace үчүн эң жакшы 10 үчүн чечимди өркүндөтүңүз, кызматтар ар башка кластерлерде болушу мүмкүн экенин эске алуу менен, бирок бир эле namespace ичинде (бириктирүү керек)

sobes.tech AI

AIден жооп

Эгер кызматтар ар башка кластерлерде болушу мүмкүн болсо, бирок бир эле namespaceке тиешелүү болсо, анда ар бир namespace үчүн эң жогорку 10ду топтоо үчүн бардык кластерлерден келген натыйжаларды бириктирип, маалыматтарды топтоо керек.

Жол-жобо:

  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 боюнча топтоо жана сорттоо мүмкүнчүлүгүн берет, алардын кайсы кластерде болбосун.