「SpringCloudAlibabaマイクロサービスアーキテクチャ」特別トピック(11)-SpringCloudAlibabaのSentinelの基本の紹介

1.センチネルの紹介

ここに画像の説明を挿入します
Sentinelこれは、クラウドネイティブのマイクロサービス向けの可用性の高いフロー制御保護コンポーネントです。マイクロサービスの人気に伴い、サービスとサービス間の安定性がますます重要になっています。Sentinelフローを開始点として、サービスの安定性は、フロー制御、ヒューズの劣化、システム負荷保護などの複数の側面から保護されます。簡単に言えば、これは私が以前に学んだHystrixのアップグレードバージョンです。

公式の定義:Sentinelは分散システムのトラフィックガードです。Sentinelは分散システムにとって重要であると考えられます。

2.センチネル機能

リッチアプリケーションシナリオ:Sentinelは、スパイク(つまり、システム容量の範囲内でのバーストトラフィック制御)、メッセージのピーク削減と谷の充填、およびクラスターフロー制御、ダウンストリームの利用できないアプリケーションのリアルタイム融合など。

完全なリアルタイム監視:Sentinelはリアルタイム監視機能も提供します。コンソールには、アプリケーションに接続された単一のマシンの第2レベルのデータが表示され、500ユニット未満のクラスターの要約操作ステータスも表示されます。

広範なオープンソースエコロジー:Sentinelは、Spring Cloud、Dubbo、gRPCとの統合など、他のオープンソースフレームワーク/ライブラリとのすぐに使用できる統合モジュールを提供します。対応する依存関係を導入し、簡単な構成を実行するだけで、Sentinelにすばやくアクセスできます。

完全なSPI拡張ポイント:Sentinelは、シンプルで使いやすく、完全なSPI拡張インターフェイスを提供します。拡張インターフェースを実装することにより、ロジックをすばやくカスタマイズできます。たとえば、カスタムルール管理、動的データソースの適応など。

ここに画像の説明を挿入します
Sentinelのオープンソースエコロジカルマップ
ここに画像の説明を挿入します
上の図からわかるように、Sentinelは、他のオープンソースフレームワーク/ライブラリとのすぐに使用できる統合モジュールを提供します。

Sentinelの公式ウェブサイトアドレス:https//github.com/alibaba/Sentinel

3.Hystrix VSSentinel

ヤマアラシ センチネル
プログラマーが監視プラットフォームを手動で構築する必要がある 単一のコンポーネントを独立させることができます
フロー制御、レート制御、サービスフュージング、サービス劣化など、プログラマーにさらにきめ細かい構成を提供できるWebインターフェイスのセットはありません。 ダイレクトインターフェイスを備えたきめ細かい統合構成

一般に、Sentinelはより便利ですばやく使用でき、プログラマーが手動で監視プラットフォームを構築する必要がなく、結合度が低くなります。

4. Sentinelのダウンロード、インストール、実行

[A]ダウンロードアドレスhttps//github.com/alibaba/Sentinel/releases
ここに画像の説明を挿入します
ここではsentinel-dashboard-1.7.0.jar、このデモで使用したSentinelバージョンとしてダウンロードすることを選択します

[B] Sentinelコンソールをインストールします

Sentinelは2つの部分に分かれています。

  • コアライブラリ(Javaクライアント)はフレームワーク/ライブラリに依存せず、すべてのJavaランタイム環境で実行でき、Dubbo / SpringCloudおよびその他のフレームワークも適切にサポートします。

  • コンソール(ダッシュボード)はSpringBootに基づいて開発されており、Tomcatなどの追加のアプリケーションコンテナなしで、パッケージ化の直後に実行できます。

[C]コマンドを実行します

操作の前提条件:Java8 JDK環境は少なくともOKである必要があり、ポート8080を占有することはできません。ポート8080がTomcatのデフォルトのポートであることは誰もが知っています。理由はわかりませんが、Sentinelはポート番号として8080を選択しました。

ダウンロードしたSentinelJarパッケージディレクトリでCMDコマンドラインウィンドウを開き、次のコマンドを入力して開始します。

java -jar sentinel-dashboard-1.7.0.jar

ここに画像の説明を挿入します
起動が完了すると、Sentinelが監視するポートが8080であることがわかります。

[D] Sentinel管理インターフェイスにアクセスします

起動が成功すると、ブラウザは次の場所にアクセスします。http:// localhost:8080 /#/ dashboard / homeログインが成功すると、以下に示すように
ここに画像の説明を挿入します
、デフォルトのユーザー名とパスワード(両方sentinel)を使用してログインし
ここに画像の説明を挿入します
ます。これを見ることができますインターフェースは、Sentinelのダウンロードとインストールの構成が成功したことを示しています。

5.センチネル初期化モニタリング

次に、例を使用して、マイクロサービスをSentinel監視プラットフォームと統合し、監視やマイクロサービスアプリケーションの現在の制限などの操作を実装する方法を紹介します。

新しいモジュール【springcloudalibaba-sentinel-service8401を作成し、サービス登録機能をnacosと組み合わせる必要があることに注意してください。

[A]センチネルの依存関係をpom.xmlに追加します:spring-cloud-starter-alibaba-sentinel

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-alibaba-nacos</artifactId>
        <groupId>com.bruce.springcloud-alibaba-nacos</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

    <dependencies>

        <!-- Alibaba-nacos服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>nacos-client</artifactId>
                    <groupId>com.alibaba.nacos</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- nacos-client -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.2.0</version>
        </dependency>

        <!-- hystrix断路器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <!-- openfeign客户端 ,默认集成并开启了ribbon负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!-- web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!--排除tomcat依赖 -->
                <exclusion>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--undertow容器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

        <!-- lombok插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--SpringCloud ailibaba sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>6</source>
                    <target>6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

[B] aplication.yml:歩哨監視プラットフォームのアドレスを構成します

server:
  port: 8401
spring:
  application:
    name: springcloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848   #指定nacos服务器地址
    sentinel:
      transport:
        dashboard: localhost:8080   #指定sentinel控制台的地址
        port: 8719  #sentinel api端口, 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
management:
  endpoints:
    web:
      exposure:
        include: '*'   #配置对外暴露端口

[C]スタートアップ

package com.bruce;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class SentinelServiceApplicaiton8401 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(SentinelServiceApplicaiton8401.class, args);
    }
}

[D]テストコントローラー

package com.bruce.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SentinelController {
    
    

    @GetMapping("/sentinel")
    public String sentinel() {
    
    
        return "hello, sentinel dashboard....";
    }
}

[E]テスト

Step1Nacos
Step2サーバーを起動します
Step3;:Sentinelダッシュボードサーバーを起動します;:[springcloudalibaba-sentinel-service8401]スタートアップクラス、ポート8401を実行します;:
Step4次にhttp:// localhost:8848 / nacosにアクセスし、サービス管理下のサービスのリストを見つけます。次の図に示すように、「springcloudalibaba-sentinel-service」という名前のアプリケーションに移動し、Nacosサービス管理ページに登録します。
ここに画像の説明を挿入します
Step5::次に、http://localhost:8080リクエストにアクセスし、Sentinelログインページに切り替えて、ダッシュボードのホームページに入ります。現時点では、Sentinelコンソールはマイクロサービスを監視していません。
ここに画像の説明を挿入します
その理由は、Sentinelが遅延読み込みメカニズムを使用しているためです。マイクロサービス[springcloudalibaba-sentinel-service8401]には現在、監視するトラフィック情報がありません。手動でリクエストをトリガーする必要があります。l http://localhost:8401/sentine
ここに画像の説明を挿入します
次に、Sentinelダッシュボードインターフェイスに戻ります。次の図に示すように、[springcloudalibaba-sentinel-service8401]サービス監視トラフィック情報など
ここに画像の説明を挿入します
を参照してください。リアルタイム監視により、ピークトラフィックのフロー効果を確認できます。緑の線はパスを表し、青の線はパスを表します。拒否を表します。

ここに画像の説明を挿入します
現在、Sentinelコンソールはマイクロサービス[springcloudalibaba-sentinel-service8401]を監視しています。これは、SentinelダッシュボードがHystrixダッシュボード機能に取って代わることを意味します。

6.まとめ

この記事では、主にSentinelの主な機能を要約し、例を使用して、マイクロサービスのトラフィック監視および電流制限プラットフォームとしてSentinelを使用する方法を紹介します。一般に、以前に学習したHystrixと比較すると、使用方法が簡素化されています。少なくとも、Hystrixダッシュボードを手動で作成する必要はありません。

おすすめ

転載: blog.csdn.net/BruceLiu_code/article/details/113882399