AverageLatencySchedulingPolicy カスタムリソース定義 (CRD) は、Alibaba Cloud Service Mesh (ASM) において、レイテンシーに基づく適応型ロードスケジューリングを構成します。この CRD は、加算増加/乗算減少 (AIMD) アルゴリズムを使用して、観測されたレイテンシーに基づいてリクエストレートをスロットリングし、回復中のスループットを最大化しながら、サービスを過負荷から保護します。
このリファレンスでは、CRD の各フィールドをオブジェクトタイプ別にグループ化して説明します。
AverageLatencySchedulingPolicySpec
ポリシーリソースのトップレベルの仕様です。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
load_scheduling_core | LoadSchedulingCore | はい | コアスケジューラの構成です。 |
LoadSchedulingCore
ロードスケジューリングアルゴリズム構成のコンテナです。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
aimd_load_scheduler | AimdLoadScheduler | はい | AIMD ベースのロードスケジューラの構成です。 |
Selector
コントロールポイント、フローラベル、エージェントグループ、およびサービス ID に基づいて、ポリシーが作用するトラフィックフローを決定します。
control_point: ingress
label_matcher:
match_labels:
user_tier: gold
match_expressions:
- key: query
operator: In
values:
- insert
- delete
expression:
label_matches:
- label: user_agent
regex: ^(?!.*Chrome).*Safari| フィールド | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
control_point | string | いいえ | ingress | ポリシーが有効になるサービス内の場所。有効な値:ingress、egress、特定のリスナー、または特定のフィルターチェーン。 |
label_matcher | LabelMatcher | いいえ | -- | フローラベルに基づいてトラフィックフローを照合します。 |
service | string | いいえ | any | ターゲットサービスの完全修飾ドメイン名 (FQDN) です。 |
LabelMatcher
次の 3 つのメソッドのうち 1 つ以上を使用してトラフィックフローを照合します:
ラベルの一致 -- 完全なキーと値の照合。
式の一致 -- 演算子ベースの照合 (
In、NotIn、Exists、DoesNotExist)。任意の式 -- 正規表現をサポートする論理的な組み合わせ。
複数のメソッドが指定された場合、それらは論理 AND で結合されます。空の LabelMatcher はすべてのリクエストに一致します。
次の例では、ヘルスチェックとメトリクスエンドポイントをスケジューリングから除外します。これらのエンドポイントは実際のユーザートラフィックを表すものではなく、レイテンシー計算を歪める可能性があります:
label_matcher:
match_list:
- key: http.target
operator: NotIn
values:
- /health
- /live
- /ready
- /metrics| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
expression | Expression | いいえ | フローラベルで評価される論理式です。 |
match_labels | map[string]string | いいえ | 完全なラベル照合のためのキーと値のペアです。 |
match_list | []MatchRequirement | いいえ | 演算子ベースの照合要件のリストです。 |
Expression
構成可能な論理式です。Expression オブジェクトごとに設定できるフィールドは 1 つだけです。
# ラベル "foo" が存在し、かつラベル "app" が "frobnicator" と等しいフローに一致
all:
of:
- label_exists: foo
- label_equals:
label: app
value: frobnicator| フィールド | タイプ | 説明 |
|---|---|---|
all | ExpressionList | すべてのサブ式が true の場合に true (論理 AND)。 |
any | ExpressionList | いずれかのサブ式が true の場合に true (論理 OR)。 |
label_equals | EqualExpression | 指定されたラベルが指定された値と等しい場合に true。 |
label_exists | string | 指定された名前のラベルが存在する場合に true。 |
label_matches | MatchesExpression | 指定されたラベルが指定された正規表現に一致する場合に true。 |
not | Expression | サブ式の結果を否定します。 |
ExpressionList
| フィールド | タイプ | 説明 |
|---|---|---|
of | []Expression | サブ式のリストです。 |
EqualExpression
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
label | string | はい | ラベルキーです。 |
value | string | いいえ | 照合するラベル値です。 |
MatchesExpression
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
label | string | はい | 照合対象のラベルキーです。 |
regex | string | はい | 正規表現パターン。Go RE2 構文を使用します。 |
MatchRequirement
Kubernetes ラベルセレクターと同じパターンに従う、演算子ベースのラベル照合です。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
key | string | はい | ラベルキーです。 |
operator | enum | はい | 照合演算子。有効な値:In、NotIn、Exists、DoesNotExist。 |
values | []string | 条件付き | 照合対象の文字列値。In および NotIn には必須です。Exists および DoesNotExist では空にする必要があります。 |
AimdLoadScheduler
AIMD ロードスケジューラは、勾配コントローラーを使用して、観測されたレイテンシー信号が設定値からどれだけ逸脱しているかに基づいてトークンレートを調整します。システムが過負荷状態になると、トークンレートを乗算的に減少させます。回復中は、システムが定常状態に達するまでレートを線形的に増加させます。
| フィールド | タイプ | 必須 | デフォルト | 制約 | 説明 |
|---|---|---|---|---|---|
gradient | GradientControllerParameters | はい | -- | -- | 勾配コントローラーのパラメーター。GradientControllerParameters をご参照ください。 |
load_multiplier_linear_increment | float64 | いいえ | 0.025 | 最小値:0 | システムが過負荷でない間、max_load_multiplier に達するまで、10 秒ごとに負荷乗数に適用される線形増分です。 |
load_scheduler | LoadSchedulerParameters | はい | -- | -- | ワークロードスケジューラとセレクターの構成。LoadSchedulerParameters をご参照ください。 |
max_load_multiplier | float64 | いいえ | 2 | 最小値:0 | 過負荷状態からの回復中の最大負荷乗数。この値に達すると、スケジューラはパススルーモードに入り、リクエストはスケジューラをバイパスして直接サービスに送られます。システムが再び過負荷になると、パススルーモードは無効になります。このフィールドは、回復中にサービスをリクエストのバーストから保護します。 |
GradientControllerParameters
勾配コントローラーは、観測された信号と設定値の比率に基づいて負荷乗数を調整します。slope フィールドは、この比率に適用される指数であり、コントローラーがどれだけ積極的に応答するかを制御します。
| フィールド | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
max_gradient | float64 | いいえ | 1 | 勾配値の上限です。 |
min_gradient | float64 | いいえ | 0.1 | 勾配値の下限です。 |
slope | float64 | いいえ | -1 | 信号と設定値の比率に対する指数。応答の方向と積極性を制御します。 |
slope の仕組み:
| 値 | 動作 |
|---|---|
1 | 信号が高すぎる --> 制御変数を増加させます。 |
-1 | 信号が高すぎる --> 制御変数を減少させます。 |
-0.5 | 信号が高すぎる --> 制御変数を徐々に減少させます。 |
slope の絶対値は 1 以下にしてください。
LoadSchedulerParameters
重み付き公平キューイング (WFQ) ベースのワークロードスケジューラを構成し、ポリシーが適用されるトラフィックフローを指定します。
| フィールド | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
scheduler | Scheduler | いいえ | -- | WFQ ベースのワークロードスケジューラの構成です。 |
selectors | []Selector | はい | -- | スケジューラが管理するトラフィックフローの範囲を定めるセレクターです。 |
workload_latency_based_tokens | bool | いいえ | false | 履歴レイテンシーに基づいて、フローごとのトークンコストを自動的に推定します。トークンは、過去数秒間の各ワークロードにおけるフローの平均レイテンシーに設定されます。これは、同時実行数 = 平均レイテンシー x 処理中のフロー となる同時実行数制限に役立ちます。フローラベル内の明示的なトークンが最も高い優先順位を持ち、次にワークロード定義内のトークン、そして推定されたトークンが続きます。 |
Scheduler
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
workloads | []SchedulerWorkload | はい | WFQ スケジューラのワークロード定義です。 |
SchedulerWorkload
ワークロード (同じスケジューリングパラメーターを共有するトラフィックフローのグループ) を定義します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
label_matcher | LabelMatcher | いいえ | フローラベルに基づいて、このワークロードにトラフィックフローを照合します。 |
Name | string | はい | ワークロード名です。 |
Parameters | SchedulerWorkloadParameters | はい | ラベルマッチャーに一致するフローのスケジューリングパラメーターです。 |
SchedulerWorkloadParameters
ワークロード内のトラフィックフローがどのように優先順位付けされ、キューイングされるかを制御します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
priority | float64 | いいえ | 優先度です。 |
queue_timeout | string | いいえ | ワークロード内のトラフィックフローのタイムアウトです。 |
tokens | float64 | いいえ | 単一のフローを受け入れるコストです。通常、予想されるレイテンシー (応答までの時間) のミリ秒として定義されるか、リソースがフロー数によって制約される場合 (例:サードパーティのレートリミッター) は 1 に設定されます。この値は、トークンがフローラベルで指定されていない場合にのみ使用されます。 |