zuulを使用してマイクロサービスゲートウェイを構築する
前:プロバイダークラスターと負荷分散リボン
次:Zuulはファイルのアップロードを実現しますたとえば
、アプリケーションのアクセスアドレスがたくさんある場合、それは確かです。アクセスアドレスは入口に相当します。
http:// localhost:8010 / user / 1接
http:// localhost:8001 / search / 3 / zhangsan / zz
zuulを使用すると、最初にzuulにアクセスしてから、zuulゲートウェイで対応する入口を見つけることができます—>さまざまなサービスの
統合入口を要求します---- "http:// localhost:8040/1指定された入口-----"要求さまざまなサービス
ズールの紹介
マイクロサービスアーキテクチャは形になり始めていますが、まだいくつかの問題があります。通常、マイクロサービスごとにネットワークアドレスが異なり、外部クライアント(モバイルアプリなど)がビジネス要件を完了するために複数のサービスインターフェイスを呼び出す必要がある場合があります。たとえば、映画のチケット購入用の携帯電話APPは、複数のマイクロサービスインターフェイスを呼び出して、1回限りのチケット購入のビジネスプロセスを完了する場合があります。
クライアントが各マイクロサービスと直接通信することを許可されている場合、次の問題が発生します。
- クライアントは異なるマイクロサービスを複数回要求するため、クライアントの複雑さが増します。
- クロスドメインリクエストがあり、特定のシナリオでは処理が比較的複雑です。
- 認定は複雑であり、各サービスには独立した認定が必要です。
- リファクタリングは困難です。プロジェクトの反復に伴い、マイクロサービスを再分割する必要がある場合があります。たとえば、複数のサービスを1つにマージしたり、1つのサービスを複数に分割したりすることができます。クライアントがマイクロサービスと直接通信する場合、リファクタリングを実装するのは困難です。
- 一部のマイクロサービスは、ファイアウォールブラウザに対応していないプロトコルを使用する場合があり、直接アクセスが難しい場合があります。
上記の問題は、マイクロサービスゲートウェイの助けを借りて解決することができます。マイクロサービスゲートウェイは、クライアントとサーバーの間の中間層です。すべての外部要求は、最初にマイクロサービスゲートウェイを通過します。マイクロサービスゲートウェイを使用した後、アーキテクチャは図に示すように進化できます。
マイクロサービスゲートウェイはアプリケーションの内部構造をカプセル化し、クライアントは特定のマイクロサービスのインターフェイスを直接呼び出すことなく、ゲートウェイと対話するだけで済みます。このようにして、開発を簡素化することができます。それだけでなく、マイクロサービスゲートウェイを使用することには次の利点があります。
•監視が簡単。監視データは、マイクロサービスゲートウェイで収集し、分析のために外部システムにプッシュできます。
•認証が簡単。マイクロサービスゲートウェイで認証を実行すると、各マイクロサービスで認証を行うことなく、要求がバックエンドマイクロサービスに転送されます。
•クライアントと各マイクロサービス間の相互作用の数を減らします。
Zuulの簡単な紹介
Zuulは、Nettlixのオープンソースマイクロサービスゲートウェイであり、Eureka、Ribbon、Hystrixなどのコンポーネントで使用できます。
Zuulのコアは一連のフィルターであり、これらのフィルターは次の機能を実行できます。
。ID認証とセキュリティ:各リソースの検証要件を特定し、要件を満たしていないリクエストを拒否します。
。レビューと監視:エッジで意味のあるデータと統計結果を追跡して、正確な生産ビューをもたらします。
。動的ルーティング:リクエストをさまざまなバックエンドクラスターに動的にルーティングします。
。ストレステスト:パフォーマンスを理解するために、クラスターに向けられた漂遊マウスの数を徐々に増やします。
。負荷分散:負荷タイプごとに対応する容量を割り当て、制限値を超える要求を破棄します。
。静的応答処理:応答の一部は、内部クラスターへの転送を回避するためにエッジで直接確立されます。
。マルチリージョンの柔軟性:AWSRegion全体のリクエストルーティングは、ELB(Elastic Load Balancing)を実現するように設計されてい
ます。用途の多様化、およびシステムのユーザーに近いシステムのエッジ。
Spring Cloudは、Zuulを統合および強化しました。現在、Zuulが使用するデフォルトのHTTPクライアントはApache HTTPクライアントであり、RestClientまたはokhttp3.0kHttpClientも使用できます。RestClientを使用する場合は、ribbon.restclient.enabled = trueを設定できます。okhttp3.0kHttpClientを使用する場合は、
ribbon.okhttp.enabled = trueを設定できます。
マイクロサービスゲートウェイzuulを書く
機能:マイクロサービスゲートウェイを作成します。zuulをeureka-serverに登録する
springbootプロジェクトを作成し、依存関係のサポートを追加します
pom.xmlで導入された1つのJarパッケージ
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--zuul核心依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 引入spring cloud的依赖 -->
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
2application.ymlの内容は次のとおりです。
server:
port: 8040
spring:
application:
name: zuul
eureka:
client:
service-url:
defaultZone: http://root:root@peer1:8761/eureka/,http://root:root@peer2:8762/eureka/
instance:
prefer-ip-address: true
ribbon:
ReadTimeout: 12000
ConnectTimeout: 12000
eureka:
enabled: true
zuul:
host:
socket-timeout-millis: 12000
connect-timeout-millis: 12000
info:
head: head
body: body
app:
name: @project.artifactId@
encoding: @project.build.sourceEncoding@
java:
source: @java.version@
target: @java.version@
management:
endpoints:
web:
exposure:
#加载所有的端点,默认只加载了info、health
include: '*'
endpoint:
health:
show-details: always
#可以关闭指定的端点
shutdown:
enabled: false
3スタートアップクラスに注釈を追加します
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
このようにして、単純なマイクロサービスゲートウェイが作成されました。構成から、この時点では、Zuulの依存関係のみが追加され、ZuulがEurekaサーバーに登録されていることがわかります。
4シーケンスを開始します
1eurekaサービス登録コンポーネントを
開始します2プロバイダープロジェクトを開始します
3コンシューマープロジェクトを
開始します4zuulプロジェクトを開始します
5テスト
サービス検出コンポーネントhttp:// peer1:8761にアクセスすると
、Zuulがサービス検出コンポーネントに登録されていることがわかります。
消費者にアクセスするためのルーティングを構成する
1zuul構成ファイルを追加します
zuul:
host:
socket-timeout-millis: 60000
connect-timeout-millis: 60000
routes:
consumer: /consumer/**
provider: /provider/**
2複数のプロバイダーと複数のコンシューマーの負荷分散をテストします。
すべてにアクセスでき、構成が成功したことを示します。