Spring CloudAlibabaの電流制限とヒューズ-Sentinelの電流制限とヒューズについて再び話します

以前、Sentinelの電流制限の簡単な使用法を紹介しましたが、今日は、Sentinelの電流制限と融合の使用法を説明し、いくつかの一般的な電流制限アルゴリズムを紹介します。いわゆる現在の制限は、同時アクセスの数を制限するか、時間枠内で許可される要求の数を制限することによってシステムを保護することです。要求の数が制限を超えると、エラーページへのジャンプ、キューイング、劣化などのいくつかの処理戦略が採用されます。現在の制限は、一部のユーザーの可用性を失うことにより、ほとんどのユーザーに安定したサービスを提供します。この記事では、Sentinelの現在の制限戦略パラメーターを詳細に紹介します。以下に、前の記事のサンプルコードをコピーします。

private void initFlowRule() {
    List<FlowRule> list = new ArrayList<FlowRule>();
    FlowRule fr = new FlowRule();
    fr.setResource("doSomeThing");
    fr.setCount(10);
    fr.setGrade(RuleConstant.FLOW_GRADE_QPS);
    fr.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
    fr.setClusterMode(false);
    fr.setStrategy(RuleConstant.STRATEGY_CHAIN);
    fr.setLimitApp("default");
    list.add(fr);
    FlowRuleManager.loadRules(list);
}

上記のコードで、setLimitApp()は、呼び出し元に電流制限が必要かどうかを示します。デフォルトはデフォルトであり、呼び出し元を区別しません。setStrategy()は、呼び出し関係の現在の制限戦略を示します。これには、直接、リンク、および関連付けの3つのモードが含まれます。setControlBehavior()直接拒否、インライン待機、スロースタートモードなどのトラフィック制限動作を示します。デフォルトは直接拒否です。setClusterMode()は、クラスタートラフィックが制限されているかどうかを示し、デフォルトはfalseです。

Sentinel電流制限モードは、同時数に基づく電流制限とQPSに基づく電流制限モードをサポートします。電流制限モードは、上記のコード(FLOW_GRADE_QPS、FLOW_GRADE_THREAD)のsetGradeによって制御されます。同時実行数に基づく現在の制限モードFLOW_GRADE_THREADは、現在要求されているコンテキストスレッドの数をカウントします。しきい値を超えると、要求は直接拒否され、ビジネススレッドが使い果たされるのを防ぎます。QPSベースの表現は、QPSが毎秒現在の制限しきい値に達すると、トラフィック制限動作をトリガーします。

前述のように、QPS戦略を使用する場合、現在の制限しきい値に達すると、トラフィック制限動作がトリガーされます。QPSに基づくトラフィック制限動作は、setControlBehaviorを介して設定されます。Sentinelは、次のトラフィック制限動作を提供します。

直接拒否(CONTROL_BEHAVIOR_DEFAULT):直接拒否モードはSentinelのデフォルトの電流制限モードです。つまり、要求が電流制限しきい値を超えると、FlowExceptionが直接スローされます。

コールドスタート(CONTROL_BEHAVIOR_WARM_UP):このモードでは、トラフィックが突然増加すると、処理できる要求の数が徐々に増加し、予想時間後に最大許容処理要求に達します。

均一速度キューイング(CONTROL_BEHAVIOR_RATE_LIMITER):このメソッドは、要求間の間隔時間を厳密に制御します。つまり、要求を均一速度で通過させます。

コールドスタート+均一速度キューイング(CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER)2つの方法を組み合わせて、トラフィック制限動作を実現します。

Sentinelの融合操作は、電流制限がFlowRuleとしてパッケージ化され、融合がDegradeRuleとしてパッケージ化されることを除いて、電流制限と同様です。コード例は次のとおりです。

private void initDegradeRule() {
    List<DegradeRule> list = new ArrayList<DegradeRule>();
    DegradeRule dr = new DegradeRule();
    dr.setResource("doSomething");
    dr.setCount(10);
    dr.setGrade(RuleConstant.DEGRADE_GRADE_RT);
    dr.setTimeWindow(10);
    dr.setMinRequestAmount(5);
    dr.setRtSlowRequestAmount(5);
    list.add(dr);
    DegradeRuleManager.loadRules(list);
}

上記のコードで、setGrade()は、融合戦略を設定することを意味します。現在、Sentinelは、第2レベルのRT、第2レベルの例外比率、および分レベルの例外番号をサポートしています。

setTimeWindow:ヒューズ劣化の時間ウィンドウ(秒単位)。これは、ヒューズがトリガーされてから自動的に融合するまでの秒数です。

setMinRequestAmount:異常な融合をトリガーするリクエストの最小数。リクエストの数はこの値より少なく、異常な比率がしきい値を超えても、融合はトリガーされません。

setRtSlowRequestAmount:RT戦略では、1秒間に継続した要求の平均期間がしきい値を超え、回路ブレーカーがトリガーされます。

Sentinelは、3つの融合戦略を提供します。異なる戦略では、上記のパラメーターも異なります。

平均応答時間(RuleConstant.DEGRADE_GRADE_RT):1秒以内に5つの要求が連続して入力され、平均応答時間がしきい値カウント(ミリ秒)を超えると、次のタイムウィンドウでヒューズがトリガーされます。

例外比率(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO):1秒あたりのリソース要求数がminRequestAmountより大きく、パスの合計数に対する1秒あたりの例外の合計数の比率がしきい値カウントを超えると、リソースは劣化状態になります。次のtimeWindowで、リソースが呼び出されます。ヒューズがトリガーされます。

例外の数(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT):リソースの最後の1分間の例外の数がしきい値を超えると、回路ブレーカーがトリガーされます。timeWindowが60秒未満の場合、フュージングが終了した後もフュージング状態に入る可能性があります。

この記事では、基本的にSentinelの電流制限と融合のすべての機能と戦略を紹介します。プロジェクトでは、実際の状況に応じて対応する戦略を選択する必要がありますが、Sentinelの使用法を個別に紹介するだけです。次の記事では、SpringCloudでのSentinelを紹介します。で使用。

おすすめ

転載: blog.csdn.net/wk19920726/article/details/108423163