ホームページ  >  記事  >  Java  >  Spring Cloud クライアントの負荷分散リボン

Spring Cloud クライアントの負荷分散リボン

巴扎黑
巴扎黑オリジナル
2017-06-26 09:31:341121ブラウズ

1. 負荷分散

負荷分散: 既存のネットワーク構造上に構築されており、ネットワークデバイスとサーバーの帯域幅を拡張し、スループットを向上させ、ネットワークデータを強化するための安価で効果的かつ透過的な方法を提供します。処理能力を向上させ、ネットワークの柔軟性と可用性を向上させます。これは、Web サーバー、FTP サーバー、エンタープライズ キー アプリケーション サーバー、その他のミッションクリティカルなサーバーなどの複数のオペレーティング ユニットに実行を割り当てて、作業タスクをまとめて完了することを意味します。

1. サーバー側の負荷分散: クライアントは負荷分散サーバーにリクエストを送信し、負荷分散サーバーは独自のアルゴリズムに従って実際にビジネスを提供するサーバーにリクエストを転送します。負荷分散サーバーと負荷分散サーバーは最終的にデータをクライアントに返します。 (nginx)

2. クライアント負荷分散: クライアントベースの負荷分散とは、簡単に言うと、クライアントプログラムにスケジューリングアルゴリズムを設定し、サーバーにリクエストを送信するときに、最初にどのサーバーでスケジューリングアルゴリズムの計算を実行するかです。にリクエストを送信してから、リクエストをサーバーに送信します。

クライアントの負荷分散に基づく特性:

  • はクライアントの内部プログラムによって実装され、ロードバランサーのソフトウェアやハードウェアへの追加投資は必要ありません。

  • ビジネス サーバーが利用できない問題は、プログラム内で解決する必要があります。サーバー障害はアプリケーションに対してほとんど透過性がありません。

  • ビジネスサーバーの過負荷の問題はプログラム内で解決する必要があります。

2. リボンはクライアント負荷分散を実装します

テストには Spring Boot を使用します。

pom ファイル:

<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 ">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jalja.org</groupId>
  <artifactId>spring-consumer-server-ribbon</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
   <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR4</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

application.yml

stores:
  ribbon:
    listOfServers: www.baidu.com,www.jalja.org,www.163.com

Ribbon の負荷分散戦略

1. RoundRobinRule (ポーリング モード) public class RoundRobinRule extends AbstractLoadBalancerR ule サーバーを選択するためのroundRobinメソッドのポーリング インデックスをポーリングし、インデックスの対応する場所にあるサーバーを選択します。この戦略は、リボン

SpringCloudRibbonApplication.java
   ="static"= loadBalancer.choose("stores"= URI.create(String.format("http://%s:%s" "static"
:80

:80
:80

:80
:80
:80


のデフォルトの戦略でもあります。 2. Random Rule (ランダム戦略)

public class RandomRule extends AbstractLoadBalancerRule サーバーをランダムに選択 インデックス上でランダムに、インデックスに対応するサーバー を選択します。 SpringCloudRibbonApplication.java に

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
stores:
  ribbon:
    listOfServers: www.baidu.com,www.jalja.org,www.163.org
    #随机
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

を 6 回実行した結果:
    @Beanpublic IRule ribbonRule() {return new RandomRule();//这里配置策略,和配置文件对应}

3, BestAvailableRule (Concurrency)

public class BestAvailableRule extends ClientConfig EnabledRoundRobinRule

同時接続数が最小のサーバーを選択しますサーバーがトリップしている場合は、サーバーを 1 つずつ調べて、それを無視し、ActiveRequestsCount が最も小さいサーバーを選択します

設定ファイル application.yml: com.netflix.loadbalancer.BestAvailableRule に NFLoadBalancerRuleClassName: を追加します。 SpringCloudRibbonApplication.java に

http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.163.org:80http://www.baidu.com:80http://www.jalja.org:80

を 6 回実行した結果:

@Beanpublic IRule ribbonRule() {return new BestAvailableRule();//这里配置策略,和配置文件对应}

4. AvailabilityFilteringRule (サーバーのステータス) public class AvailabilityFilteringRule extends PredicateBasedRule 継続的な接続障害により回線トリップとしてマークされたバックエンド サーバーを除外し、同時実行性の高いバックエンド サーバー (アクティブな接続が設定されたしきい値を超えている) を除外します。 AvailabilityPredicate を使用してサーバーをフィルタリングするロジックを含めます。実際には、ステータスに記録された各サーバーの稼働状況を確認するため、応答時間が長いほど重みが割り当てられます。重みが大きくなり、選ばれる可能性が低くなります。 バックグラウンド スレッドは定期的にステータスから評価応答時間を読み取り、各サーバーの重みを計算します。重みの計算も比較的簡単で、応答時間から各サーバーの平均応答時間を引いたものがサーバーの重みとなります。操作が開始されたばかりでステータスが形成されていない場合、ルービン戦略を使用してサーバーが選択されます。

6. RetryRule (ポリシー + 再試行による)

public class RetryRule extends AbstractLoadBalancerRule は、選択された負荷分散ポリシーにオンマシンの再試行メカニズムを提供します。 設定期間内にサーバーの選択に失敗した場合、常に subRule を使用して利用可能なサーバーを選択しようとします

7. ZoneAvoidanceRule (ゾーンのステータス + サービスのステータス)

public class ZoneAvoidanceRule は、PredicateBasedRule を拡張します。サーバーの位置 パフォーマンスとサーバーの可用性 ZoneAvoidancePredicate と AvailabilityPredicate を使用してサーバーを選択し、サーバーを選択するかどうかを決定します。前者は、ゾーンの実行パフォーマンスが利用可能かどうかを判断し、使用できないゾーン (すべてのサーバー) を除外するために使用されます。多くのサーバー接続。


4、5、6、7 は上記と同じように使用されるため、ここでは説明しません


以上がSpring Cloud クライアントの負荷分散リボンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。