Pour mettre en œuvre l'équilibrage de charge dans un système distribué, vous devez d'abord mesurer avec précision l'état de cet équilibrage. Cette rubrique décrit la syntaxe de base de la fonction et fournit un exemple.
Contexte
-
Les journaux d'exemple contiennent six champs : ID du cluster, ID du serveur, heure, charge CPU, charge mémoire et charge de la bande passante réseau. Pour plus d'informations, consultez la section Créer un index.
Les six champs sont configurés comme suit : cluster_id (texte), server_id (texte), time_period (texte), cpu_load (double), ram_load (double) et network_load (double). Tous les champs sont interrogeables et un tokenizer est configuré pour les champs de type texte.
-
Voici des exemples de journaux :
{"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:00:00"} {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:01:00"} {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:02:00"} {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:03:00"} {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:04:00"} {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:05:00"} {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:06:00"} {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:07:00"} {"cluster_id":"C001","cpu_load":"0.1","network_load":"0.6","ram_load":"0.7","server_id":"S001","time_period":"2024-01-01 00:08:00"} {"cluster_id":"C001","cpu_load":"0.2","network_load":"0.5","ram_load":"0.8","server_id":"S002","time_period":"2024-01-01 00:09:00"}
Fonctions de mesure de l'équilibrage de charge
|
Nom de la fonction |
Syntaxe |
Description |
Type de retour |
|
how_balanced(array(array(double)) load_matrix) |
Mesure le degré d'équilibrage de charge dans un système distribué lorsqu'elle est utilisée conjointement avec la fonction array_agg. La valeur renvoyée se situe dans la plage |
double |
Fonction how_balanced
Cette fonction mesure le degré d'équilibrage de charge dans un système distribué en s'appuyant sur la fonction array_agg.
double how_balanced(array(array(double)) load_matrix)
|
Paramètre |
Description |
|
|
Matrice de charge où chaque ligne représente le vecteur de série temporelle de la charge d'un seul serveur. |
Exemple
-
Instruction de requête et d'analyse
* | with server_time_series as ( select cluster_id, server_id, array_agg(to_unixtime(date_parse(time_period, '%Y-%m-%d %H:%i:%s'))) as time_periods, array_agg(cpu_load + ram_load + network_load) as metric_values from log where time_period >= '2024-01-01 00:00:00' and time_period < '2024-01-02 00:00:00' group by cluster_id, server_id ), imputed_server_series as ( select cluster_id, server_id, ts_fill_missing( time_periods, metric_values, to_unixtime(date_parse('2024-01-01 00:00:00', '%Y-%m-%d %H:%i:%s')), to_unixtime(date_parse('2024-01-02 00:00:00', '%Y-%m-%d %H:%i:%s')), '1 minute', 'value=0') as imputed_time_series from server_time_series ) select cluster_id, how_balanced(array_agg(imputed_time_series[2])) as balance from imputed_server_series group by cluster_id -
Résultats
La valeur
balancerenvoyée représente le degré d'équilibrage de charge sur une échelle de(0,1]. Plus la valeur est proche de 1, plus la charge est équilibrée.Cluster id
Balance
G1
0,5