spring cloudのクライアントの負荷バランスRibbonを深く理解します。


一、負荷バランス
負荷バランス(Load Balance):既存のネットワーク構造の上に構築され、安価で効率的な方法でネットワークデバイスとサーバの帯域幅を拡大し、スループットを増加させ、ネットワークデータ処理能力を強化し、ネットワークの柔軟性と利用性を向上させる。複数の操作ユニットに割り当てて実行するという意味で、例えばWebサーバ、FTPサーバ、企業キーアプリケーションサーバ、その他のキーパーミッションサーバなどが共同で作業を完了する。
1、サービス端末の負荷バランス:クライアントから負荷バランスサーバに要求され、負荷均衡サーバは自身のアルゴリズムに基づいて、この要求を真にサービスを提供するサーバに転送し、このサーバはデータを負荷均衡サーバに渡し、負荷均衡サーバは最後にデータをサービス側に戻す。nginx
2、カスタマーサービスの負荷バランス:クライアントの負荷バランスに基づいて、簡単にクライアントプログラムにおいて、自分でスケジュールアルゴリズムを設定し、サーバに要求を開始する時、まずスケジュールアルゴリズムを実行して、どのサーバに要求を開始するかを計算し、その後、サーバーに要求を送ります。
クライアントの負荷バランスに基づく特徴:
クライアント内部のプログラムにより実現され、追加の負荷イコライザソフトハードウェアの投入は不要です。
プログラム内部では、サービスサーバが利用できない問題を解決する必要があります。サーバの故障はアプリケーションの透明性に対して小さいです。
プログラム内では、業務サーバの圧力オーバーロードの問題を解決する必要があります。
二、Ribboonはクライアントの負荷バランスを実現する。
私たちは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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <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>
appication.yml

stores:
 ribbon:
  listOfServers: www.baidu.com,www.jalja.org,www.163.com
Ribbonの負荷バランス戦略
1、RoundRobinRule(ポーリングモード)
public class RoundRobinRule extends AbstractLoadBalance roundRobin方式ポーリングはserverポーリングindexを選択し、index対応位置を選択するserverこのポリシーもribbonのデフォルトポリシーです。
SpringCloudRibronic.java

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class SpringCloudRibbonApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringCloudRibbonApplication.class, args);
  }
  @Autowired
  private LoadBalancerClient loadBalancer;
  @RequestMapping(value="static")
  public String staticRibbon(){
     ServiceInstance instance = loadBalancer.choose("stores");
     URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
     System.out.println(storesUri);
    return "static";
  }
}

    6     :

http://www.baidu.com:80
http://www.jalja.org:80
http://www.163.org:80
http://www.baidu.com:80
http://www.jalja.org:80
http://www.163.org:80
2、RandomRule(ランダムポリシー)
public class RandomRule extens Abstract LoadBalancerRuleはランダムに一つのserverを選んでindex上でランダムに、index対応位置のserverを選択します。
設定ファイルでaplication.ymlを追加します。

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
stores:
 ribbon:
  listOfServers: www.baidu.com,www.jalja.org,www.163.org
  #  
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
SpringCloudRibronication.javaに参加します。

@Bean
  public IRule ribbonRule() {
    return new RandomRule();//      ,       
  }
6回実行した結果:

http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.163.org:80
http://www.baidu.com:80
http://www.jalja.org:80
3、BestAvailable(合併量)
public class BestAvailable extens Cient ConfigEnRoundRobinRuleは最小の同時要求を選択するserverは一つずつServerを調べます。Serverがtrippedされたら無視します。ここでActiveRequest Countの最小のserverを選択します。
設定ファイルでaplication.ymlを追加します。
NFLoadBalancer Rule Class Name:comp.netflix.loadbalancer.BestAvailable Rule
SpringCloudRibronication.javaに参加します。

@Bean
  public IRule ribbonRule() {
    return new BestAvailableRule();//      ,       
  }
6回実行した結果:

http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
http://www.baidu.com:80
4、Availability FilteringRule(サーバ状態)
public class Availability FilteringRule extends PrdicateBasedRuleフィルタリングします。これらはずっと接続に失敗していますので、circut trippedのバックエンドserverとマークされています。そして、それらの高合併のバックエンドserverをフィルタリングします。AvailabilityPredicateでフィルタリングします。つまり、statusに記録されている各serverの運行状態をチェックします。
5、Weightted Response TimeRule(応答時間による)
public clast Weight destreponse TimeRule extens RoundRobinRuleは応答時間に応じてweightを割り当てるので、時間が長いほどweightが小さくなり、選ばれる可能性が低いです。一つのバックグラウンドスレッドは定期的にstatusから評価応答時間を読み取り、各serverのためにweightを計算します。Weightの計算も比較的簡単です。reponsetimeはserverごとに自分の平均的なreponsetimeを引いてserverの重みです。運転を開始したばかりで、statasが形成されていない場合は、roubineポリシーを使ってserverを選択します。
6、RetryRule(策略+再試験による)
public class RetryRule extends Abstract LoadBalancrRuleは、選択された負荷の均衡戦略機に対して再試行する仕組みです。
設定期間内にserverを選択しても成功しない場合は、subRuleを使用して利用可能なserverを選択しようとしています。
7、Zone Avoid anceRule(Zone状態+サービス状態)
public class Zone AvoidanceRule extens PredicateBasedRule
複合判定サービスエリアの性能とserverのユーザビリティはserverを選択します。
Zone AvoidancePredicateとAvailability Predicateを用いて、あるserverを選択するかどうかを判断し、前の判定では、一つのzoneの運転性能が利用可能かどうかを判定し、利用できないzoneを削除し、AvailabilityPredicateは接続数が多すぎるServerをフィルタリングするために使用されます。
4、5、6、7のこれらのポリシーの使い方は上記と同じです。ここでは示していません。
以上のspring cloudクライアントの負荷バランスRibbonは、小編集が皆さんに共有している内容の全てを理解しています。参考にしていただければと思います。どうぞよろしくお願いします。