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, ServerListUpdater
Classe 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é
ServerList
Obtenir la liste des serveurs
, 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
implémentation via la configuration, comme ceci : ServerList
[ribbonClient].ribbon.NIWSServerListClassName=类名
Filtre de liste de serveursServerListFilter
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
implémentation via la configuration, comme ceci ServerList
[ribbonClient].ribbon.NIWSServerListFilterClassName=类名
Vérifiez si le serveur ou IPing
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 ConsulPing
HealthServiceServerListFilter
, comme ceci : ServerList
[ribbonClient].ribbon.NFLoadBalancerPingClassName=类名
Sélecteur d'équilibrage de chargeIRule
, 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
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
implémentation, comme ceci :ServerList
[ribbonClient].ribbon.NFLoadBalancerClassName=类名
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!