14

Je commence avec Spring Cloud en utilisant Eureka et Zuul et j'ai quelques questions sur la structuration des déploiements bleu/vert et canari. Jusqu'à présent, j'ai les bases établies et Eureka, Zuul et un serveur de configuration fonctionnent comme prévu. Ce que j'essaye d'accomplir est mis en place un service qui a deux versions, disons 1.0 et 1.1. Pour un sous-ensemble d'utilisateurs spécifiques, je veux les router vers la version 1.1 et tout le monde devrait aller à la version 1.0. L'API de filtre de Zuul est un peu léger sur la documentation et j'ai un peu de mal à comprendre certains concepts, alors j'ai pensé que je poserais quelques questions ici. J'ai aussi quelques filtres de base en cours d'exécution, qui ne font pas grand-chose à part le moment d'obtenir l'identité du principal et le service qu'ils demandent. Là où je frappe un mur, c'est comprendre comment exposer deux versions différentes du même service à Eureka et Zuul. Quelques choses que je suis curieux de savoir:Spring Cloud: Déploiements canari avec Zuul

  • Entre la documentation, les messages et autres débordements de pile, les termes «service» et «cluster» semblent être utilisés de façon interchangeable. Est-ce correct? Cela dit, si j'ai un service nommé /simpleservice, est-ce que j'expose deux ID de service différents (c'est-à-dire simpleservice et simpleservice-1.1)? Et si je fais cela, quand l'un des utilisateurs ciblés demande /simpleservice, je demande à Zuul de les envoyer à /simpleservice-1.1
  • Ou, ajoutez-vous un autre nœud à l'ID de service existant et ajoutez des métadonnées supplémentaires à chaque nœud afin que Zuul et distinguer les versions 1.0 et 1.1?
  • La bonne réponse est-elle "tout ce qui précède?" :)

Répondre

6

En supposant que vous utilisiez également le ruban, je laisserais les ID de service tels qu'ils sont. Au lieu de cela, je voudrais jeter un oeil à l'emballage com.netflix.loadbalancer. Les déploiements canariens sont essentiellement l'équilibrage de charge avec des contraintes très spécifiques. Vous pouvez implémenter votre propre AbstractLoadBalancerRule qui sélectionne les serveurs en fonction de la propriété sur laquelle vous souhaitez baser le routage. Ajoutez ensuite cette règle à la configuration de votre instance Zuul.

@Configuration 
public class CanaryConfiguration { 
    @Bean public IRule canaryDeploymentRule(IClientConfig config) { 
     CanaryDeploymentRule rule = new CanaryDeploymentRule(); 
     rule.initWithNiwsConfig(config); 
     return rule; 
    } 
} 

Si vous laissez vos services s'inscrire à Eureka avec des ID de service ("de simpleservice" et "simpleservice-x.y"), je suppose que les choses sont liées à devenir compliquée. Vous devrez étendre le client de découverte pour ignorer la partie de version ("-xy", tout en étant capable de gérer "foo-service") lors de la récupération de la liste des serveurs disponibles d'Eureka, puis effectuer un processus de sélection pour sélectionner juste de toute façon. Donc je suppose que les choses deviendraient simplement plus complexes.

Tout est basé sur les meilleures suppositions, je ne l'ai pas réellement implémenté. Je me rends compte que cette question a presque 4 mois. Donc, si vous avez trouvé une autre solution entre-temps, ce serait formidable si vous pouviez la partager en réponse à votre propre question.

+1

Nous utilisions Zuul avec Ribbon, mais je ne pensais pas à regarder le projet Ribbon pour les exemples de règles. Cela aide beaucoup. Je posterai une fois que nous plongerons plus profondément. –

+0

@Ryan Je serais très intéressé d'apprendre, comment avez-vous résolu votre problème? –

+0

Avez-vous plonger plus profond @ RyanJ.McDonough? – Gerardo