分散システムに負荷分散を実装する操作を実行する前に、システムの負荷分散度を正確に測定する必要があります。 このトピックでは、負荷分散測定関数の構文について説明します。 このトピックでは、関数の使用方法の例も提供します。
背景情報
負荷分散測定機能が使用されるサンプルログには、クラスターID、サーバーID、時間、CPU負荷、メモリ負荷、およびネットワーク帯域幅負荷のインデックスフィールドが含まれます。 詳細については、「インデックスの作成」をご参照ください。
サンプルログ:
{"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関数と一緒に使用する必要があります。 詳細は、「array_agg関数」をご参照ください。 戻り値は負荷分散度を示します。 有効値: | double |
how_balanced関数
how_balanced関数は、分散システムの負荷分散度を測定します。 この関数はarray_agg関数と一緒に使用する必要があります。 詳細は、「array_agg関数」をご参照ください。
double how_balanced(array(array(double)) load_matrix)
パラメーター | 説明 |
| ロードマトリックス。 各行は、サーバのロード時系列ベクトルを指定する。 |
例
クエリ文
* | 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
クエリおよび分析の結果
balance
は負荷分散度を示します。 有効値:(0,1)
。 値が1に近いほど、負荷分散の度合いが高いことを示します。 値1は、全負荷分散を示します。cluster_id
バランス
G1
0.5