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]テスト
Step1
:Nacos
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ダッシュボードを手動で作成する必要はありません。