Spring Alibaba Sentinel流量制御の詳細

4154 ワード

流量制御の詳細
流量制御、その原理は応用流量のQPSあるいは同時スレッド数などの指標を監視するので、指定の閾値に達する時流量に対して制御を行って、瞬時の流量のピークに打ち砕かれることを免れて、それによって応用の高い可用性を保障します
同じリソースで複数の制限フロールールを作成できます.FlowSlotは、ルールによって制限フローがトリガーされるか、すべてのルールが遍歴されるまで、そのリソースのすべての制限フロールールを順次遍歴します.
1つのストリーム制限規則は主に以下の要素から構成され、これらの要素を組み合わせて異なるストリーム制限効果を実現することができます.
  • resource:リソース名、すなわちストリーム制限規則の作用オブジェクト
  • count:ストリーム制限しきい値
  • grade:ストリーム制限しきい値タイプ(QPSまたは同時スレッド数)
  • limitApp:フロー制御による呼び出し元、defaultであれば呼び出し元
  • を区別しない.
  • strategy:呼び出し関係ストリーム制限ポリシー
  • controlBehavior:トラフィック制御効果(直接拒否、Warm Up、均一キュー)
  • QPS/同時数に基づく流量制御
    流量制御には主に2つの統計タイプがあり、1つは統計同時スレッド数であり、もう1つは統計QPSである.タイプは、FlowRulegradeフィールドによって定義される.ここで、0は同時数による限流を表し、1はQPSによる流量制御を表す
    同時スレッド数制御
    同時数制御は、ビジネス・スレッド・プールが遅い呼び出しで消費されないように保護するために使用されます.この分離スキームは、分離性が良いが、その代価として、スレッドの数が多すぎて、スレッドコンテキストの切り替えのoverheadが大きく、特に低遅延の呼び出しに大きな影響を及ぼすことがあります.
    //   
    List<FlowRule> rules = new ArrayList<FlowRule>();
    FlowRule rule1 = new FlowRule();
    //            
    rule1.setResource("methodA");
    //      'methodA'    20   
    rule1.setCount(20);
    //           
    rule1.setGrade(RuleConstant.FLOW_GRADE_THREAD);
    //        
    rule1.setLimitApp("default");
    rules.add(rule1);
    FlowRuleManager.loadRules(rules);
    

    QPS流量制御
    QPSがある閾値を超えた場合、流量制御を行う措置をとり、流量制御の効果は以下のいくつかを含む:直接拒否、Warm Up、均一速度キュー、FlowRule中のcontrolBehaviorフィールドに対応する
    直接拒否以外のトラフィック制御効果を使用すると、リレーショナルストリーム制限ポリシー(strategy)を呼び出すと無視されます.
    直接拒否
    直接拒否(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式はデフォルトの流量制御方式であり、QPSが任意の規則のしきい値を超えると、新しい要求は直ちに拒否され、拒否方式はFlowExceptionを投げ出す
    Warm Up
    Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式、すなわち予熱/冷始動方式は、「冷始動」により、通過する流量を徐々に増加させ、一定時間で閾値上限まで徐々に増加させる
    きんそくれつ
    等速キュー(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式は、要求が通過する間隔時間を厳格に制御し、すなわち、要求を均一な速度で通過させる、例えば閾値QPS=2の場合、500 msごとに1つの要求を処理し、現在10個の要求があると仮定すると、5秒のキュー処理が必要となる