Oleksandr - Fotolia
Load balancer et microservices : bien faire ses premiers pas
Le load balancing est un élément critique, et potentiellement un problème épineux, de la gestion des microservices. Cet article passe en revue certaines méthodes et outils pour y faire face.
Avec l’adoption des microservices, les entreprises doivent aussi prendre en compte les bonnes techniques de load balancing pour maintenir une expérience utilisateur optimale.
Selon leur fonction, chaque application traitera leur workload de façon différente. Certaines applications qui doivent proposer un débit élevé à grande échelle nécessitent une faible latence. C'est la technique utilisée par les moteurs de recherche et les applications de monitoring en temps réel. D'autres, comme les applications de traitement vidéo, n’ont pas besoin de faible latence, mais plutôt de haute disponibilité et de stabilité.
Les applications peuvent également avoir d'autres exigences : celle d’avoir à assurer un flux bidirectionnel des requêtes ou en traiter qui sollicitent des architectures back-end complexes. Dans chacun des cas, les requêtes client - serveur doivent fonctionner selon ces exigences. C'est là que le load balancing (ou équilibrage de charge) est important et fait la différence.
Lorsque la limite de requêtes d’un serveur est dépassée, les requêtes restantes commencent à s'empiler et cela risque de compromettre l'expérience utilisateur. L'équilibrage de charge traite les requêtes lorsqu'elles dépassent la capacité standard des serveurs alors disponibles. C'est particulièrement nécessaire avec les applications cloud, qui sont confrontées à un trafic imprévisible et doivent proposer des capacités de dimensionnement horizontal.
Le dimensionnement dans le cloud est différent
Dans le passé, les responsables informatiques achetaient tout simplement plus de serveurs pour augmenter la capacité et faire face aux pics de trafic. Avec la migration des applications vers le cloud, les architectes avaient aussi besoin d'apprendre à gérer le trafic là aussi. Lorsque les applications s'exécutent dans le cloud, les pannes ou la latence ne doivent pas entraîner l'arrêt de l'application. L'équilibrage de charge dans le cloud est l'une des principales caractéristiques qui facilitent la résilience des applications natives pour le cloud.
De service à service
Lors de la création de microservices, la communication entre services suit un schéma service à service plutôt que client - serveur. Les réseaux traditionnels et l'équilibrage de charge n'ont pas été conçus pour cela. C'est pourquoi il est nécessaire de disposer d'outils adapté pour gérer cette particularité des microservices.
Passer d'une approche centrée sur le serveur à une approche centrée sur le service
Avec les applications monolithiques, le réseau s'articule autour des adresses IP, des ports, du système de noms de domaine (DNS) et des protocoles TCP/IP. Ces composants sont plus faciles à gérer mais plus difficiles à mettre à l'échelle. Ils ne sont pas adaptés aux applications modernes. Avec les microservices, d'autre part, la méthode avec laquelle vous gérez les différents services est une clé de l'application. Peu importe l’IP et le DNS, il convient davantage de considérer la découverte de services et le load balancing.
Plutôt que de configurer manuellement la mise en réseau, une architecture de microservices transfère les opérations de mise en réseau à des outils de mise en réseau dans le cloud. Autrefois, les développeurs accomplissaient cette tâche en codant la configuration dans l'application. Cela fonctionnait bien parce que les développeurs pouvaient maintenir et modifier la couche application indépendamment de la couche réseau. Cependant, les outils modernes dans le cloud apportent des outils de configuration automatique de règles qui gèrent le load balancing.
Load balancing : quelles sont les options
En matière de load balancing dans le cloud, on peut par exemple utiliser AWS Elastic Load Balancing (ELB). AWS fournit un équilibreur de charge pour les applications, un autre pour le réseau et un équilibreur de charge classique. Cependant, chez les fournisseurs de cloud , ces outils ont tendance à être propriétaires. De plus, ils n'offrent pas autant de flexibilité en termes de scalabilité horizontale.
La sélection d’outil peut également porter sur Nginx, un autre load balancer plus agnostique. Bien que Nginx soit mieux connu en tant que serveur Web, il offre également des fonctions d'équilibrage de charge assez robustes. Il fonctionne sur n'importe quelle plateforme cloud, datacenter ou container Docker. Ses capacités de dimensionnement horizontal en font un outil idéal pour les microservices.
Pour certains, les outils de service mesh sont la méthode de facto pour gérer l'équilibrage de charge dans les microservices et les environnements cloud. Kubernetes est aujourd'hui la plateforme dominante d'orchestration de containers, et comporte des service mesh open. Ce sont des outils comme Istio, Linkerd et gRPC, excellents dans la gestion de la communication de service à service à grande échelle.