Penser la conception des applications pour effectuer un scale-out

Concevoir votre application de manière à permettre sa mise à l’échelle horizontale

Le principal avantage du cloud est la mise à l’échelle élastique, la possibilité d’utiliser exactement la capacité dont vous avez besoin, en effectuant une montée en charge à mesure que la charge augmente et une mise à l’échelle lorsque vous n’avez plus besoin de cette capacité supplémentaire. Concevez votre application afin qu’elle puisse évoluer horizontalement, par l’ajout ou la suppression de nouvelles instances en fonction de la demande.

Recommandations

Évitez l’adhérence des instances. L’adhérence, ou affinité de session, intervient lorsque les requêtes émanant du même client sont toujours routées vers le même serveur. L’adhérence limite les possibilités de scale-out de l’application. Par exemple, le trafic provenant d’un utilisateur générant beaucoup de volume ne sera pas distribué entre les différentes instances. L’adhérence peut être due au stockage de l’état de session en mémoire et à l’utilisation de clés spécifiques à l’ordinateur pour le chiffrement. Assurez-vous que n’importe quelle instance peut gérer n’importe quelle requête.

Identifiez les goulots d’étranglement. La montée en puissance ne règle pas tous les problèmes de performance. Par exemple, si votre base de données principale est le goulot d’étranglement, ajouter des serveurs web ne servira à rien. Identifiez et éliminez les goulots d’étranglement au niveau du système avant de multiplier les instances. Les parties avec état du système sont les causes les plus courantes des goulots d’étranglement.

Décomposez les charges de travail par exigences d’évolutivité. Les applications se composent souvent de plusieurs charges de travail, avec des exigences différentes en matière d’évolutivité. Par exemple, une application peut avoir un site web public et un site d’administration distinct. Le site public peut rencontrer des pics de trafic soudains, alors que le site d’administration a une charge moins élevée et plus prévisible.

Déchargez naturellement les tâches asynchrones. Les tâches comme l’envoi d’e-mails, les actions pour lesquelles l’utilisateur n’a pas besoin d’une réponse immédiate et l’intégration à d’autres systèmes sont tous de bons candidats à l’utilisation de modèles de messagerie asynchrones.

Déchargez les tâches gourmandes en ressources. Dans la mesure du possible, les tâches qui nécessitent beaucoup de ressources de processeur ou d'E/S doivent être déplacées vers des travaux situés en arrière-plan afin de réduire la charge au niveau du serveur frontal qui traite les requêtes utilisateur.

Utilisez les fonctionnalités de mise à l’échelle automatique intégrées. De nombreux services de calcul Azure offrent une prise en charge intégrée de la mise à l’échelle automatique. Si l’application a une charge de travail régulière et prévisible, nous vous recommandons de planifier le scale-out, par exemple pendant les heures ouvrables. Sinon, lorsque la charge de travail n’est pas prévisible, utilisez les indicateurs de performance tels que la longueur de file d’attente du processeur ou des requêtes pour déclencher la mise à l’échelle automatique. Pour connaître les bonnes pratiques en matière de mise à l'échelle automatique, consultez Mise à l'échelle automatique.

Envisagez une mise à l’échelle automatique agressive pour les charges de travail critiques. Pour les charges de travail critiques, il est essentiel d’anticiper la demande. Il est préférable d’ajouter de nouvelles instances rapidement en cas de charge importante afin de pouvoir gérer le trafic supplémentaire, puis de réduire progressivement le nombre d’instances.

Pensez la conception des applications pour effectuer un scale-in. N’oubliez pas que dans le cadre d’une évolutivité élastique, l’application connaîtra des périodes de scale-in, lorsque des instances sont supprimées. L’application doit gérer de manière appropriée les instances en cours de suppression. Voici quelques méthodes de gestion de la mise à l’échelle :

  • Détectez les événements d’arrêt (le cas échéant) et arrêtez correctement les instances.
  • Les clients/consommateurs d’un service doivent prendre en charge les nouvelles tentatives et la gestion des erreurs temporaires.
  • Pour les tâches longues, envisagez de fragmenter le travail à l'aide de points de contrôle ou du modèle Canaux et filtres.
  • Placez les éléments de travail dans une file d’attente afin qu’une autre instance puisse s’en charger dans le cas où une instance est supprimée au cours du processus de traitement.

Envisagez une mise à l'échelle pour la redondance. La mise à l'échelle peut améliorer la fiabilité de votre application. Par exemple, envisagez une montée en charge sur plusieurs zones de disponibilité, par exemple en utilisant des services redondants entre les zones. Cette approche peut améliorer le débit de votre application et assurer la résilience si une zone subit une panne.