Para implementar o balanceamento de carga em um sistema distribuído, meça com precisão o estado desse balanceamento. Este tópico descreve a sintaxe básica da função e fornece um exemplo.
Contexto
-
Os logs de exemplo contêm seis campos: ID do cluster, ID do servidor, hora, carga de CPU, carga de memória e carga de largura de banda da rede. Para obter mais informações, consulte Criar um índice.
A configuração dos seis campos é a seguinte: cluster_id (texto), server_id (texto), time_period (texto), cpu_load (double), ram_load (double) e network_load (double). Todos os campos aceitam consultas e há um tokenizador configurado para os campos de texto.
-
Exemplos de logs:
{"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"}
Funções de medição de balanceamento de carga
|
Nome da função |
Sintaxe |
Descrição |
Tipo de retorno |
|
how_balanced(array(array(double)) load_matrix) |
Mede o grau de balanceamento de carga em um sistema distribuído quando usada com a função array_agg. O valor retornado está no intervalo |
double |
Função how_balanced
Mede o grau de balanceamento de carga em um sistema distribuído com a função array_agg.
double how_balanced(array(array(double)) load_matrix)
|
Parâmetro |
Descrição |
|
|
Matriz de carga em que cada linha representa o vetor de série temporal da carga de um único servidor. |
Exemplo
-
Instrução de consulta e análise
* | 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 -
Resultados
O valor
balanceretornado indica o grau de balanceamento de carga na escala(0,1]. Quanto mais próximo de 1, mais equilibrada é a distribuição da carga.ID do Cluster
Balance
G1
0,5