ゲートウェイサービス ゲートウェイ
网关功能
ゲートウェイは、すべてのマイクロサービスへの統合された入り口です。ゲートウェイの中核となる機能特性は、主に请求路由,权限控制,限流
3 つの部分に反映されています。
- ルーティング: ゲートウェイはビジネスを処理できないため、ゲートウェイは特定の方法に従って一致するホストまたはインターフェイスにリクエストを転送する必要があります。
规则(断言)
. この転送のプロセスは、 ルーティングと呼ばれます。 负载均衡
注: ルーティング ターゲットのマイクロサービスに複数のインスタンスがある場合、負荷分散ルールを通じて複数のサービス インスタンスから 1 つを選択する必要もあります。身份认证(鉴权)
: ゲートウェイはマイクロサービスへの入り口として、ユーザーがリクエストを行う資格があるか、操作を実行する権限を持っているかを確認する必要があり、そうでない場合はインターセプトされます。访问控制
: DDOS 攻撃に対する IP アドレスの制限など、ブラック リストとホワイト リストを設定します。请求限流
: リクエスト量が多すぎる場合、過度のサービスプレッシャーを避けるために、ゲートウェイはマイクロサービスが受け入れることができる速度でリクエストを解放します。- 制御の解放: たとえば、新しいインターフェイスが起動されると、最初にトラフィックの 20% が新しいインターフェイスに割り当てられ、80% が古いインターフェイスに割り当てられます。インターフェイスであり、比率は後でゆっくりと調整されます
- [トラフィックの色分け](https://docs.spring.io/spring-cloud-gateway/docs/current/refer
ence/html/#the-addrequestheader-gatewayfilter -factory): ユーザー ソースを区別し、通常は新しいリクエスト ヘッダー、グローバル染色を追加することによって、リクエストにいくつかの識別子を追加します。 - クロスドメインの統合処理: ゲートウェイは、各プロジェクトを個別に処理することなく、統合された方法でクロスドメインを処理します
- 統合されたビジネス処理: 各プロジェクトで必要な共通ロジックを上位ゲートウェイに組み込み、統合処理を実現します。
- 統合ドキュメントナイフ4j: 統合して表示できるよう、下流プロジェクトのドキュメントを 1 ページに集約することをお勧めします
统一日志
: リクエストとレスポンスの情報レコードを統合接口保护
: 制限リクエスト、情報の非感作、電流制限のリクエスト (トークン バケット アルゴリズム、リーキー バケット アルゴリズム、RedisLimitHandler) タイムアウトとタイムアウト時の割り込みを設定する,、隠蔽のためサーキット ブレーカーをダウングレードする
网关的分类
-
全局网关(接入层网关)
: 主にロードバランシング、リクエストログなどを実装し、ビジネスロジックコードに束縛されない -
业务网关(微服务网关)
: いくつかのビジネス ロジック コードを含む、さまざまなビジネス/プロジェクト/インターフェイス/サービスにリクエストを転送します。
Spring Cloud には主に 4 種類のゲートウェイ実装があり、マイクロサービス フレームワークにシンプルで効果的な統合 API ルーティング管理方法を提供するように設計されています。
Spring Cloud Gateway
: SpringCloud の新しいプロジェクト。Spring 5.0、SpringBoot2.0、ProjectReactor などのリアクティブ プログラミングおよびイベント ストリーミング テクノロジに基づいて開発されたゲートウェイです。Zuul
:Servletベースのブロッキングプログラミング実装であり、SpringCloudGatewayはSpring 5で提供されているWebFluxベースのレスポンシブプログラミング実装なので、パフォーマンスが優れています。其他实现
: Nginx (グローバル ゲートウェイ)、Kong (API ゲートウェイ、プログラミング コストが比較的高い)
网关的实现
ステップ 1: ゲートウェイ モジュールなどの新しい SpringBoot プロジェクトを作成し、ゲートウェイの依存関係と nacos サービス ディスカバリの依存関係を導入します。
<!--网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
ステップ 2: スタートアップ クラスをgateway模块
に記述します。
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class,args);
}
}
编程式(更灵活)
: 対応するゲートウェイ コードをプロジェクト スタートアップ クラスに追加して、https://yupi.icu/yupi を http://yupi.icu/ に実装します。
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("toyupi", r -> r.path("/yupi")
.uri("http://yupi.icu/"))
.route("路由Id", r -> r.path("路由规则")
.uri("路由的目标地址"))
.route.......
.build();
}
配置式(更直观)
:基本的な設定とルーティング ルールを記述します。
路由名称(id)
: ルートの一意の表現。一意である必要があるのはユーザー定義のみです。路由目标地址(uri)
: 固定アドレスにルーティングすることも、サービスにルーティングして、負荷分散ルールに従ってサービス インスタンスを選択することもできます。路由断言(predicates)
: リクエストがルーティング ルールの条件を満たしているかどうかを判断し、満たしている場合はルーティング先に転送します。路由过滤器(filters)
: リクエストまたはレスポンスに対していくつかの処理操作を実行します。
# 快捷配置方式
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org # 路由到固定地址
uri: lb://Nacos中注册的服务名称 # 路由到某个服务
predicates:
- Cookie=mycookie,mycookievalue # cookie里必须有mycookie且值是mycookievalue
# 完全展开配置方式
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- name: Cookie
args:
name: mycookie
regexp: mycookievalue
网关的工作流程
ステップ 1: クライアントはゲートウェイへのリクエストを開始します。リクエストが Handler Mapping
で定義されたルートと一致する場合、リクエストは に転送されます。Web Handler
ステップ 2: 定義されたフィルター チェーンを介してユーザー リクエストをフィルター処理する フィルターは、プロキシ リクエストの前または後に実行できます。