春の雲アリババ|センチネル:交通防衛兵分散システムの動的電流制限ルール

春の雲アリババ|センチネル:交通防衛兵分散システムの動的電流制限ルール

前の記事センチネル姿勢の使用のより詳細なアカウント、小さなパートナーは表示するには、以下のリンクにアクセスすることができます見ていません。

しかし、まだ非常に重要なポイントである、私たちの日常の生産のニーズを満たすことができない現在使用中のメモリの存在を制限するルールを設定することです、我々は、我々はセンチネルコンソールで設定されたルールの各アプリケーションが失われた後に再起動ここでは、センチネルルール永続的に紹介します。

Sentinelは、私たちがルールを変更するための2つの方法を提供しています。

  • APIによる直接修正(loadRules)
  • DataSourceを適応異なるデータソースによって変更

loadRules()メソッドは、ルールオブジェクトのメモリ状態をとるが、より多くの場合、ファイル、データベース、またはその中心の構成に記憶されたルール。DataSourceインタフェースは、任意の構成ソースをドッキングする機能を提供してくれます。ルールを変更するためのAPIを介して直接比較すると、DataSourceインタフェースは、より信頼性の高いアプローチです実装しています。

データソースは、一般的な実装を拡張し、次のとおりです。

  • モードを引い:クライアントが定期的にポーリングルールを引っ張っルール管理センターへの取り組みを、このルールはそうでRDBMS、ファイルの中心部、さらにはVCSであってもよいです。これを行う方法は、欠点がタイムリーに変更を取得することができません、簡単です。
  • プッシュモード:統一されたルールのためのセンターでは、そのような使用などの変更、ナコス、飼育係や他の流通センターに聞いて登録されたリスナーを経由してクライアントにプッシュします。このアプローチは、より良いリアルタイム性と一貫性を確保しています。

Sentinelは現在、次のデータソースの拡張機能をサポートしています。

  • プル・ベース:(1.7.0以降)ファイル、領事を
  • プッシュベース:ZooKeeperの、Redisの、ナコス、アポロ

ここでは、センチネル動的ルールがナコスに基づくものに焦点を当てます。

1.センチネル動的なルールベースの戦闘ナコス

1.1サブプロジェクトsentinel_nacosを作成

次のようにプロジェクトがのpom.xmlを依存しています:

リスト:アリババ/センチネル-springcloudハイ/ sentinel_nacos /のpom.xml
***

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

1.2 application.ymlプロファイル次のように:

リスト:アリババ/センチネル-springcloudハイ/ sentinel_nacos / srcに/メイン/リソース/ application.yml
***

server:
  port: 10000
spring:
  application:
    name: spring-cloud-sentinel-nacos
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.44.129:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8720
      datasource:
        ds:
          nacos:
            server-addr: 192.168.44.129:8848
            dataId: spring-cloud-sentinel-nacos
            groupId: DEFAULT_GROUP
            rule-type: flow
            namespace: 8282c713-da90-486a-8438-2a5a212ef44f
  • spring.cloud.sentinel.transport.dashboard:アクセスアドレスセンチネルコンソール。
  • spring.cloud.sentinel.datasource.ds.nacos.server-addr:ナコスアクセスアドレス。
  • spring.cloud.sentinel.datasource.ds.nacos.dataId:グループIDは、格納されたルールをナコス。
  • spring.cloud.sentinel.datasource.ds.nacos.groupId:データIDは、格納されたルールをナコス。
  • spring.cloud.sentinel.datasource.ds.nacos.rule-type:ルールは、ストレージ、空ではないのタイプを定義するために使用されます。
  • spring.cloud.sentinel.datasource.ds.nacos.namespace:名前空間は、格納されたルールをナコス。

この例では、バージョン反復関係の設定情報は必ずしもすべてのバージョンには適用されませんので、あなたが分析することができDataSourcePropertiesConfigurationNacosDataSourcePropertiesかつAbstractDataSourceProperties詳細な設定を取得するには、3つの構成がより正確になります。

例えば、この構成例では、由来するNacosDataSourcePropertiesAbstractDataSourceProperties

NacosDataSourcePropertiesソースは以下のとおりです。

public class NacosDataSourceProperties extends AbstractDataSourceProperties {

    private String serverAddr;

    @NotEmpty
    private String groupId = "DEFAULT_GROUP";

    @NotEmpty
    private String dataId;

    private String endpoint;
    private String namespace;
    private String accessKey;
    private String secretKey;

    // 代码省略...
}

AbstractDataSourcePropertiesソースは以下のとおりです。

public class AbstractDataSourceProperties {

    @NotEmpty
    private String dataType = "json";
    @NotNull
    private RuleType ruleType;
    private String converterClass;
    @JsonIgnore
    private final String factoryBeanName;
    @JsonIgnore
    private Environment env;
}

ここで私は唯一の非空と無デフォルト値を設定しruleType、関連するruleType値を表示することができcom.alibaba.cloud.sentinel.datasource.RuleType、これは列挙型です。

次のようにテストクラスHelloController.javaを作成するには、1.3インタフェース:

代码清单:アリババ/センチネル-springcloud高/ sentinel_nacos / srcに/メイン/ javaの/ COM / springcloud / sentinel_nacos /コントローラ/ HelloController.java
***

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(HttpServletRequest request) {
        return "Hello, port is: " + request.getLocalPort();
    }
}

1.4コンフィギュナコスフィギュレーションセンター

示すような構成内容:

その構成は、前記整合性グループのデータIDと構成するプログラムに留意されたいです。次のように満たされたフォーマットの選択JSON、:

[
    {
        "resource": "/hello",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

上記の構成は、ルールは、アレイ内の各オブジェクトは、以下のように、各オブジェクトのプロパティについて説明保護されたリソース・オブジェクトのそれぞれに対して配置されたアレイ型であることがわかります。

  • リソース:リソース名、あること、ルールを制限するオブジェクトの役割。
  • limitApp:デフォルトの場合の呼び出し元ではない場合、フロー制御のためのソースを呼び出します。
  • グレード:上限しきい値タイプ、またはQPSスレッドモードの数は、0は制限同時現在の数、流量制御の代表QPSに従って行われることを示します。
  • カウント:制限スレッショルド
  • 戦略:リソース自体、または他の関連リソース(refResource)に従ってに従って決定される、またはリンク入口に従って
  • controlBehavior:フロー制御効果(直接拒否/キューに登録/スロースタートモード)
  • clusterMode:クラスタモデルかどうか

1.5テスト

通常、プロジェクトのプロモーターは、いくつかのHTTPアクセスするためのブラウザで開く:// localhostを:10000 /ハローを、そのうちのいくつかを速度制限が見つかりました、とページを制限した後、以下のことが示されたことがあります。

Blocked by Sentinel (flow limiting)

フロント制限の設定は、その後、私たちは、交通規制のルールを見て、センチネルコンソールを開き、データの一部が示されているよう私たちは、ナコスで設定したデータである持って成功しています。

注意:

センチネルの2箇所があるインターフェイスフロー制御を変更するために、ナコス後に動的ルールを統合し、一つのSentinelコンソールであり、ナコスコンソールがあります。

しかし、センチネルコンソールのルールに修正現在のバージョンで、物流センターナコスに同期されません、とナコスで構成ルールを変更し、クライアントはセンチネルコンソールを同期させることがリスナーによるであろうことを覚えておきます。だから、動的ルールの統合後ナコスで注意することは2つのことを行う格納されます。

  • ルールを変更するにはセンチネルコンソール:サービスは、メモリ内にのみ存在して、再起動後に元の値を復元し、設定値にナコスは変更されません。
  • ナコスコンソールは、ルールを変更するには:メモリ内のサービスのルールが更新され、再起動が残っ後ナコス永続的なルールが更新されます。

私はブロックルールの変更操作をするナコスコンソールでベストを尽くすことを示唆し、センチネルコンソールで直接行うダイレクトルールの変更を避けるようにしてください。

2.サンプルコード

Github-サンプルコード

Gitee-サンプルコード

おすすめ

転載: www.cnblogs.com/babycomeon/p/11525661.html