Maison > Java > javaDidacticiel > Ruban d'équilibrage de charge du client Spring Cloud

Ruban d'équilibrage de charge du client Spring Cloud

巴扎黑
Libérer: 2017-06-26 09:31:34
original
1149 Les gens l'ont consulté

1. Équilibrage de charge

Équilibrage de charge  : Construit sur la structure du réseau existante. , il fournit une méthode peu coûteuse, efficace et transparente pour étendre la bande passante des périphériques et serveurs réseau, augmenter le débit, améliorer les capacités de traitement des données du réseau et améliorer la flexibilité et la disponibilité du réseau. Cela signifie attribuer l'exécution à plusieurs unités opérationnelles, telles que des serveurs Web, des serveurs FTP, des serveurs d'applications de clés d'entreprise et d'autres serveurs critiques, etc., afin d'effectuer des tâches de travail ensemble.

1. Équilibrage de charge côté serveur  : Le client demande le serveur d'équilibrage de charge, et le serveur d'équilibrage de charge transmet la demande à un serveur qui fournit réellement des services basés sur son propre algorithme. Le serveur Les données de réponse sont envoyées au serveur d'équilibrage de charge et le serveur d'équilibrage de charge renvoie finalement les données au client. (nginx)

2. Équilibrage de charge client  : L'équilibrage de charge basé sur le client, en termes simples, consiste à définir un algorithme de planification dans le programme client et à lancer une requête au serveur Quand , en premier exécutez l'algorithme de planification pour calculer vers quel serveur lancer la demande, puis lancez la demande auprès du serveur.

Fonctionnalités basées sur l'équilibrage de charge client :

  • est implémenté par le programme interne du client et ne nécessite pas d'investissement supplémentaire dans le logiciel et le matériel d'équilibrage de charge.

  • Le problème d'indisponibilité du serveur d'entreprise doit être résolu dans le cadre du programme. La panne du serveur a peu de transparence pour l'application.

  • Le problème de surcharge de pression sur le serveur d'entreprise doit être résolu au sein du programme.

2. Ribbon implémente l'équilibrage de charge client

Nous utilisons Spring Boot pour tester.

fichier pom :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jalja.org</groupId>
  <artifactId>spring-consumer-server-ribbon</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
   <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR4</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
Copier après la connexion

application.yml

stores:
  ribbon:
    listOfServers: www.baidu.com,www.jalja.org,www.163.com
Copier après la connexion

Stratégie d'équilibrage de charge de Ribbon

1. RoundRobinRule (mode d'interrogation) classe publique RoundRobinRule étend AbstractLoadBalancerRule le mode roundRobin interroge le serveur sélectionné Index d'interrogation, sélectionnez l'index correspondant au serveur de localisation Cette politique est également la politique par défaut du ruban

SpringCloudRibbonApplication.java
Copier après la connexion
   ="static"= loadBalancer.choose("stores"= URI.create(String.format("http://%s:%s" "static"
Copier après la connexion

:80
:80
:80
 : 80
:80
:80

2. RandomRule (stratégie aléatoire) classe publique RandomRule étend AbstractLoadBalancerRule Sélectionnez au hasard un serveur Sélectionnez au hasard le serveur à la position d'index correspondante.

Ajouter

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Copier après la connexion
stores:
  ribbon:
    listOfServers: www.baidu.com,www.jalja.org,www.163.org
    #随机
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Copier après la connexion

Ajouter

    @Beanpublic IRule ribbonRule() {return new RandomRule();//这里配置策略,和配置文件对应}
Copier après la connexion
Résultat de l'exécution 6 fois :

http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.163.org:80http://www.baidu.com:80http://www.jalja.org:80
Copier après la connexion

3. BestAvailableRule (concurrency) public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule Sélectionnez un serveur avec le plus petites requêtes simultanées Examinez les serveurs un par un. Si le serveur est déclenché, ignorez-le, puis sélectionnez le serveur avec le plus petit ActiveRequestsCount

Ajoutez

NFLoadBalancerRuleClassName : com.netflix.loadbalancer.BestAvailableRule

au fichier de configuration application.yml Ajoutez

@Beanpublic IRule ribbonRule() {return new BestAvailableRule();//这里配置策略,和配置文件对应}
Copier après la connexion
à SpringCloudRibbonApplication.java. :

http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80http://www.baidu.com:80
Copier après la connexion

4. AvailabilityFilteringRule (état du serveur) classe publique AvailabilityFilteringRule extends PredicateBasedRule Filtrez les serveurs back-end marqués comme déclenchés en raison d'échecs de connexion continus et filtrez ceux-ci. serveurs backend simultanés élevés (les connexions actives dépassent le seuil configuré) Utiliser un AvailabilityPredicate pour inclure la logique de filtrage des serveurs. En fait, il s'agit de vérifier l'état de fonctionnement de chaque serveur enregistré dans status

5. WeightedResponseTimeRule (basé sur le temps de réponse) public class WeightedResponseTimeRule extends RoundRobinRule attribue un poids en fonction du temps de réponse, plus le temps de réponse est long. le poids, et la possibilité d'être sélectionné. Plus le sexe. Un thread d'arrière-plan lit périodiquement le temps de réponse d'évaluation à partir de l'état et calcule un poids pour chaque serveur. Le calcul du poids est également relativement simple. Soustrayez le temps de réponse moyen de chaque serveur du temps de réponse pour obtenir le poids du serveur. Lorsque l'opération vient de démarrer et qu'aucun statut n'est formé, la stratégie roubine est utilisée pour sélectionner le serveur.


6. RetryRule (selon la politique + nouvelle tentative) classe publique RetryRule extends AbstractLoadBalancerRule fournit un mécanisme de nouvelle tentative sur la machine pour la politique d'équilibrage de charge sélectionnée. Lorsque la sélection du serveur échoue au cours d'une période de configuration, elle essaiera toujours d'utiliser la subRule pour sélectionner un serveur disponible


7 ZoneAvoidanceRule (état de la zone + état du service) classe publique. ZoneAvoidanceRule extends PredicateBasedRule Détermine de manière composite les performances de la zone où se trouve le serveur et la disponibilité du serveur pour sélectionner le serveur. Utilisez ZoneAvoidancePredicate et AvailabilityPredicate pour déterminer s'il convient de sélectionner un serveur. Le premier détermine si les performances d'exécution d'une zone sont disponibles. , et élimine tous les serveurs de la zone indisponible. ), AvailabilityPredicate est utilisé pour filtrer les serveurs avec trop de connexions.

4, 5, 6 et 7 sont utilisés de la même manière que ci-dessus et ne sont pas démontrés ici

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal