Maison  >  Article  >  Java  >  Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

php是最好的语言
php是最好的语言original
2018-08-02 14:35:252283parcourir

Ribbon est un équilibreur de charge client qui offre un excellent contrôle sur le comportement des clients HTTP et TCP. Feign a utilisé Ribbon par défaut (article de référence)

1. Jetons d'abord un coup d'œil à plusieurs classes principales de Ribbon

1 IClientConfig Classe d'implémentation par défaut DefaultClientConfigImpl, principalement utilisée pour. configuration Configuration des attributs pertinents du client ruban

2, ServerListUpdaterClasse d'implémentation par défaut PollingServerListUpdater, principalement responsable de la mise à jour dynamique de la liste des serveurs

  • Après la méthode de démarrage appelé, un minuteur sera démarré La tâche démarre l'exécution avec un délai de 1 s et est exécutée périodiquement toutes les 30 s

    • L'intervalle périodique peut être défini par ribbon.ServerListRefreshInterval=1000 ou ribbonClientName.ribbon.ServerListRefreshInterval=1000

  • La méthode de démarrage est appelée lorsque DynamicServerListLoadBalancer est initialisé

ServerListObtenir la liste des serveurs

  • Classe d'implémentation par défaut

    , la valeur par défaut est d'obtenir la liste des serveurs à partir du fichier de configuration, configurez-la comme ceciConfigurationBasedServerList[ribbonClinetName].ribbon.listOfServers=xxx,xxx

  • Introduire la classe d'implémentation consul pour la découverte de services, Principalement responsable de l'obtention de la liste des serveurs du centre d'enregistrement ConsulServerList

    Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

    Remarque : vous pouvez étendre votre propre

    implémentation via la configuration, comme ceci : ServerList[ribbonClient].ribbon.NIWSServerListClassName=类名

4

Filtre de liste de serveursServerListFilter

  • La classe d'implémentation par défaut

    filtre principalement. la liste de serveurs basée sur les partitionsZonePreferenceServerListFilter

  • Présente la classe d'implémentation de la découverte du service consul, qui est principalement responsable du filtrage de la liste des serveurs qui ont réussi le contrôle de santé du consul (toutes les listes de serveurs sera obtenu dans ConsulServerList, y compris les serveurs qui ont échoué au contrôle de santé)HealthServiceServerListFilter

    Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

    Remarque : Vous pouvez étendre votre propre

    implémentation via la configuration, comme ceci ServerList[ribbonClient].ribbon.NIWSServerListFilterClassName=类名

5.

Vérifiez si le serveur ou IPing

  • implémente

    par défaut. renvoie vraiDummyPing

  • , introduisant consul La classe d'implémentation de la découverte de services détermine principalement si le serveur est vivant en fonction du paramètre checks renvoyé par consul, qui est le même que le jugement de filtrage de ConsulPingHealthServiceServerListFilter

    Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

    Remarque : Il peut être configuré pour étendre votre propre implémentation

    , comme ceci : ServerList[ribbonClient].ribbon.NFLoadBalancerPingClassName=类名

6.

Sélecteur d'équilibrage de chargeIRule

  • implémentation par défaut

    , jugement composite sur les performances de la région où se trouve le serveur et la disponibilité du serveur . Sélectionnez le serveur ZoneAvoidanceRule

  •  : Sélectionnez au hasard un serveur RandomRule

  •  : L'interrogation en mode RoundRobin sélectionne le serveurRoundRobinRule

  •  : mécanisme de nouvelle tentative sur la machine pour la stratégie d'équilibrage de charge sélectionnée. RetryRule

  •  : Attribuez un poids en fonction du temps de réponse. Plus le temps de réponse est long, plus le poids est petit et plus la possibilité d'être sélectionné est faible. WeightedResponseTimeRule

  •  : filtrez les serveurs back-end qui sont marqués comme étant déclenchés en raison d'échecs de connexion persistants, et filtrez les serveurs back-end à forte concurrence (les connexions actives dépassent le seuil de configuration) AvailabilityFilteringRule

  •  : Sélectionnez un serveur avec les plus petites requêtes simultanées BestAvailableRule

Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

Charger. contrôleur maître d'équilibrage, la classe d'implémentation par défaut ILoadBalancer, qui démarre l'intégralité du client d'équilibrage de charge ZoneAwareLoadBalancer

  • peut être configurée pour étendre sa propre

    implémentation, comme ceci :ServerList[ribbonClient].ribbon.NFLoadBalancerClassName=类名

    Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

    Diagramme de séquence de démarrage de l'équilibreur de charge :

Analyse du principe ressort-nuage-ruban : plusieurs classes principales de ruban

  • Lors de l'initialisation, une tâche planifiée sera initialisée en premier, qui sera exécutée toutes les 30 secondes. Le cache stockera toutes les listes d'instances allServerList obtenues du centre d'enregistrement et la liste d'instances upServerList qui ont été. ping avec succès. Cependant, lors de l'équilibrage de charge, la liste que j'ai obtenue est allServerList au lieu de upServerList. Je ne comprends pas la signification de ce ping

  • Démarrer une tâche planifiée pour extraire la liste de services. le centre d'enregistrement régulièrement et l'exécuter toutes les 30 secondes

  • Initialisez pour obtenir la liste de services extraite est filtrée par ServiceFilter et stockée dans le cache.

Lorsque le client lance un appel, il appellera la méthode ChooseServer de ILoadBalancer, sélectionnera une instance et la renverra à l'appelant selon l'algorithme d'équilibrage de charge d'IRule

Articles connexes :

Barre d'outils d'accès rapide au développement du ruban WPF 4)

SharePoint 2013 Masquer le ruban, le menu et les autres éléments hors contenu de la page

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn