分散システムで負荷分散を実装するには、まずその状態を正確に測定する必要があります。このトピックでは、関数の基本構文を説明し、例を示します。
背景情報
-
サンプルログには 6 つのフィールドが含まれます:クラスター ID、サーバー ID、時刻、CPU 負荷、メモリ負荷、ネットワーク帯域幅負荷。詳細については、「インデックスの作成」をご参照ください。
6 つのフィールドは次のように設定されています: cluster_id (text)、server_id (text)、time_period (text)、cpu_load (double)、ram_load (double)、network_load (double)。すべてのフィールドはクエリ可能であり、text フィールドにはトークナイザーが設定されています。
-
以下はサンプルログです:
{"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"}
負荷分散の測定関数
|
関数名 |
構文 |
説明 |
戻り値の型 |
|
how_balanced(array(array(double)) load_matrix) |
array_agg 関数と併用すると、分散システムにおける負荷分散の度合いを測定します。戻り値は |
double |
how_balanced 関数
array_agg 関数と併用して、分散システムにおける負荷分散の度合いを測定します。
double how_balanced(array(array(double)) load_matrix)
|
パラメーター |
説明 |
|
|
各行が 1 台のサーバー負荷の時系列ベクトルを表す負荷行列です。 |
例
-
クエリと分析文
* | 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[1])) as balance from imputed_server_series group by cluster_id -
結果
返された
balance値は、(0, 1]のスケールで負荷分散の度合いを表します。1 に近いほど負荷が均等であることを示します。クラスター ID
バランス
C001
0.5