クライアントの負荷分散のためにどのようにマイクロサービスアーキテクチャ

 春クラウドリボン11は、HTTPおよび達成NetflixRibbonに基づいてTCPクライアントの負荷分散ツールに基づいています。春クラウドパッケージすることで、私たちは簡単にサービス指向するために、自動的にクライアントの負荷分散を要求するサービスコールに変換RESTテンプレートを可能にします。春の雲リボンは、専用のユーティリティクラスのフレームワークが、それは独立した展開の必要性などのサービスレジストリ、物流センター、APIゲートウェイのようではないが、それは、ほぼすべての子供SpringCloudはマイクロサービスとインフラを構築して存在します。マイクロサービス間の呼び出しは、APIゲートウェイが他のコンテンツへの要求を転送しますので、実際に我々はそれがまた達成するためのリボンに基づくツールである、導入されるフォローアップ装う含め、リボンによって実装されています。だから、私たちはマイクロサービスを構築するために春のクラウドを使用するため、春クラウドリボンを理解し、使用することは非常に重要です。

ここでは、クライアントの負荷分散を実現するためにリボンを使用すると、ソースコード解析による基本的な原則のリボンクライアントの負荷分散を理解する方法について説明します。

クライアント・ロード・バランシング

ロードバランシングは、システム・アーキテクチャでは非常に重要であり、内容は実装しなければなりませんでした。ロードバランシングは、システムのための高可用性、ネットワークの圧力と処理能力の拡張を容易にするための重要な手段の一つです。私たちは、通常、それは、ハードウェアとソフトウェアのロードバランシングロードバランシングに分かれているサーバーの負荷分散を指し、バランシングの両方の負荷を参照してください。主にハードウェアロードバランサによって要求又は作業の分布などを完了するために、負荷バランスのソフトウェアモジュールの数と、サーバにインストールされているようなF5等;およびロードバランシングソフトウェアとしてロードバランシングデバイスに専用のサーバノードとの間に取り付けられnginxののように。かかわらず、ハードウェアまたはソフトウェアの負荷分散、負荷分散、限りそれは仕方のアーキテクチャで構築することが可能とサーバロードバランシングの:

  サーバーノードリストは、すべての通常アクセスできることを確実にするために、ハートビートを介してサーバノードの障害を排除するために、下端にリンクされている利用可能なサービスのリストを維持するデバイスまたはソフトウェア負荷分散ソフトウェア・モジュールをハードウェア負荷分散。クライアントは、負荷分散装置に要求を送信する際に装置は、続いて、次に利用可能なサーバのメンテナンスのリストからサーバのアドレス(トラフィック負荷、等によれば、重量負荷に応じて、例えばリニアポーリングなど)アルゴリズムによれば、転送。

最大の違いをバランス負Iのバランス、クライアントとサーバの負荷は、上記のサービスのリストの位置が格納されているということです。クライアントの負荷分散、すべてのクライアント・ノードは、このようなユーレカサーバとして、アクセスされるサーバー、およびサービスレジストリの端から、このようなサービスのリストの独自のリストを維持しています。サーバーの負荷分散アーキテクチャと同様に、クライアント側でのロードバランシングは、サーバーリストの心臓の健康を維持する必要があるが、このステップの完了をサービスセンターへの登録が必要です。春のクラウドサービスガバナンスのフレームワークの実装では、デフォルトの設定では、このようなorg.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfigurationでユーレカ、org.springframework.cloudの領事などの様々なサービスのリボンの自動化のための統合されたガバナンスのフレームワークを作成しています.consul.discovery.RibbonConsulAuto- Configurationo実際の使用では、我々はそれをよりよく利用する私たちを助けるために彼らの構成の詳細を見つけるために、この2つのクラスの実装を見ることができるとき。

次のようにSpringCloudRibbonパッケージによって、私たちは、クライアントの負荷分散コールマイクロサービスアーキテクチャは非常にシンプルでちょうど2つの手順を実行します。

1.サービスプロバイダは、単に複数のサービスインスタンスを開始し、より多くの関連するレジストリまたはレジストリサービスに登録する必要があります。

2.サービスの消費者が直接RestTemplateは、サービス指向のインタフェースの呼び出しを実装するように変更されて呼び出すことにより、コメントを@LoadBalanced。

  このように、我々は、高可用性のサービス・プロバイダーにすることができ、負荷分散サービスの消費者は、一緒に達成するために呼び出します。その中で、我々は非常に便利なオブジェクトRestTemplateを使用しています。オブジェクトは、自動化されたコンフィギュレーション・リボンを使用することですが、また@LoadBalancedオープンクライアントの負荷分散を設定することができます。私たちは最も単純なサービスの訪問を達成RestTemplateを通じて立証する前に、我々はRestTemplate以下に詳細は、いくつかの異なる要求タイプとサービスコールのパラメータ型のために実現します。

  リクエストをGET

  RestTemplateでは、GETリクエストは、二つの方法によって達成されるように呼び出すことができます。最初:getForEntity機能。このメソッドは、オブジェクトがそれは私たちはしばしば、これらの404、500と言う、ある春のHTTPリクエストの応答、主に店舗等HTTPリクエストのステータス馬列挙オブジェクトとしてHTTPのいくつかの重要な要素、はhttpStatus(カプセル化され、ResponseEntityを返します。エラーコード)、その親クラスittpEntityもヘッダ情報として格納されているときに、オブジェクトHttpHeaders HTTPリクエストとジェネリックタイプのリクエストボディ。最後のパラメータはURLにIDI(1}プレースホルダを置き換えながら、例えば次の例、USER-SERVERは、アクセスサービス/ユーザ要求が、ResponseEntityは、ボディ・コンテンツのオブジェクトタイプを返した:第2のパラメータコンバータ文字列型。

    テンプレート残留残りのテンプレート二newRestTemplate(); 

   ResponseEntityStri xesponseEntity一restTemplate.getFor( "のhttp://USER-RVICE/user?name={1}",string.class,"didi");  

文字列本体= responseEntity.getBody()。  

私たちは体がユーザーオブジェクト型である返すようにしたい場合は、これを達成することができます。 

   Restremplate restTemplate Restremplate =新しいです();  

  ResponseEntity responseEntity -restremplate.get "?のhttp:/ USER- VICE /ユーザ名= {1}"、User.class、 "ディディ")。

  ユーザの身体= responseEntity.getBody()。 

 上記の例は、比較的一般的な方法であります

POSTリクエスト

RestTemplate中で

POSTリクエスト呼び出された三つの方法によって達成することができます。

最初:postEorEntity機能。同じGETリクエストメソッドと同様のgetrorEntity意志

呼び出し後Tは身体の要求タイプに対する応答であるResponseEntityオブジェクトを返します。

たとえば、この次

例えば、USER-SERVICEサービス/ユーザインターフェースに提出postForEntity POSTリクエストを使用し、

提出されたボディコンテンツユーザオブジェクト要求応答型体は、文字列を返します。

テンプレートの残りの部分休憩休憩テンプレート=新しいテンプレート();

ユーザのユーザ=新しいユーザー( "ディディ"、30);

ResponseEntity responseEntity =

restTemplate.postForEntity( "のhttp://USER-SERVICE/user",user,String.class)。

文字列本体= responseEntity.getBody()。

postForEntity機能も三つの異なるオーバーロードされたメソッドを達成しました。

PUTリクエスト

GResTemplateは、PUT要求は、例えば、実施ポット法を呼び出すことができ    

   新しい休憩休憩テンプレートテンプレートテンプレート残留=();

  ロングID = 100011;

  ユーザのユーザ=新しいユーザー( "ディディ"、40);

  restemplate.put(HTTP:// USER-SERVICE /ユーザ/ {1}「、ユーザID、

機能を入れても、三つの異なるオーバーロードされたメソッドを達成しました:

1.put(文字列のURL、オブジェクト要求、0bject ... URLVariablesオブジェクト)

2.put(Stringurl、オブジェクト要求、地図がURLVariables)

3.put(URIのURL、オブジェクト要求)

void型の関数を入れて、そのコンテンツへのリターンがない、他の着信パラメータ定義と使用法と基本的に同じのpostforobject添加することによって定義された他の機能へのresponserype引数はありません。

リクエストをDELETE

DELETE通話要求でRestTemplateにおいてそのようなものとして、削除方法によって達成することができます。

テンプレートの残りの部分休憩休憩テンプレート=新しいテンプレート();

長いID = 10001L; restTemplate.delete( "HTTP:// USER-SERVICE /ユーザ/(1}"、ID)。

機能を削除しても、三つの異なるオーバーロードされたメソッドを達成しました:

1.delete(文字列のURL、0bject ... URLVariablesオブジェクト)

2.delete(文字列のURL、地図がURLVariables)

3.delete(URIのURL)により、我々は通常、URLにリクエストを削除しますスプライシングの間に固有の識別REST要求に、体は非常に、同じことを達成するだけで、上記の3つの機能のように、要求情報equestを削除する必要はありません。シンプル。URLVariablesオブジェクトは、URLにパラメータを結合、リクエストが場所を指定DELETE。

より詳細な知識を習得したい、と私はあなたに交換研究グループをお勧めします:分散があり春、MyBatisの、網状のソースコード解析、高並行性、高性能、:いくつかのシニアアーキテクトのビデオ録画を共有する744 642 380タイプ、マイクロサービスアーキテクチャの原則、建築家になるために必要なこれらの知識のJVMのパフォーマンスの最適化。また、現在恩恵を受け、無料の学習リソースを受け取ります

おすすめ

転載: www.cnblogs.com/772933011qq/p/11583870.html