High-speed Service Framework (HSF) サービスプロバイダーに不健全なインスタンスが存在する場合、コンシューマー側にはそれらを検出するための組み込み機能がありません。これらのインスタンスにルーティングされたリクエストは失敗し、コンシューマーの可用性が低下します。外れ値インスタンスの削除(外れ値削除)は、プロバイダーインスタンスを継続的にモニターし、不健全なインスタンスを負荷分散プールから自動的に除外したうえで、回復後に再登録することで、この課題を解決します。
仕組み
アプリケーション A がアプリケーション B、C、D の各インスタンスを呼び出すシステムを想定します。アプリケーション B に不健全なインスタンスが 1 つ、アプリケーション C および D にそれぞれ 2 つ存在する場合、アプリケーション A からの一部のリクエストが失敗します。プロバイダーインスタンスの不健全化が進行すると、アプリケーション A 全体のパフォーマンスが劣化します。

アプリケーション A を保護するため、コンシューマー側で外れ値削除ポリシーを設定します。Enterprise Distributed Application Service (EDAS) は、このライフサイクルに従って各プロバイダーインスタンスを管理します。
検出。 EDAS はプロバイダーインスタンスをモニターし、統計タイムウィンドウ内で設定されたしきい値を超えるエラー率を示すインスタンスを特定します。
除外。 EDAS は、最大除外比率の制限に従って不健全なインスタンスを負荷分散プールから除外します。アプリケーション A からのリクエストは、除外されたインスタンスへルーティングされなくなります。
プローブ。 EDAS は定期的に除外されたインスタンスの回復状況を確認します。プローブ間隔は、設定された回復検出単位時間から開始し、連続して失敗したプローブごとに線形に増加します。
上限制御。 連続して失敗したプローブ数が設定された最大値に達すると、プローブ間隔の増加は停止し、最大値で固定されます。
再登録。 除外されたインスタンスが回復した後、EDAS はそのインスタンスをプールに再登録し、プローブ間隔を初期値にリセットします。
不健全なインスタンスの比率が最大除外比率を超える場合、EDAS はその比率に達するまでのみインスタンスを除外します。これにより、一度に過剰な数のインスタンスが除外されるのを防ぎます。
プロバイダーに利用可能なインスタンスが 1 つのみの場合、たとえエラー率がしきい値を超えても、EDAS はそのインスタンスを除外しません。
外れ値削除ポリシーの作成
HSF アプリケーションでは、以下の 2 つのレベルで外れ値削除ポリシーをサポートしています。
アプリケーションレベル — アプリケーションが提供するすべてのサービスに適用されます。
"ipDimension": trueを設定することで有効化します。サービスレベル — 特定のサービスおよびバージョンを対象とします。アプリケーションレベルのポリシーよりも優先されます。
開始前に、以下の条件を満たしていることを確認してください。
EDAS 上にデプロイ済みの HSF アプリケーション
EDAS コンソール へのアクセス権限
手順 1: 構成管理を開く
EDAS コンソール にログインします。
左側ナビゲーションウィンドウで、アプリケーション管理 > 設定管理 > Configurations を選択します。
上部ナビゲーションバーでリージョンを選択します。構成 ページで、ドロップダウンリストからマイクロサービス名前空間を選択します。
構成の作成 をクリックします。
手順 2:ポリシーのパラメーター設定
構成の作成 パネルで、以下のパラメーターを設定します。

| パラメーター | 説明 |
|---|---|
| リージョン | 事前に選択したリージョンが自動入力されます。変更できません。 |
| マイクロサービス名前空間 | 事前に選択した名前空間が自動入力されます。変更できません。 |
| Data ID | <App ID>.QOSCONFIG の形式で ID を入力します。App ID はアプリケーション詳細ページで確認できます。 |
| グループ | 固定値:HSF。変更できません。 |
| データ暗号化 | オンに設定すると、機密性の高いポリシー情報を暗号化し、データ漏えいのリスクを低減できます。 |
| 構成フォーマット | データ形式を選択します。システムは、この形式に基づいて内容を検証します。 |
| 構成内容 | JSON 形式のポリシー構成を入力します。以下の例をご参照ください。 |
手順 3:ポリシー構成の入力
以下の JSON 例をテンプレートとして使用します。必要に応じてパラメーター値を置き換えてください。
アプリケーションレベルのポリシー
この構成は、アプリケーション配下のすべてのサービスに適用されます。"ipDimension": true を設定することで、インスタンス単位のトラッキングを有効化します。
{
"DEFAULT": {
"errorRateThreshold": 0.5,
"isolationTime": 60000,
"maxIsolationRate": 0.2,
"maxIsolationTimeMultiple": 15,
"qosEnabled": true,
"requestThreshold": 20,
"timeWindowInSeconds": 10,
"ipDimension": true
}
}サービスレベルのポリシー
ベースライン用に DEFAULT ブロックを定義し、サービス固有のオーバーライド用に "service:version" ブロックを追加します。サービスレベルのブロックが優先されます。
{
"DEFAULT": {
"errorRateThreshold": 0.5,
"isolationTime": 60000,
"maxIsolationRate": 0.2,
"maxIsolationTimeMultiple": 15,
"qosEnabled": true,
"requestThreshold": 20,
"timeWindowInSeconds": 10
},
"service:version": {
"errorRateThreshold": 0.5,
"isolationTime": 60000,
"maxIsolationRate": 0.2,
"maxIsolationTimeMultiple": 15,
"qosEnabled": true,
"requestThreshold": 20,
"timeWindowInSeconds": 10
}
}service:version を実際のサービス名およびバージョン(例:com.alibaba.edas.OrderService:1.0.0)に置き換えてください。
手順 4:ポリシーの保存
パネル下部の 作成 をクリックします。
パラメーター リファレンス
外れ値削除は、構成管理(JSON プロパティ)または JVM -D パラメーターのいずれかで設定できます。構成管理の設定は、-D パラメーターの設定より優先されます。
| パラメーター | プロパティ | JVM パラメーター | デフォルト値 | 説明 |
|---|---|---|---|---|
| 外れ値インスタンスの削除の有効化 | qosEnabled | -Dhsf.qos.enable | false | アプリケーションまたはサービスに対する外れ値削除を有効化または無効化します。 |
| リクエストしきい値 | requestThreshold | -Dhsf.qos.request.threshold | 10 | 除外処理を実行する前に、現在の統計タイムウィンドウ内で発生する必要がある最小リクエスト数です。サンプルデータが不足している状態での除外を防止します。 |
| エラー率しきい値 | errorRateThreshold | -Dhsf.qos.error.rate.threshold | 0.5 | インスタンスが除外される基準となるエラー率です。0.5 は 50 % を意味します。 |
| 最大除外比率 | maxIsolationRate | -Dhsf.qos.max.isolation.rate | 0.2 | 一度に除外できるインスタンスの最大割合です。結果は切り捨てられます。例:6 インスタンス × 60 % = 3.6 → 切り捨てて 3。結果が 1 より小さい場合でも、1 インスタンスは除外可能です。 |
| 回復検出単位時間 | isolationTime | -Dhsf.qos.isolation.time | 60000(1 分) | 基本プローブ間隔(ミリ秒単位)。除外後、EDAS はこの値を 1 倍、2 倍、3 倍…と線形に増加させた間隔でインスタンスをプローブします。 |
| 最大プローブ回数 | maxIsolationTimeMultiple | -Dhsf.qos.max.isolation.time.multiple | 60 | プローブ間隔の増加を停止するまでの最大プローブ回数です。例:単位時間が 60,000 ms、最大回数が 60 の場合、最長間隔は 60 × 60,000 ms = 60 分となります。インスタンスがこの回数に達する前に回復した場合は、プローブ間隔が基本単位時間にリセットされます。 |
| 統計タイムウィンドウ | timeWindowInSeconds | -Dhsf.qos.time.window.in.seconds | 10(秒) | リクエスト数のカウントおよびエラー率の算出に使用されるスライディングウィンドウの持続時間です。 |
| 例外タイプ | bizExceptionPredicateClassName | -Dhsf.qos.biz.exception.class.name | CountBizExceptionPredicate | エラー率の算出対象となる例外を決定します。選択肢: com.taobao.hsf.exception.CountBizExceptionPredicate(すべてのサービス例外をカウント)、com.taobao.hsf.exception.IgnoreBizExceptionPredicate(すべてのサービス例外を無視)、または com.taobao.hsf.Predicate を実装したカスタムクラスです。 |
結果の検証
ポリシーが有効化された後、アプリケーション監視を通じて検証します。
EDAS コンソールでアプリケーション詳細ページを開きます。
トポロジー タブに移動します。
以下の指標を確認します。
リクエストルーティング — 除外されたインスタンスへのリクエストルーティングが停止していることを確認します。
エラー率 / 1 分 — 設定された
errorRateThresholdを下回るエラー率となっていることを確認します。
詳細な監視メトリクスについては、「アプリケーション概要」をご参照ください。