2016-04-01 1 views
1

Nous avons créé un Cloudservice hautement évolutif pour MS Azure avec deux rôles: "WebsiteRole" et "WebsiteWorkerRole". Pour de meilleures performances, nous déployons ce Cloudservice dans plusieurs régions (2x US, 2x EU, 1x JP). Nous avons différents fichiers de configuration pour chaque région (EuWestProductive.azurePubxml, ServiceConfiguration.CloudEuWest.cscfg, Web.ReleaseEuWest.config).Azure: ne pas déployer un rôle par configuration

Maintenant le problème: Dans chaque région, nous avons lancé "WebsiteRole" et "WebsiteWorkerRole". Mais le "WebsiteWorkerRole" n'a que de très petites tâches, de sorte qu'une petite instance supplémentaire dans une région est plus que suffisante.

Nous avons essayé de définir le nombre d'instances de rôle à zéro (ServiceConfiguration.CloudEuWest.cscfg). Mais ceci n'est pas autorisé: Azure Feedback: Allow a Role instance count of 0

Existe-t-il un autre moyen de supprimer un rôle lors du déploiement de Cloudservice?

Répondre

2

Non, comme vous l'avez découvert, un service cloud ne permet pas de mettre à l'échelle zéro. Vous devez supprimer efficacement le déploiement. Pour modifier au minimum ce que vous avez déjà en place, vous pouvez séparer les deux rôles en deux déploiements différents. Ensuite, exécutez un script Azure Automation ou un jeu de scripts exécuté ailleurs, qui gère le déploiement du rôle de travail en cas de besoin et le déclassement lorsque cela n'est pas nécessaire. En fonction du type de charge de travail que le worker est en train de faire, vous pouvez également envisager d'utiliser un autre moyen, tel qu'Azure Automation, pour effectuer le travail. Ceci est particulièrement vrai si c'est une petite quantité de traitement qui se produit seulement quelques fois par jour. Vous êtes facturé à la minute pour le script d'automatisation, alors assurez-vous simplement qu'il va fonctionner moins que l'instance actuelle.

Cela se résume vraiment à ce que fait ce travailleur, au traitement qu'il doit vraiment faire, aux ressources dont il a besoin et à la fréquence à laquelle il doit fonctionner. Il existe de nombreuses options, telles qu'Azure Automation, un autre thread sur le rôle Web, un déploiement de service cloud distinct, etc. Chacun avec ses propres avantages et inconvénients. Une option pourrait même regarder les nouvelles fonctions Azure qu'elles viennent d'annoncer (en aperçu et chargées par l'exécution). La réponse courte est de séparer le travailleur du déploiement WebSiteRole, puis de déterminer le meilleur mécanisme d'hébergement pour ce rôle de travail, en veillant à ce que l'option ne puisse s'exécuter que lorsque vous en avez besoin.

0

Merci @MikeWo, votre idée de séparer les déploiements était géniale! J'ai vérifié cela avec un petit exemple de projet et cela fonctionne très bien. Maintenant, il est également possible de changer la taille de la VM et d'autres configurations par région.

Example project

(Les commentaires ne permettent pas les images)

+0

Techniquement, oui, mais pour certains paramètres qui sont dans le fichier ServiceDefinition, tels que la taille VM, vous devez faire un peu de travail pour obtenir ce à arriver avant de faire la construction et le déploiement puisque ce fichier est empaqueté avec le code. Il existe de nombreuses façons d'y parvenir, telles que les étapes de construction personnalisées, les projets Cloud Project séparés dans VS, comme ce que vous avez fait précédemment, etc. Toute configuration dans la configuration de service est facilement gérée au moment du déploiement. – MikeWo