spring cloudのクライアントの負荷バランスRibbonを深く理解します。
一、負荷バランス
負荷バランス(Load Balance):既存のネットワーク構造の上に構築され、安価で効率的な方法でネットワークデバイスとサーバの帯域幅を拡大し、スループットを増加させ、ネットワークデータ処理能力を強化し、ネットワークの柔軟性と利用性を向上させる。複数の操作ユニットに割り当てて実行するという意味で、例えばWebサーバ、FTPサーバ、企業キーアプリケーションサーバ、その他のキーパーミッションサーバなどが共同で作業を完了する。
1、サービス端末の負荷バランス:クライアントから負荷バランスサーバに要求され、負荷均衡サーバは自身のアルゴリズムに基づいて、この要求を真にサービスを提供するサーバに転送し、このサーバはデータを負荷均衡サーバに渡し、負荷均衡サーバは最後にデータをサービス側に戻す。nginx
2、カスタマーサービスの負荷バランス:クライアントの負荷バランスに基づいて、簡単にクライアントプログラムにおいて、自分でスケジュールアルゴリズムを設定し、サーバに要求を開始する時、まずスケジュールアルゴリズムを実行して、どのサーバに要求を開始するかを計算し、その後、サーバーに要求を送ります。
クライアントの負荷バランスに基づく特徴:
クライアント内部のプログラムにより実現され、追加の負荷イコライザソフトハードウェアの投入は不要です。
プログラム内部では、サービスサーバが利用できない問題を解決する必要があります。サーバの故障はアプリケーションの透明性に対して小さいです。
プログラム内では、業務サーバの圧力オーバーロードの問題を解決する必要があります。
二、Ribboonはクライアントの負荷バランスを実現する。
私たちはspring bootを使ってテストします。
pomファイル:
1、RoundRobinRule(ポーリングモード)
public class RoundRobinRule extends AbstractLoadBalance roundRobin方式ポーリングはserverポーリングindexを選択し、index対応位置を選択するserverこのポリシーもribbonのデフォルトポリシーです。
SpringCloudRibronic.java
public class RandomRule extens Abstract LoadBalancerRuleはランダムに一つのserverを選んでindex上でランダムに、index対応位置のserverを選択します。
設定ファイルでaplication.ymlを追加します。
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に参加します。
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は、小編集が皆さんに共有している内容の全てを理解しています。参考にしていただければと思います。どうぞよろしくお願いします。
負荷バランス(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は、小編集が皆さんに共有している内容の全てを理解しています。参考にしていただければと思います。どうぞよろしくお願いします。