SpringCloudプロジェクトの構築方法を教えます (8)リボンロードバランサの統合

マイクロサービスとは何ですか? シリーズが一目でわかる!

1. SpringCloudプロジェクトのビルド方法を教えます (1) 写真とテキストで詳しく説明、アホのような操作

2. SpringCloud プロジェクトの構築方法を教える (2) プロデューサーとコンシューマー

3. SpringCloudプロジェクトの構築方法を教えます (3) Eurekaサービス登録センターの統合

4. SpringCloudプロジェクトの構築方法を教えます (4) Eurekaクラスタのバージョン構築

5. SpringCloudプロジェクトのビルド方法を教えます (5) プロデューサークラスターバージョンをビルドします

6. SpringCloudプロジェクトの構築方法を教えます (6) Eurekaはサービスディスカバリを実現します

7. SpringCloudプロジェクトの構築方法を教える (7) Consulサービス登録センターを統合する

8. SpringCloudプロジェクトの構築方法を教えます (8) 統合リボンロードバランサ

9. SpringCloud プロジェクトの構築方法を説明します (9) OpenFeign サービス インターフェイス呼び出しの統合

10. SpringCloud プロジェクトの構築方法を教えます (10) Hystrix サービスのダウングレードの統合

11. SpringCloud プロジェクトの構築を教える (11) Hystrix のサービス ヒューズの統合

12. SpringCloud プロジェクトの構築方法を教える (12) Hystrix のグラフィカル ダッシュボードのリアルタイム モニタリングを統合する

13. SpringCloud プロジェクトの構築方法を教える (13) 新世代のゲートウェイを統合する

14. SpringCloudプロジェクトの構築方法を教えます (14) Integrated Config Distributed Configuration Center

15. SpringCloudプロジェクトの構築方法を教えます (15) Integrated Busメッセージバス

16. SpringCloud プロジェクトの構築方法を説明します (16) 統合された Stream メッセージ ドライバー

17. SpringCloud プロジェクトの構築方法を説明します (17) Sleuth 分散リンク追跡の統合

これからも更新していきますので、いいねやフォロー大歓迎です!

1. リボンの概要

リボンは Neflix によってリリースされたオープン ソース プロジェクトで、後に Spring Cloud 開発チームによって Spring Cloud にカプセル化され、サービス指向の REST テンプレート リクエストをクライアント側の負荷分散サービス呼び出しに簡単に変換できます。この機能は、クライアント ソフトウェアの負荷分散アルゴリズムとサービス コールを提供することです。リボンは HTTP と CP に基づくクライアント負荷分散ツールです。Spring Cloud リボンは単なるツール フレームワークですが、サービス レジストリ、構成センター、API ゲートウェイなどの独立したデプロイメントは必要ありませんが、ほぼすべての Spring Cloud に存在します。マイクロサービスとインフラストラクチャが構築されました。マイクロサービス間の呼び出しやAPIゲートウェイのリクエスト転送などは、後ほど紹介するFeignも含め、実際にはRibbonをベースとしたツールであるRibbonを通じて実装されているためです。したがって、Spring Cloud を使用してマイクロサービスを構築するには、Spring Cloud リボンを理解して使用することが非常に重要です。リボン クライアントは、接続タイムアウト、再試行などの一連の包括的な構成項目を提供します。簡単に言うと、ロード バランサー (略して LB) の背後にあるすべてのマシンが構成ファイルにリストされており、リボンは特定のルール (単純なポーリング、ランダムなど) に基づいてこれらのマシンに接続するのを自動的に支援します。私たちはリボンを使用してカスタムの負荷分散アルゴリズムを実装するまさにコンテナーです。

ロードバランサーとは何ですか?

簡単に言えば、システムの HA (高可用性) を実現するために、ユーザーのリクエストを複数のサービスに均等に分散することです。一般的な負荷分散ソフトウェアには、Nginx、LVS、ハードウェア F5 などが含まれます。

リボンのローカル負荷分散と Nginx サーバーの負荷分散の違いは何ですか?

Nginx はサーバーのロード バランサーであり、クライアントからのリクエストはすべて Nginx に渡され、Nginx がリクエストを転送します。つまり、ロード バランサーはサーバーによって実装されます。
リボン ローカル ロード バランシングは、サービス インターフェイスを呼び出すときに、登録センターから登録情報サービス リストを取得し、それを JVM にローカルにバッファリングして、RPC リモート サービス呼び出しテクノロジをローカルで実現します。

2 種類の LB ロード バランシングとは何ですか?

集中型 LB、つまり、サービス コンシューマとプロバイダーの間に独立した LB 機能があり (F5 などのハードウェアまたは Nginx などのソフトウェア)、この機能は特定の戦略を通じてアクセス リクエストをサービスのプロバイダー。

インプロセス LB は LB ロジックをコンシューマと統合し、コンシューマは登録センターから利用可能なアドレスを学習し、これらのアドレスから適切なサーバーを選択します。リボンはインプロセス LB であり、コンシューマ プロセスに統合された単なるクラス ライブラリであり、コンシューマはそれを通じてサービス プロバイダのアドレスを取得します。

前回の記事では、プロデューサー クラスターにアクセスするコンシューマーのラウンドロビン割り当てバランスを実現しました。リボンはサーバーの負荷分散とRestTemplateの呼び出しを実現するためのものです。これはソフト ロード バランシングのクライアント コンポーネントであり、リクエストを必要とする他のクライアントと組み合わせて使用​​できます (Eureka との組み合わせは一例にすぎません)。

2. コード例

spring-cloud-starter-netflix-eureka-client には spring-cloud-starter-ribbon リファレンスが付属しているため、以下に示すように、リボン パッケージを導入する必要はありません。

ここに画像の説明を挿入

リボンのアーキテクチャ図は次のとおりです。

ここに画像の説明を挿入

リボンは作業時に 2 つのステップに分かれています。

最初のステップは、同じエリア内で負荷の少ないサーバーを優先する EurekaServer を選択することです。
2 番目のステップでは、ユーザーが指定したポリシーに従って、サーバーから取得したサービス登録リスト内のアドレスを選択します。
その中で、リボンは、ポーリング、ランダム、時間応答時間に応じた重み付けなど、さまざまな戦略を提供します。

リボンのコアコンポーネント IRule

IRule アルゴリズムのノット図:
ここに画像の説明を挿入

IRule の 7 つのロード アルゴリズム

ここに画像の説明を挿入

ロード アルゴリズムをポーリング メソッドからランダム アルゴリズムに変更するには、構成クラスをカスタマイズする必要があります。注意: このカスタム クラスは、@ComponentScan によってスキャンされた現在のパッケージまたはパッケージの下に配置することはできません。それ以外の場合は、この構成クラスをカスタマイズしますすべてのリボン クライアントで共有されるため、特別なカスタマイズの目的は達成できません。以下に示すように:

ここに画像の説明を挿入

次の図に示すように、新しい MyselfRule 構成クラスを作成し、それをランダムに変更します。

package com.buba.springclould.myrule;
 
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//自定义负载均衡路由规则类
@Configuration
public class MyselfRule {
    
    
    @Bean
    public IRule myRule() {
    
    
        // 定义为随机
        return new RoundRobinRule();
    }   
}

以下の図に示すように、メインの起動クラスに @RibbonClient アノテーションを追加して構成します。

package com.buba.springclould.order;
 
import com.buba.springclould.myrule.MyselfRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
 
@SpringBootApplication
@EnableEurekaClient
//name为生产者服务的服务名称  configuration为配置类的类名
@RibbonClient(name = "mcroservice-payment",configuration = MyselfRule.class)
public class OrderMain {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderMain.class,args);
    }
}

次に、eureka7001 と 7002 を今すぐ起動し、次にサーバー サービス 8001 と 8002 を起動し、プロデューサー サービス 80 を起動し、パス http://localhost/consumer/payment/get/1 にアクセスして、元のポーリング 8001 サービス間を切り替えます。と 8002 サービスは、8001 サービスと 8002 サービスのランダム アクセスになります。

リボンの負荷分散の原理:

ここに画像の説明を挿入

リボンの読み込みアルゴリズムを統合するだけで完了です。とても簡単!
ここに画像の説明を挿入

次の記事では、OpenFeign サービス インターフェイスを呼び出す方法を学び、常に注意を払い、それを気に入ってください。引き続き更新していきます。

おすすめ

転載: blog.csdn.net/weixin_39570655/article/details/131810185