コンシューマによって開始されたリクエストはリボンによってインターセプトされ、リボンはユーレカからプロバイダリストを取得し、ユーレカはプロバイダリストを返し、リボンはIRuleに基づいてリクエストを開始するサーバを選択します。
詳細なインターセプション: リクエスト -> DynamicServerListLoadBalancer (URL 内のサービス ID、userService を取得) -> DynamicServerListLoadBalancer -> Eureka -> DynamicServerListLoadBalancer -> IRule -> DynamicServerListLoadBalancer -> リクエストの開始
負荷分散戦略
組み込みの負荷分散ルールクラス | ルールの説明 |
---|---|
ZoneAvoidanceRule(Eureka 默认) | サーバーの選択は、その地域で利用可能なサーバーに基づいて行われます。ゾーンを使用してサーバーを分類します。このゾーンは、コンピューター ルーム、ラックなどとして理解できます。次にゾーン内の複数のサービスをポーリングします |
RoundRobinRule | サービス リストをポーリングするだけでサーバーを選択できます。これはリボンのデフォルトの負荷分散ルールです |
AvailabilityFilteringRule | 次の 2 種類のサーバーは無視されます: (1) デフォルトでは、このサーバーへの接続が 3 回失敗すると、サーバーは「短絡」状態に設定されます。短絡状態は30秒間続きます。接続が再度失敗すると、短絡の持続時間は指数関数的に増加します。 (2) 同時接続数が多すぎるサーバー。サーバーへの同時接続数が多すぎる場合、AvailabilityFilteringRule ルールが設定されたクライアントもそれを無視します。同時接続の上限は、クライアントの<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit プロパティで設定できます。 |
WeightedResponseTimeRule | 各サーバーに重み値を割り当てます。サーバーの応答時間が長くなるほど、このサーバーの重みは小さくなります。このルールはサーバーをランダムに選択します。この重み値はサーバーの選択に影響します。 |
BestAvailableRule | 短絡したサーバーを無視し、同時実行性の低いサーバーを選択する |
RandomRule | 利用可能なサーバーをランダムに選択 |
RetryRule | 再試行メカニズムの選択ロジック |
ランダム戦略の使用
負荷分散ルールは、次の 2 つの方法で IRule 実装を定義することによって変更できます。
- コードメソッド: 構成クラスで、新しい IRule(グローバル設定)を定義します。
@Bean
public IRule randomRule(){
return new RandomRule();
}
- 設定ファイル方式: orderServer application.yml ファイルで、ルールを変更するための新しい設定を追加します。
userService: # マイクロサービスの負荷分散ルールを設定します。ここでは userservice サービスです
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 負荷分散ルール
遅延読み込み
Ribbon はデフォルトで遅延読み込みを使用します。つまり、初めてアクセスされたときにのみ LoadBalanceClient が作成され、要求時間が非常に長くなります。プロジェクトの開始時にハングリー読み込みが作成され、最初のアクセスの時間消費が短縮されます。ハングリー読み込みを有効にするには、次のように構成します。
ribbon:
eager-load:
enabled: true
clients: userService # userService サービスのハングリーロードを指定します