マイクロサービスフレームワークでは、サービスコンシューマーがサービスプロバイダーの異常なアプリケーションインスタンスを認識できない場合、サービスコールが影響を受けます。これはさらに、サービスコンシューマーのサービス性と可用性に影響を与えます。外れ値インスタンス削除機能は、High-Speed Service Framework(HSF)アプリケーションとサービスインスタンスの可用性を監視し、動的に調整します。これにより、サービスコールの成功が保証され、サービスの安定性とサービス品質(QoS)が向上します。
背景情報
次の図は、外れ値除去を必要とするシステムを示しています。この例では、システムにはアプリケーション A、B、C、および D があり、アプリケーション A はアプリケーション B、C、および D のインスタンスを呼び出します。アプリケーション B、C、または D のインスタンスが異常になり、アプリケーション A が異常なインスタンスを識別しない場合、アプリケーション A によって開始された呼び出しの一部は失敗します。次の図では、アプリケーション B には 1 つの異常なインスタンスがあり、アプリケーション C と D にはそれぞれ 2 つの異常なインスタンスがあります。アプリケーション B、C、および D に多数の異常なインスタンスがある場合、アプリケーション A のサービスパフォーマンスと可用性が影響を受ける可能性があります。
アプリケーション A のサービスパフォーマンスと可用性を確保するために、アプリケーション A の外れ値除去ポリシーを設定できます。ポリシーが設定されると、Enterprise Distributed Application Service(EDAS)はアプリケーション B、C、および D のインスタンスステータスを監視し、インスタンスを動的に追加または削除して、サービスコールの成功を保証できます。

外れ値除去のプロセスを以下に示します。
EDAS は、アプリケーション B、C、または D に異常なインスタンスがあるかどうかを検出します。異常なインスタンスが見つかった場合、EDAS は [インスタンス削除率のしきい値] パラメーターに基づいて、アプリケーションから異常なインスタンスを削除するかどうかを決定します。
EDAS は、削除されたインスタンスにアプリケーション A の呼び出しリクエストを配信しません。
EDAS は、[復旧検出単位時間] パラメーターに基づいて、異常なインスタンスが復旧したかどうかを検出します。
検出間隔は、[復旧検出単位時間] パラメーターの値とともに線形的に増加します。復旧検出単位時間のデフォルト値は 30000 ミリ秒で、0.5 分に相当します。[復元前にチェックされるインスタンスの最大数] パラメーターで指定されたしきい値に達すると、EDAS は異常なインスタンスが復旧したかどうかを最大検出間隔で検出します。
異常なインスタンスが復旧した後、EDAS はインスタンスをアプリケーションに追加して呼び出しリクエストを処理します。検出間隔は、[復旧検出単位時間] パラメーターの値(30000 ミリ秒など)にリセットされます。
プロバイダーの異常なインスタンスの比率がインスタンス削除率のしきい値パラメーターで指定されたしきい値を超える場合、EDAS はこのしきい値に基づいて異常なインスタンスを削除します。
プロバイダーが使用可能なインスタンスを 1 つだけ持っている場合、エラー率のしきい値パラメーターで指定されたしきい値を超えていても、EDAS はこのインスタンスを削除しません。
外れ値インスタンス削除ポリシーの作成
HSF アプリケーションの場合、アプリケーションレベルとサービスレベルの外れ値インスタンス削除ポリシーを作成できます。
にログインします。
- 左側のナビゲーションペインで、 を選択します。
- 上部のナビゲーションバーで リージョン を選択します。 [設定] ページで、ドロップダウンリストから マイクロサービスの名前空間 を選択します。次に、[設定の作成] をクリックします。
- [設定の作成] パネルで、パラメーターを設定します。次に、パネルの下部にある [作成] をクリックします。

次のセクションでは、外れ値インスタンス削除ポリシーを作成するためのパラメーターについて説明します。
- リージョン: 値は、外れ値インスタンス削除ポリシーを作成する前に選択した リージョン であり、変更できません。
- マイクロサービスの名前空間: 値は、外れ値インスタンス削除ポリシーを作成する前に選択した 名前空間 であり、変更できません。
- データ ID:
<アプリ ID>.QOSCONFIGの形式で外れ値インスタンス削除ポリシーの ID を入力します。アプリ ID(アプリケーションの ID)は、アプリケーションの詳細ページで取得できます。 - グループ: 値は HSF であり、変更できません。
- データの暗号化: スイッチをオンまたはオフにして、データを暗号化するかどうかを指定します。外れ値インスタンス削除ポリシーに機密データが含まれている場合は、データ漏洩のリスクを軽減するためにデータの暗号化をオンにすることをお勧めします。
- 設定形式: 外れ値インスタンス削除ポリシーの内容のデータ形式を選択します。システムは、選択した形式に基づいてデータを確認します。
- 設定内容: 外れ値インスタンス削除ポリシーの内容を入力します。
関連するプロパティとそれらに指定した値を使用して、アプリケーションレベルまたはサービスレベルで HSF アプリケーションの外れ値インスタンス削除ポリシーを作成できます。次の例は、これら 2 つのレベルで外れ値インスタンス削除ポリシーを作成する方法を示しています。
説明 サービスレベルの外れ値インスタンス削除ポリシーは、アプリケーションレベルの外れ値インスタンス削除ポリシーよりも優先されます。- アプリケーションレベルの外れ値インスタンス削除ポリシーを作成する方法の例
{ "DEFAULT": { "errorRateThreshold":0.5, "isolationTime":60000, "maxIsolationRate":0.2, "maxIsolationTimeMultiple":15, - アプリケーションレベルの外れ値インスタンス削除ポリシーを作成する方法の例
{ "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 } }
その他の要件がある場合は、外れ値インスタンス削除ポリシーを作成するためのパラメーターをご参照ください。
- アプリケーションレベルの外れ値インスタンス削除ポリシーを作成する方法の例
異常値インスタンス削除ポリシーを作成するためのパラメーター
設定管理で関連プロパティを使用するか、Java Virtual Machine(JVM)の -D パラメーターを使用して、異常値インスタンス削除ポリシーを作成できます。設定管理で作成された異常値インスタンス削除ポリシーは、 -D パラメーターを使用して作成されたポリシーよりも優先されます。設定管理で異常値インスタンス削除ポリシーを作成することをお勧めします。
| パラメーター | プロパティ | -D パラメーター | 説明 | デフォルト値 |
| 最大呼び出し回数 | requestThreshold | -Dhsf.qos.request.threshold | 最大呼び出し回数。最新の統計ウィンドウでの呼び出し回数がしきい値を超えた場合にのみ、異常値インスタンスが削除されます。 | 10 |
| エラー率下限 | errorRateThreshold | -Dhsf.qos.error.rate.threshold | エラー率の下限。呼び出されたアプリケーションまたはサービスでデプロイされたインスタンスのエラー率がこの下限を超えると、インスタンスは削除されます。 | 0.5 |
| インスタンス削除率の上限 | maxIsolationRate | -Dhsf.qos.max.isolation.rate | 削除される異常インスタンスの最大割合。しきい値に達すると、異常インスタンスはこれ以上削除されません。たとえば、アプリケーションに合計 6 つのインスタンスがあるとします。このパラメーターを 60% に設定すると、削除できるインスタンスの最大数は 3.6 で、最も近い整数である 3 に切り捨てられます。この数値は、次の式を使用して計算されます。6 × 60% = 3.6。計算結果が 1 未満の場合、1 つのインスタンスが削除されます。 | 0.2 |
| 回復検出単位時間 | isolationTime | -Dhsf.qos.isolation.time | 異常インスタンスが回復したかどうかを検出するために使用される単位時間。異常インスタンスが削除された後、EDAS は、指定された単位時間ごとに累積される間隔で、異常インスタンスが回復したかどうかを継続的に検出します。単位はミリ秒です。 | 60 × 1,000 ms(1分) |
| 未復旧の最大累積回数 | maxIsolationTimeMultiple | -Dhsf.qos.max.isolation.time.multiple | 検出の最大回数。EDAS は異常インスタンスを継続的に検出し、検出間隔は検出回数とともに回復検出単位時間ずつ線形的に増加します。指定された最大検出回数に達すると、EDAS は最長の検出間隔に基づいて、異常インスタンスが回復したかどうかを継続的に検出します。たとえば、回復検出単位時間が 60,000 ms に設定され、未復旧の最大累積回数が 60 に設定されているとします。異常インスタンスが 60 回検出された後も異常な状態が続いている場合、インスタンスはその後 60 分の間隔で検出されます。これは、次の式を使用して計算されます。60 × 60,000 ms = 60分。指定された最大検出回数に達する前にインスタンスが回復した場合、検出間隔は初期間隔、つまり回復検出単位時間の値にリセットされます。 | 60 |
| 異常値インスタンスの削除を有効にする | qosEnabled | -Dhsf.qos.enable | アプリケーションまたはサービスの異常値インスタンス削除を有効にするかどうかを指定します。 | false |
| 統計の時間枠 | timeWindowInSeconds | -Dhsf.qos.time.window.in.seconds | 最大呼び出し回数の統計の時間枠。この時間枠は統計期間です。 | 10s |
| 例外タイプ | bizExceptionPredicateClassName | -Dhsf.qos.biz.exception.class.name | アプリケーションまたはサービスのインスタンスの例外タイプ。デフォルトでは、すべてのサービス例外が例外と見なされます。カスタムインターフェースを使用して、特定のサービス例外を定義することもできます。たとえば、次の方法で例外を定義できます。
| com.taobao.hsf.exception.CountBizExceptionPredicate: すべてのサービス例外を例外として定義します。 |
結果の確認
外れ値排除機能は、外れ値排除ポリシーを構成して作成した後に有効になります。外れ値排除を構成したアプリケーションの詳細ページに移動して、アプリケーションの監視情報を表示できます。たとえば、呼び出しリクエストが異常なインスタンスにまだ転送されているかどうか、[エラー率/ 1分] が [トポロジ] タブの [エラー率のしきい値] パラメーターの値よりも高いかどうかを確認できます。このようにして、外れ値排除ポリシーが有効になっているかどうかを確認できます。詳細については、[アプリケーションの概要] をご参照ください。