SpringCloud Aliba(3):Sentine流量制御ユニット

4278 ワード

Sentinalとは何かマイクロサービスが流行するにつれて、サービスとサービスの間の安定性がますます重要になってきた.Sentinelは分布式サービスアーキテクチャ向けの流量制御コンポーネントであり、主に流量を切り口とし、限流、りゅうりょう整形、溶断劣化、システム負荷保護、ホットスポット防護などの複数の次元から開発者がマイクロサービスの安定性を保障するのを助ける.
Centinelの基本概念リソースはCentinelの重要な概念です.Javaアプリケーションの任意のコンテンツ、例えばアプリケーションによって提供されるサービス、またはアプリケーションによって呼び出される他のアプリケーションによって提供されるサービス、さらにはコードであってもよい.
Sentinel APIで定義されたコードがリソースである限り、Sentinelによって保護される.ほとんどの場合、メソッド署名、URL、さらにはサービス名をリソース名としてリソースを表示することができます.
ルールは、リソースのリアルタイム状態を中心に設定されたルールであり、流量制御ルール、溶断降格ルール、およびシステム保護ルールを含むことができる.すべてのルールは動的にリアルタイムに調整できます.
ルールの種類Sentinelのすべてのルールは、メモリ状態で動的にクエリーおよび変更でき、変更後すぐに有効になります.また、Sentinalには、独自のルールポリシーをカスタマイズするためのAPIも用意されています.
Centinelでは、トラフィック制御規則、溶断降格規則、システム保護規則、ソースアクセス制御規則、ホットスポットパラメータ規則のいくつかの規則がサポートされています.
フロー制御規則(FlowRule)フロー規則の定義0重要属性:
Fieldはデフォルト値resourceリソース名を説明し、リソース名は限流規則の作用対象count限流しきい値grade限流しきい値タイプであり、QPSまたはスレッド数モードQPSモードlimitAppフローコントロールのための呼び出し元defaultであり、呼び出し元strategy呼び出し関係限流戦略を区別しないことを表す:直接、リンク、関連付けは、リソース自体(直接)controlBehaviorフローコントロール効果(直接拒否/キュー待機/遅い起動モード)に基づいて行われ、呼び出し関係によるフロー制限をサポートせずに同じリソースを直接拒否することは、同時に複数のフロー制限ルールを持つことができます.
コード定義フロー制御規則で上記の規則の定義を理解した後、FlowRuleManagerを呼び出すことができます.loadRules()メソッドは、ハードコーディングによってトラフィック制御規則を定義します.たとえば、次のようなものです.
private static void initFlowQpsRule() {
List rules = new ArrayList<>();
FlowRule rule1 = new FlowRule();
rule1.setResource(resource);
// Set max qps to 20
rule1.setCount(20);
rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);

}詳細については、トラフィック制御を参照してください.
溶断降格規則(DegradeRule)溶断降格規則には、次のいくつかの重要な属性があります.
Fieldは、デフォルト値resourceリソース名、すなわち、ストリーム制限ルールの作用オブジェクトcountしきい値grade溶断ポリシーを説明し、秒レベルRT/秒レベル異常スケール/分レベル異常数秒レベル平均RTtimeWindow降格時間をサポートし、s単位で同じリソースに複数の降格ルールを同時に持つことができる.
上記のルールの定義を理解したら、DegradeRuleManagerを呼び出すことができます.loadRules()メソッドは、トラフィック制御規則をハードコーディングで定義する.
private static void initDegradeRule() {
    List rules = new ArrayList<>();
    DegradeRule rule = new DegradeRule();
    rule.setResource(KEY);
    // set threshold rt, 10 ms
    rule.setCount(10);
    rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
    rule.setTimeWindow(10);
    rules.add(rule);
    DegradeRuleManager.loadRules(rules);
}

詳細については、ヒューズダウングレードを参照してください.
システム保護規則(SystemRule)規則には、次のような重要な属性があります.
Fieldはデフォルト値highestSystemLoad load 1のしきい値を説明し、参照値-1(非有効)avgRtのすべてのエントリトラフィックの平均応答時間-1(非有効)maxThreadエントリトラフィックの最大同時数-1(非有効)qpsのすべてのエントリリソースのQPS-1(非有効)highestCpuUsageの現在のシステムのCPU使用率(0.0-1.0)-1(非有効)は上記のルールの定義を理解した後、SystemRuleManagerを呼び出すことができますloadRules()メソッドは、トラフィック制御規則をハードコーディングで定義する.
private void initSystemProtectionRule() { List rules = new ArrayList<>(); SystemRule rule = new SystemRule(); rule.setHighestSystemLoad(10); rules.add(rule); SystemRuleManager.loadRules(rules);}詳細については、システム適応保護を参照してください.
アクセス制御ルール(AuthorityRule)多くの場合、呼び出し元に基づいてリソースが通過するかどうかを制限する必要があります.この場合、Sentineのアクセス制御(白黒リスト)機能を使用できます.白黒リストは、リソースの要求元(origin)によってリソースの通過を制限します.ホワイトリストを構成すると、要求元がホワイトリスト内にある場合のみ通過します.ブラックリストを構成すると、要求元がブラックリストにある場合は通過しません.残りの要求は通過します.
認証ルール、すなわち白黒リストルール(AuthorityRule)は非常に簡単で、主に以下の構成項目があります.
resource:リソース名、すなわちストリーム制限ルールの役割オブジェクト
LimitApp:対応するブラックリスト/ホワイトリスト、異なるorigin用、分離、例えばappA、appB
strategy:制限モード、AUTHEORITY_WHITEはホワイトリストモード、AUTHEORITY_BLACKはブラックリストモード、デフォルトはホワイトリストモード
詳細については、ソースアクセス制御を参照してください.
ホットスポット規則(ParamFlowRule)の詳細は、ホットスポットパラメータのストリーム制限を参照してください.
Sentinelコンソール概要Sentinelは、マシン発見および健康状態管理、モニタリング(スタンドアロンおよびクラスタ)、ルール管理およびプッシュ機能を提供する軽量レベルのオープンソースコンソールを提供します.また、生産環境においても認証は少なくありません.ここでは、これらの機能を簡単な手順で使用する方法について詳しく説明します.
次に、CentinelコアライブラリとDashboardを統合し、最大の役割を果たす方法について説明します.また、アリクラウド上でエンタープライズクラスのコンソール:AHAS Centinelコンソールを提供しています.いくつかの簡単な手順だけで、コンソールがこれらの機能をどのように実現するかを最も直感的に見ることができます.
Centinelコンソールには、次の機能があります.
マシンのリストと健康状態の表示:Sentinelクライアントから送信されたハートビートパケットを収集し、マシンがオンラインであるかどうかを判断します.
モニタリング(スタンドアロンとクラスタの集約):Sentinelクライアントが暴露したモニタリングAPIを通じて、定期的にアプリケーションモニタリング情報を引き出し、集約し、最終的に秒レベルのリアルタイムモニタリングを実現することができる.
ルール管理とプッシュ:プッシュルールを統一的に管理します.
鑑権:生産環境において鑑権は非常に重要である.ここでは各開発者が自分の実際の状況に応じてカスタマイズする必要があります.