SpringCloud Alibaba - Sentinel の高度なゲームプレイ、Sentinel ダッシュボードのソース コードの変更、プッシュ モードの実装

目次

1. ルールの永続化

1.1. ルールの永続性とは何ですか?

1.1.1. 背景を使用する

1.1.2. ルール管理の 3 つのモード

a) オリジナルモード

b) プルモード

c) プッシュモード

1.2. プッシュモードの実装

1.2.1. Nacos 設定センターをリッスンするように order-service サービスを変更する

1.2.2. Sentinel ダッシュボードのソース コードを変更し、nacos データ ソースを設定する

1.2.3. Sentinel ダッシュボードのソース コードを変更し、フロントエンド ページを変更する

1.2.4. ダッシュボードのソースコードの再コンパイルとパッケージ化

1.2.5. 開始


1. ルールの永続化


1.1. ルールの永続性とは何ですか?

1.1.1. 背景を使用する

以前に Sentinel の一般的なゲームプレイを学習しましたが、使用中に問題が見つかりました。つまり、サービスが再起動されるたびに、Sentinel コンソールで設定されたさまざまなルールが失われます。これは、Sentinel のデフォルト設定がこれらのルールがメモリに保存されるためです。実稼働環境では、この状況は容認できません。

この問題は、センチネルのルール永続化によって解決できます。

1.1.2. ルール管理の 3 つのモード

a) オリジナルモード

オリジナルのモードは Sentinel のデフォルト モードです。このモードでは、Sentinel はルールをメモリに保存しますが、再起動するとルールは自然に失われます。

b) プルモード

実際の開発では、マイクロサービスはクラスターである必要があります。ダッシュボードにルールを記述すると、ルールはマイクロサービスの Sentinel クライアントにプッシュされます。その後、最初にルールがメモリに更新され、次にルールがローカル ファイルに永続化されます。データベース。

では、このルールが変更されたかどうかはどうすればわかるのでしょうか?

ここで、マイクロサービスはファイルまたはデータベースを定期的にポーリングし、データベースまたはファイルの内容の変更を検出すると、ルールが更新されたことを認識し、キャッシュ内のデータを更新できます。

 欠陥

1. 適時性が低い: ハードディスクの読み取り速度に関係なく、読み取り速度が制限されているため、データベース内のデータが変更されますが、キャッシュ内のデータは変更されていません。キャッシュ内のデータ 無効なデータです。

c) プッシュモード

プッシュ モードでは、Sentinel ダッシュボードはルールを Sentinel クライアントにプッシュしませんが、ルールをリモート構成センターに保存します。

たとえば、nacos では、マイクロサービスが nacos を監視でき、変更が検出されると、データが即座に Sentinel クライアントに更新されます (プッシュ モードがリアルタイムで更新されることを示します)。

欠陥

実装はより複雑で、ソース コードの変更が必要になります。

 

1.2. プッシュモードの実装

1.2.1. Nacos 設定センターをリッスンするように order-service サービスを変更する

order-service で nacos を監視するための Sentinel の依存関係を導入します。

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

order-service の application.yml ファイルで nacos アドレスとモニタリング構成情報を構成します。

spring:
  cloud:
    sentinel:
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # 还可以是:degrade、authority、param-flow

 

1.2.2. Sentinel ダッシュボードのソース コードを変更し、nacos データ ソースを設定する

Sentinel ソース コード パッケージを github からダウンロードして解凍し、IDEA で開きます。

Sentinel-dashboard ソース コードの pom ファイルを変更し、  sentinel- datasource - nacos が依存する スコープ を削除します。

1.2.3. Sentinel ダッシュボードのソース コードを変更し、フロントエンド ページを変更する

a)  test ディレクトリの nacos コードをmain の下の com.alibaba.csp.sentinel.dashboard.rule パッケージに コピーします

b)コピーした nacos パッケージの下の NacosConfig クラスを変更し、その中のnacosアドレスを変更します

import java.util.List;

import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Eric Zhao
 * @since 1.4.0
 */
@Configuration
public class NacosConfig {

    @Bean
    public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
        return JSON::toJSONString;
    }

    @Bean
    public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
        return s -> JSON.parseArray(s, FlowRuleEntity.class);
    }

    @Bean
    public ConfigService nacosConfigService() throws Exception {
        return ConfigFactory.createConfigService("localhost:8848");
    }
}

c) com.alibaba.csp.sentinel.dashboard.controller.v2 パッケージの下の FlowControllerV2 クラスを変更します 

次のコードを配置します。

    @Autowired
    @Qualifier("flowRuleDefaultProvider")
    private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
    @Autowired
    @Qualifier("flowRuleDefaultPublisher")
    private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

着替える:

    @Autowired
    @Qualifier("flowRuleNacosProvider")
    private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
    @Autowired
    @Qualifier("flowRuleNacosPublisher")
    private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

d) src /main/webapp/resources/app/scripts/directives/sidebar/ ディレクトリ内の sidebar.html ファイルを変更します 。

コメントのこの部分を開きます。

          <!--<li ui-sref-active="active" ng-if="entry.appType==0">-->
            <!--<a ui-sref="dashboard.flow({app: entry.app})">-->
              <!--<i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则 V1</a>-->
          <!--</li>-->

中のテキストを変更します。

          <li ui-sref-active="active" ng-if="entry.appType==0">
            <a ui-sref="dashboard.flow({app: entry.app})">
              <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则 Nacos</a>
          </li>

1.2.4. ダッシュボードのソースコードの再コンパイルとパッケージ化

IDEA で Maven プラグインを実行して、変更された Sentinel-Dashboard をコンパイルしてパッケージ化します (単体テストを削除することを忘れないでください)。

1.2.5. 開始

次のコマンドを使用して nacos アドレスを変更し、起動します。

java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar

Sentinel クライアントを開くと、追加のフロー制御ルールがあることがわかります。ここで設定されたルールは、サービスが再起動されても消えません。

おすすめ

転載: blog.csdn.net/CYK_byte/article/details/133494721