春クラウドゲートウェイは01を学びます


春クラウドゲートウェイはZuulゲートウェイを置き換えるために、第二世代のゲートウェイフレームワークの春クラウド公式発表です。ゲートウェイトラフィックとして、マイクロサービスシステムは、ルーティングゲートウェイの非常に役割を有しており、転送機能は、権利の検証、電流制限制御などが一般的です。まず、春の雲、私は詳細に春クラウドゲートウェイを説明するために解析する詳細な例とソースコードを使用するフォローアップ記事で公式の場合、いくつかの単純な機能を体験するためにあなたを取ります。
 

シンプルなルートを作成します

使用中の転送をルーティングRouteLocator豆のばねクラウドゲートウェイ、要求が処理され、最終的にターゲット下流サービスに転送します

作成に加えて、ルーティングRouteLocatorBuilderは、さまざまな追加することができます述語フィルタ定義は、治療への特定の経路によって、特定の要求の規則に従って、フィルタは、フィルタのすべての種類は、判定要求のすべての種類を行うために使用されていることで、述語アサーション手段をおよび変更

  • プロトコル変換、ルーティング、転送
  • トラフィック集約、トラフィックモニタ、ログ出力
  • システム全体の動作のフロントエンドとして、トラフィック制御効果、限定フロー
  • フロントエンドシステムの境界、システムにアクセスするための唯一のゲートウェイを介して外部の流れと
  • アクセス権は、ゲートウェイ判決で行うことができます
  • キャッシュは、ゲートウェイで行うことができます

第二世代のゲートウェイスプリングクラウドZuulより機能的に、より強力なフレームワーク、および良好な性能としてスプリングクラウドゲートウェイ。イテレーション春の雲のリリースでは、春の雲は公式Zuulが意味を意図断念しました。私は春のクラウドゲートウェイの使用および機能を呼び、春クラウドゲートウェイはZuulコストが非常に低く、ほとんどシームレスハンドオーバーで置き換えます。春クラウドゲートウェイはzuulのほぼすべての機能が含まれています
 

上記のように、クライアントは春クラウドゲートウェイにリクエストを送信します。(この時間述語を使用)ゲートウェイハンドラマッピングルート一致決意要求場合は、ゲートウェイウェブ・ハンドラ・プロセスに送られます。ゲートウェイウェブハンドラは要求を処理する一連の連鎖をフィルタリングします。原因フィルタチェーン点線は、分割フィルタ・チェーンは、要求を送信する前に、または薬剤の後にフィルタリングロジックを実行することができるです。すべての「プリ」フィルタロジック、プロキシ要求を実行します。プロキシ要求を発行した後、プロキシサービスに応じて、フィルタ後の「ポスト」ロジックを実行受け取ります。これはzuulのプロセスと非常に似ています。全ての「前」フィルタロジックの実装では、認証がしばしば行われ、電流制限、ログ出力機能、及び要求転送ヘッドは、プロトコルを変更し、転送した後に応答を受信した後、行うすべての「ポスト」フィルタ応答データは、応答ヘッダ、プロトコル変換などのように、改変することができるロジック、。
 

上記のプロセスでは、重要なポイントがあり、どれルートのリクエストに応じて決定され、述語を使用する必要性に話すと一致するルーティング要求、この時間です

図では、述語の多くの種類があり、時間プレディケート(AfterRoutePredicateFactory BeforeRoutePredicateFactory BetweenRoutePredicateFactory)のタイプの、例えば、場合にのみ、この満たす特定の要件への要求時間が述語を入力し、処理ルータと呼ばれる、クッキーCookieRoutePredicateFactoryを入力し、指定されました通常のクッキーのマッチがルータに入ります満たす;およびホスト、方法、パス、querparam、RemoteAddrは述語タイプ、現在の述語のそれぞれは、クライアントが現在の要件を満たすかどうかを判定要求します、ポストあれば満足しています現在の処理要求に。多くの述語、および要求を満たす複数の述語、シーケンシャル構成によれば効果がある場合
 

リクエストを決定アサーションは、どのルータにルーティングされるように予測。アサートされた後、要求は、論理フィルタフィルタに入力されます

ろ紙のばねクラウドゲートウェイ

    記事では、経路処理の前に、要求の後「前」ルーティング処理を処理するフィルタの種類、リターン応答、「ポスト」の種類を通過する必要性を決定、予測予測ゲートウェイに詳細に記載さフィルタ処理

フィルタやライフサイクルの役割

ライフサイクル
同様zuulと春クラウドゲートウェイは、フィルタ「前」との2つの方法で「ポスト」があります。クライアントの要求は最終的に「プレ」フィルタタイプを通過した後、ユーザーサービス上の図のように、特定のビジネス・サービス、へ転送要求、応答操作とサービスを受けた後、その後、「ポスト」タイプのフィルターを通すと、応答がクライアントに返されます。
 

    違いはzuul、「前」と「後」二つの方法のフィルタにフィルタ添加は、スプリングクラウドゲートウェイ、フィルタ範囲に一つの経路に単一のゲートウェイのためのものである、他の二つから分割することができるということですフィルタは、それが予測類似してコンフィギュレーションファイルに書き込まれ、別のグローバルゲートウェイファイラーはすべてのルートを対象とします。今フィルタを説明するために、これらの2つの次元の役割を描くから。

addRequestHeader GatewayFilter工場 

古いServerHttpRequest下でフィルタチェーンフィルタを提出し続け、新しいServerHttpRequestを作成し、新しいServerHttpRequestはリクエストヘッダを追加し、新しいServerWebExchangeを作成します

RewritePath GatewayFilter工場

nginxのサービスで非常に強力なスタートがパスを書き換えることがありますされ、春クラウドゲートウェイは、デフォルトの機能を提供します

カスタムフィルタ
春クラウドゲートウェイは、内蔵の強力なフィルター工場の19種類の多くのシナリオのニーズを満たすために、それは独自のフィルタをカスタマイズすることはできません、もちろん、それが可能です。スプリングクラウドゲートウェイにおいて、フィルタとOrdered2 GatewayFilterインタフェースを実装する必要があります。RequestTimeFilterを書きます
 

カスタムフィルター工場

フィルター工場トップレベルのインタフェースは、これら2つの抽象クラスの違いは、前者はパラメータを受信(StripPrefixなどを、我々が作成した)ということで、私たちは直接開発AbstractGatewayFilterFactoryとAbstractNameValueGatewayFilterFactoryを簡素化するためにその2つの抽象クラスを継承することができ、GatewayFilterFactoryあり、後(AddResponseHeaderのような)2つのパラメータを受け取ります。

フィルタートップレベルインターフェース機能はGatewayFilterFactoryあり、そこ2つの2つの抽象クラスが近い特定の実装にあり、AbstractGatewayFilterFactory AbstractNameValueGatewayFilterFactory、そのようなRedirectToGatewayFilterFactoryの実装としてクラスパラメータを、受信前者2つである; 2つのパラメータを受信しますそのようなその実装クラスAddRequestHeaderGatewayFilterFactoryクラスとして
 

グローバルフィルタ


春クラウドゲートウェイ範囲とGatewayFilter GlobalFilterに分け、双方の違いは次の通りです:

GatewayFilter:spring.cloud.routes.filtersを通じて特定のルートを設定する必要がある、すべての経路に作用する、唯一の現在のルートに配置されたか、グローバルspring.cloud.default、フィルタを介して作用

GlobalFilter:グローバルフィルタ、コンフィギュレーション・ファイルは、最終的なパッケージGatewayFilterChain識別できるサービスURIのためのサービス要求の実アドレスに変換されGatewayFilterAdapterによるフィルタ、およびルーティングサービス要求にすべてのルートに作用し、必要とされていませんロードされ、各経路に作用するとき、フィルタコアは、設定する必要はありません、システムを初期化します。
 

GlobalFilter上記の各図は、ほとんどのニーズを満たすことができ、各ルータ上で動作します。ただし、カスタムのビジネス経験あれば、自分たちのニーズを満たすために記述する必要がありGlobalFilter

制限記事の春クラウドゲートウェイ

このようHystrixような方法を制限する一般的な電流は、スレッドプールの負荷よりも、スレッドプールの分離を適用し、吹き論理を取ります。典型的なアプリケーションサーバでは、Tomcatコンテナ等は、その同時スレッドを制限することによって制御され、また、平均時間窓によって流量を制御します。一般的には、流れを制限するためにユーザによってアクセス頻度、URIによって制限現在、このような制限Ipの電流を制限することなどによって緯度。

一般に、nginxの、Openresty、香港、zuul、春クラウドゲートウェイなどのゲートウェイは、この層ではない制限されているが、この方法量Aopにアプリケーション層を制限することによって行うことができます。
 

 

トークンバケットアルゴリズム
センス、トークンバケットアルゴリズムは、リーキーバケットの改良され、バケットアルゴリズムは、呼要求のレートを制限することができ、さらに、トークンバケットアルゴリズムが同時に平均速度を制限するために呼び出すことができる可能ある程度予想外の呼び出しに。トークンバケットアルゴリズムでは、トークンの固定数を記憶するために使用されるバケットがあります。機構アルゴリズムはトークンバケットを置くレートで、あります。たびに継続する、または使用可能な、または直接拒否されたトークンの選択を待つことを選択する機会を持っている、唯一のトークンを取得するには、呼び出しにトークン要求を取得する必要があります。このアクションは、トークンは廃棄され、バケット内のトークン数が上限に達した場合解放トークンは、連続的であるので、バケットが利用可能なトークン数が多い場合があり、着信要求を直接することができ初期化が完了カレントリミッタ秒後、バケツを、このような100にQPSを設定するなど、実行するのにトークンを取得し、100個のトークンがすでにありましたし、サービスを開始しますが、外部サービスを完了するために、起動したときにそう完全に良くない、そして、フローリストリクタ100は、瞬間的な要求に耐えることができます。だから、だけではなくトークンバケット、要求が実装と同等の速度で最終的に待っている、とされます。

アイデアの実現:キューがキューからトークンを取得するために、さらにキューにスレッドトークンプール、それぞれの要求によってスケジュール、トークンを保持するために、調製し、継続することができます

春のクラウドサービス登録のゲートウェイと発見

、ショーゲートウェイオープンサービス登録と発見機能、およびスプリングクラウドゲートウェイに自動的に基づいて、サービスの発見は、各サービスのためのルータを作成した、真のspring.cloud.gateway.discovery.locator.enabled、このルータは、サービス名の先頭になります対応するサービスへのパス転送要求。spring.cloud.gateway.discovery.locator.lowerCaseServiceIdは、中/サービス-HIとして、小文字するように構成されたリクエストのパス上のサービス名(レジストリに、サービス登録時から登録サービス名が大文字に転送されます)であります/ *リクエストのパスは、サービスネームサービス-HIのルーティングサービスに転送されます。
 

公開された386元の記事 ウォンの賞賛2 ビュー9841

おすすめ

転載: blog.csdn.net/kuaipao19950507/article/details/105235882