Maintenant que nous avons présenté les problématiques à étudier pour la mise en œuvre de microservices :
Ainsi que la façon dont gérer l’intégration et le déploiement continu dans VSTS, il est temps de s’intéresser aux moyens qu’Azure met à notre disposition pour héberger nos composants logiciels !
Azure est une plateforme Cloud d’hébergement d’applications, de données et de services créés en 2008 par Microsoft. Les solutions proposées par Azure sont nombreuses. Ils se déclinent en trois principales catégories :
L’IaaS (Infrastructure as a Service) est une externalisation de l’infrastructure informatique matérielle. L’offre gère pour nous :
- L’installation des serveurs fichiers
- Les réseaux
- Le stockage de données
Le PaaS (Platform as a Service) est un IaaS plus poussé. Il consiste à sous-traiter non seulement l’infrastructure matérielle mais également vos applications middleware :
- Systèmes d’exploitation
- Base de données
- Serveurs web
A nous ensuite d’y ajouter nos applications et services.
Le SaaS (Software as a Service) est la version la plus aboutie et la plus complète de l’externalisation de composants du système d’information. Le fournisseur gère, pour nous :
- L’installation
- La configuration
- Le fonctionnement
- La maintenance
Pour l’hébergement d’applications de type microservices dans Azure nous disposons de plusieurs possibilités avec des offre de type PAAS.
Web App
Les web applications constituent le moyen le plus simple d’héberger une application dans Azure. Il s’agit d’une solution PAAS qui fais partie du groupe de fonctionnalités Azure App Services.
Web App est un service pour l’hébergement d’applications web, d’API REST et de backends mobiles. Vous pouvez y déployer des applications développées en .NET, .NET Core, Java, Ruby, Node.js, PHP ou Python.Les Web App sont déployés sur des machines virtuelles Windows ou Linux.
Il est également possible d’y déployer des applications s’exécutant dans un conteneur Docker.
Azure Container Service
On passe à une solution PAAS bien plus complète que les « simples » WebApp.
ACS est une plateforme de conteneur pouvant être orchestré par :
- DC/OS
- Docker Swarm
- Kubernetes : (l’orchestrateur Docker de Google) : on parle alors d’AKS.
Azure Container Service est une solution permettant de déployer, provisionner et manager des conteneur Docker.
La technologie d’un conteneur virtualise le système d’exploitation par rapport aux applications. Par rapport aux machines virtuelles, les conteneurs présentent les avantages suivants :
- Ils sont bien plus légers. Un conteneur ne contient que l’application à déployer et ces dépendances.
- Démarrage rapide : comme les conteneurs n’ont pas besoin d’initialiser l’intégralité d’un système d’exploitation, ils peuvent démarrer beaucoup plus rapidement, généralement en quelques secondes.
- Portabilité : une image d’application en conteneur peut être portée de manière à s’exécuter dans le cloud ou sur site, à l’intérieur de machines virtuelles ou directement sur des machines physiques.
L’utilisation de cette plateforme me semble intéressent pour un SI qui maitrise déjà docker et un orchestrateur et qui veux migrer vers le Cloud. Historiquement Docker et les orchestrateurs de conteneur adresse plutôt des technologies open source mais se sont tournés récemment vers Microsoft grâce à .Net Core.
La troisième option est le concurrent direct d’ACS / AKS.
Azure Service Fabric
Azure Service Fabric est la plateforme de microservices signée Microsoft. Elle peut être déployée OnPrem sur des serveurs Windows Server 2016 ou Linux, dans le Cloud sous Azure, mais également dans n’importe quel autre Cloud.
La plateforme est mise à disposition de tous depuis 2015 mais Microsoft l’éprouve depuis plusieurs années. En effet plusieurs services Azure utilisent cette infrastructure :
- Skype pour les entreprises
- DocumentDB
- Event Hubs
- Azure SQL Database (qui héberge plus de 1,4 million de bases de données clients)
- Cortana qui peut traiter plus de 500 millions de requêtes par seconde.
Source MSDN : « Azure Service Fabric est un orchestrateur de services sur un cluster de machines. Azure Service Fabric est une plateforme de systèmes distribués qui facilite le packaging, le déploiement et la gestion de conteneurs et de microservices évolutifs et fiables. Les développeurs et administrateurs sont en mesure d’éviter les problèmes d’infrastructure complexes et peuvent se concentrer sur l’implémentation de charges de travail stratégiques et exigeantes, évolutives, fiables et faciles à gérer. »
Autrement dit, il s’agit d’une plateforme PaaS associée à un système d’orchestration des services, façon Kubernetes.
Azure Service Fabric propose :
- Une gestion de la haute disponibilité des services.
- Un modèle de programmation simple.
- Une scalabilité des services à grande échelle.
- Un partitionnement des données.
- Une gestion fine des mises à jour que ce soit en upgrade ou en downgrade.
- Un monitoring simple de la santé de vos services.
- Un démarrage et un arrêt rapide des services.
- La gestion du load balancing des services.
- Une gestion de récupération automatique des services.
- Un système de réplication et de gestion de failover.
Les différents types d’applicatifs pouvant être exécutés dans Service Fabric sont :
- Stateless service : Un service au sens courant qui ne maintiens pas d’état entre les appels.
- Stateful service : Un service capable de conserver des informations grâce aux ReliableDictionary qui garantis une persistance des données entre les différentes instances du service.
- Actor service : Par exemple, un panier d’un utilisateur sur un site de e-commerce peut être un actor service.
- Guest exécutable : Permet d’exécuter une application exe dans Service Fabric
- Container : Exécutions d’un conteneur docker dans ASF : disponible depuis peu.
Ces différents types de services peuvent être développé en utilisant .Net ou .Net Core.
Dans les prochains articles nous allons reprendre point par point les problématiques relevés pour l’implémentation d’une architecture microservices et détailler comment Azure Service Fabric réponds à chacun d’entre eux. Je reviendrais plus tard également sur Azure Container Services 🙂