負荷分散: 既存のネットワーク構造上に構築されており、ネットワークデバイスとサーバーの帯域幅を拡張し、スループットを向上させ、ネットワークデータを強化するための安価で効果的かつ透過的な方法を提供します。処理能力を向上させ、ネットワークの柔軟性と可用性を向上させます。これは、Web サーバー、FTP サーバー、エンタープライズ キー アプリケーション サーバー、その他のミッションクリティカルなサーバーなどの複数のオペレーティング ユニットに実行を割り当てて、作業タスクをまとめて完了することを意味します。
1. サーバー側の負荷分散: クライアントは負荷分散サーバーにリクエストを送信し、負荷分散サーバーは独自のアルゴリズムに従って実際にビジネスを提供するサーバーにリクエストを転送します。負荷分散サーバーと負荷分散サーバーは最終的にデータをクライアントに返します。 (nginx)
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
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
@Beanpublic IRule ribbonRule() {return new RandomRule();//这里配置策略,和配置文件对应}
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 を使用してサーバーを選択し、サーバーを選択するかどうかを決定します。前者は、ゾーンの実行パフォーマンスが利用可能かどうかを判断し、使用できないゾーン (すべてのサーバー) を除外するために使用されます。多くのサーバー接続。以上がSpring Cloud クライアントの負荷分散リボンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。