ホームページ  >  記事  >  Java  >  スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

php是最好的语言
php是最好的语言オリジナル
2018-08-02 14:35:252276ブラウズ

Ribbon は、HTTP および TCP クライアントの動作を適切に制御するクライアント ロード バランサーです。 Feign はデフォルトでリボンを使用しています (参考記事)

まず、リボン

1 のいくつかのコアクラスを見てみましょう。主に使用される IClientConfig のデフォルト実装クラス DefaultClientConfigImplリボン クライアントの関連する属性構成を構成するにはIClientConfig 默认实现类DefaultClientConfigImpl,主要用来配置ribbon客户端的相关属性配置

2、ServerListUpdater默认实现类PollingServerListUpdater,主要负责动态更新服务器列表

  • start方法调用后会启动一个定时任务,延时1s开始执行,以每30s的时间间隔周期执行

    • 周期时间间隔可以通过ribbon.ServerListRefreshInterval=1000或者ribbonClientName.ribbon.ServerListRefreshInterval=1000来设置

  • start方法的启动由DynamicServerListLoadBalancer初始化的时候执行调用

3、ServerList获取服务器列表

  • 默认实现类ConfigurationBasedServerList,默认是从配置文件取服务器列表,这样配置[ribbonClinetName].ribbon.listOfServers=xxx,xxx

  • ConsulServerList引入consul作服务发现的实现类,主要负责获取注册中心的服务器列表

    スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

    备注:可以通过配置来扩展自己的ServerList实现,像这样:[ribbonClient].ribbon.NIWSServerListClassName=类名

4、ServerListFilter服务器列表过滤器

  • 默认实现类ZonePreferenceServerListFilter主要根据分区来过滤服务器列表

  • HealthServiceServerListFilter引入consul服务发现的实现类,主要负责过滤consul健康检查通过的服务器列表(在ConsulServerList中会获取所有的服务器列表,包括健康检查没有通过的服务器)

    スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

    备注:可以通过配置来扩展自己的ServerList实现,像这样[ribbonClient].ribbon.NIWSServerListFilterClassName=类名

5、IPing检查服务器是否或者

  • 默认实现DummyPing,这是一个假的检测着,永远返回是true

  • ConsulPing,引入consul服务发现的实现类,主要根据consul返回的checks参数来判断服务器是否活着,跟HealthServiceServerListFilter的过滤判断一样

    スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

    备注:可以通过配置来扩展自己的ServerList实现,像这样:[ribbonClient].ribbon.NFLoadBalancerPingClassName=类名

6、IRule负载均衡选择器

  • 默认实现ZoneAvoidanceRule,复合判断server所在区域的性能和server的可用性选择server

  • RandomRule:随机选择一个server

  • RoundRobinRule:roundRobin方式轮询选择server

  • RetryRule:对选定的负载均衡策略机上重试机制。

  • WeightedResponseTimeRule:根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。

  • AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)

  • BestAvailableRule:选择一个最小的并发请求的server

スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

7、ILoadBalancer负载均衡总控制器,默认实现类ZoneAwareLoadBalancer,其启动了整个负载均衡客户端

  • 可以通过配置来扩展自己的ServerList实现,像这样:[ribbonClient].ribbon.NFLoadBalancerClassName=类名

    2. ServerListUpdaterデフォルトの実装クラス PollingServerListUpdater は主にサーバー リストを動的に更新します

    • スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラスstart メソッドが呼び出された後、スケジュールされたタスクが開始され、1 秒の遅延で実行され、30 秒ごとの間隔で実行されます
      • サイクル時間間隔は、ribbon.ServerListRefreshInterval=1000 または ribbonClientName.ribbon.ServerListRefreshInterval= で設定できます。 1000

    • DynamicServerListLoadBalancer が初期化されるときに start メソッドが呼び出されますスプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス

      🎜🎜3. ServerList がサーバー リストを取得します🎜
      • 🎜デフォルトの実装クラス ConfigurationBasedServerList は、デフォルトでは設定ファイルからサーバー リストを取得し、この [ribbonClinetName] のように設定します。リボン.listOfServers=xxx,xxx🎜🎜
      • 🎜ConsulServerList主に登録センターのサーバー リストの取得を担当する、サービス ディスカバリ用の consul の実装クラスを紹介します🎜🎜 スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス🎜🎜🎜注: 次のように、構成を通じて独自の ServerList 実装を拡張できます: [ribbonClient].ribbon.NIWSServerListClassName=クラス名🎜🎜🎜🎜4, ServerListFilter code>サーバー リスト フィルター🎜<ul class=" list-paddingleft-2"> <li>🎜Default 実装クラス <code>ZonePreferenceServerListFilter は主に、パーティションに従ってサーバー リストをフィルタリングする役割を果たします 🎜🎜
      • 🎜HealthServiceServerListFilter は、領事サービス検出の実装クラスを導入します。これは主に、領事ヘルスチェックに合格したサーバーリストをフィルタリングする役割を果たします (すべてのサーバーのリストは、ConsulServerList で取得されます。ヘルスチェックに失敗しました)🎜🎜スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス 🎜🎜🎜注: [ribbonClient].ribbon.NIWSServerListFilterClassName =クラス名🎜🎜🎜🎜5のように、構成を通じて独自のServerList実装を拡張できます。 IPing サーバーか 🎜
        • 🎜デフォルト実装 DummyPingcode> を確認します。これは誤検出であり、常に返されます。 true🎜🎜
        • 🎜ConsulPing は、主に consul から返される checks パラメータに基づいて、サーバーが生きているかどうかを判断する consul サービス検出の実装クラスを導入します。これは、 のフィルタリング判定と同じです。 HealthServiceServerListFilter🎜🎜 スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス🎜🎜🎜注: 次のように、構成を通じて独自の ServerList 実装を拡張できます: [ribbonClient].ribbon.NFLoadBalancerPingClassName=クラス名 🎜🎜 🎜🎜6、IRule負荷分散セレクター🎜
          • 🎜ZoneAvoidanceRule のデフォルト実装、サーバーエリアとサーバーの可用性を確認してサーバーを選択します🎜🎜
          • 🎜RandomRule: サーバーをランダムに選択します🎜🎜
          • 🎜RoundRobinRule: ラウンドロビンモードホイールクエリサーバーを選択します🎜🎜
          • 🎜RetryRule: 選択した負荷分散ポリシーのオンマシン再試行メカニズム。 🎜🎜
          • 🎜WeightedResponseTimeRule: 応答時間に基づいて重みを割り当てます。応答時間が長いほど重みが小さくなり、選択される可能性が低くなります。 🎜🎜
          • 🎜AvailabilityFilteringRule: 接続に失敗し続けるため回線トリップとしてマークされているバックエンド サーバーをフィルタリングし、同時実行性の高いバックエンド サーバー (アクティブな接続が設定された数を超えている) をフィルタリングします。しきい値)🎜🎜
          • 🎜BestAvailableRule: 同時リクエストが最も少ないサーバーを選択します🎜🎜🎜🎜スプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラス🎜🎜7. ILoadBalancer 負荷分散マスター コントローラー、デフォルト実装クラス ZoneAwareLoadBalancer は、負荷分散クライアント全体を開始します 🎜<ul class=" list-paddingleft-2"><li>🎜次のように、構成を通じて独自の <code>ServerList 実装を拡張できます。 >[ribbonClient].ribbon.NFLoadBalancerClassName=クラス名
          🎜🎜🎜🎜🎜🎜ロードバランサ起動シーケンス図: 🎜🎜🎜🎜🎜🎜
          • 初期化時には、スケジュールされたタスクが最初に初期化され、30 秒ごとに実行されます。キャッシュには、登録センターから取得したすべてのインスタンス リスト allServerList と、正常に ping されたインスタンス リスト upServerList が保存されます。ロードバランシング中に取得されるリストは、upServerList ではなく、allServerList です。この ping の意味がわかりません

          • 定期的に登録センターからサービスリストを取得するスケジュールされたタスクを開始し、30 秒ごとに実行します

          • サービスリストを取得するために初期化し、サービスリストをプルする ServiceFilterでフィルタリングした後、キャッシュに保存する

          クライアントが呼び出しを開始すると、ILoadBalancerのchooseServerメソッドが呼び出され、インスタンスが生成されますIRule の負荷分散アルゴリズムに基づいて選択され、呼び出し元に返されます。

          関連記事:

          WPF 4 リボン開発クイック アクセス ツールバー

          SharePoint 2013 ページのリボン、メニュー、およびその他の非コンテンツ要素を非表示にする

以上がスプリング、クラウド、リボンの原理の分析: リボンのいくつかのコア クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。