ASF : prenons du recul !

Hello !

Pour conclure je vous propose de détailler maintenant les problématiques que nous avons résolus grâce à notre architecture.

6 2 - ASF : prenons du recul !

Au niveau du projet et du code .Net

  • Projet Visual Studio correctement découpé : « separation of concerns »
  • Temps d’exécution des builds bien plus rapide.
  • Montée en compétence plus rapide sur les projets
  • Moins de couplage entre les composants.

Au niveau de l’application

  • En cas de modification, on doit tester un service.
  • Déploiements plus facile et plus fréquent puisqu’ils sont réalisés sur un périmètre restreint
  • La mise à l’échelle est plus simple puisqu’il est facile grâce à ASF de provisionner une nouvelle instance de microservice.

Reprenons notre analyse FURPSE pour détailler les avantages de notre architecture :

7 - ASF : prenons du recul !

  • Fiabilité : Notre application est beaucoup plus légère, et la couche de services est résiliente grâce à l’autoscaling Azure Service Fabric.
  • Performance : Les temps de réponse sont équivalent mais la charge de calcul est répartis entre service dans le Cloud.
  • Maintenabilité : Le code est correctement découpé, il est donc bien plus facile à tester et debugger.
  • Evolutivité : En cas d’évolution sur un service, on doit redéployer ce service et non plus toute l’application. On peux effectuer une migration techniques / technologiques de façon plus simple sur un contexte réduit.

Nous avons donc répondu aux problématiques de notre existant et rendus notre application facilement déployable, testable, maintenable, évolutive et tolérante aux pannes.

15 1024x525 - ASF : prenons du recul !

Intégration et déploiement continu avec Azure Service Fabric

Nous allons maintenant détailler la mise en place de VSTS  (Azure DevOps), notre outil ALM, pour notre projet Service Fabric.

Intégrations

Premier besoin, un outil de gestion de version. J’ai utilisé Git et le pattern d’utilisation GitFlow pour la gestion des branches. Ce pattern propose une façon d’utiliser Git. Pour mes besoins je n’ai utilisé que les branche Develop et Master.

15 1 - Intégration et déploiement continu avec Azure Service Fabric

J’ai donc créé un projet sur VSTS. il faut ensuite utiliser l’URL du dépôt pour s’y connecter depuis Team Services de Visual Studio et pousser son code.
J’ai ensuite configuré mon build à partir du template Azure Service Fabric :

14 1 1024x701 - Intégration et déploiement continu avec Azure Service Fabric

En exécution ça donne ça :

13 1 1024x549 - Intégration et déploiement continu avec Azure Service Fabric
Déploiements

Pour le déploiement vers notre environnement Cloud Service Fabric c’est très simple, une seule étape VSTS suffit :

11 1 - Intégration et déploiement continu avec Azure Service Fabric

Bien sur dans un vrai contexte projet le pipeline sera plus fournis, avec de multiples environnement : dev, qualification, intégration, pre-production …

Pour la configuration de ma tache de déploiement, il faudra configurer correctement la section Cluster Connexion qui fera le lien entre VSTS et ma plateforme Azure :

9 1 - Intégration et déploiement continu avec Azure Service Fabric

Les informations demandées par cet écran sont expliquées par les infobulle. Si vous n’avez pas associé de mot de passe à votre certificat, laissez le champ vide.

Pendant l’étape de déploiement de notre projet Service Fabric, l’Explorer affichera également des informations sur le déploiement :

8 - Intégration et déploiement continu avec Azure Service Fabric

La mise à jour se fait sans interruption de service puisque le déploiement se fait par nœud. A un instant T du déploiement il y aura donc deux versions de votre application en exécution simultanée. A chaque mise à jour de nœuds, Azure Service Fabric réalise des tests pour vérifier que votre installation s’est bien passée. Si l’update à échoué, un rollback vers la précédente version est automatiquement réalisé.

Pour une gestion plus poussée des montée de version, on pourra mettre en place le « Blue / Green Deployment » qui nous permettra de valider la version à jour de notre service (par des tests sur l’interface swagger par exemple) sur un nœud précis avant de la déployer sur les autres.

Pour aller plus loin

Canary Release / Blue Green Deployment

Les pattern des géants du web

Tutoriel Microsoft complet

A bientôt !

Thomas

Comment implémenter les appels à Azure Service Fabric ?

Pour la communication entre services nous avions listé deux possibilités :

  • Echange synchrone via commande HTTP
  • Échange asynchrone via un bus d’évènement basé sur le protocole AMQP.

Ici je vais expliquer la communication synchrone par appel HTTP. A mon sens pour démarrer sur cette architecture nous pouvons commencer par cette approche. Si par le suite le besoin est présent alors une utilisation d’Azure Service Bus peux être implémenter et déployer progressivement.

Voici une méthode permettant à notre application cliente d’appeler un service dans Service Fabric :

1 1 - Comment implémenter les appels à Azure Service Fabric ?

Il s’agit d’un appel d’une API REST tout à fait classique. Notre service est exposé via le port 82. Pour ce faire nous avons ouvert le port sur notre cluster lors de la création et configuré le port de notre service dans le fichier ServiceManifest.xml du projet : Verifier la section Resources/Endpoints du fichier.

Si un autre service de mon cluster Service Fabric doit réaliser le même appel, l’url sera la suivante : http://localhost:19081/OrangeTechsMicroservices/Clients/1. On remarque que l’appel se fait sur localhost (quel que soit l’environnement) et que le port utilisé est celui du reverse proxy Service Fabric.

Comme déjà évoqué, la complexité des appels HTTP est plutôt faible, nous verrons que l’utilisation de Service Bus pour effectuer des échanges asynchrones n’est pas aussi évidente et demande un peu plus de réflexion.

A bientôt !

Tester son projet Azure Service Fabric

Hello,

Suite à la création de notre projet nous allons aujourd’hui le tester en local puis le déployer dans Azure.

En local il est possible d’exécuter son projet Azure Service Fabric comme si il était déployé dans le Cloud puisque le déploiement de notre application se fait dans un cluster Service Fabric local, exécuté sur le poste de développement. On a ensuite accès à l’écran d’administration et nous pouvons debugger notre application comme n’importe quel projet .Net.

5 1 - Tester son projet Azure Service Fabric

6 1 - Tester son projet Azure Service Fabric

Le monitoring de nos services en local :

7 1 - Tester son projet Azure Service Fabric

Pour effectuer nos premiers tests de déploiement, on peut utiliser la publication Visual Studio qui s’interface très bien avec Azure. Attention pour les publication de « mise à jour » pensez à cocher « Mettre à niveau l’application » comme ci-dessous et à modifier les numéros de versions du manifeste.

8 - Tester son projet Azure Service Fabric

Pour le déploiement vers notre cluster, il faudra configurer le fichier cloud.xml :

9 - Tester son projet Azure Service Fabric

  • ConnectionEndpoint : L’URL de notre cluster sur le port 19000
  • ServerCertThumbprint : Identifiant du certificat de notre cluster.

Précisions intéressante, Il est possible de déployer son projet sur un cluster public ! Pour effectuer un POC avec un crédit Azure restreint c’est très utile, voir : https://try.servicefabric.azure.com/

A bientôt !

Application Service Fabric dans Visual Studio 2017

Hello !

Suite à la création de notre cluster Service Fabric dans Azure, nous allons aujourd’hui détailler la création de notre projet dans Visual Studio 2017.

Création du projet

Tout d’abord il faut configurer le poste du développeur pour utiliser les templates de projets  ASF. Pour télécharger et installer le SDK rendez vous ici : https://docs.microsoft.com/fr-fr/azure/service-fabric/service-fabric-get-started

Nous pouvons maintenant créer notre projet Cloud de type Application Service Fabric :

1 - Application Service Fabric dans Visual Studio 2017

Nous devons ajouter un premier service à notre projet :

2 - Application Service Fabric dans Visual Studio 2017

Pour bien comprendre les différents type de service (au delà du framework .Net utilisé) que nous pourrons héberger dans notre cluster, je vous invite à consulter ce lien.

Pour faire simple nous pouvons retenir :

  • Service sans état : service “classique” ou les données sont stockés dans une source de connées externe (base de données, fichier xml).
  • Service avec état : le service conserve des données qui sont répliquées entre chaque instance du service grâce aux types Reliable. Ainsi si un client tente d’accéder à une donnée du service, peu importe l’instance qui est appelée, la donnée sera la même.

Je choisis le type de projet ASP .Net Core que je veux implémenter comme pour un projet .Net Core classique :

3 - Application Service Fabric dans Visual Studio 2017

Si par la suite je veux ajouter un nouveau projet à mon application il faudra faire clic droit sur notre projet principal et Ajouter > Nouveau Service Service Fabric pour que ce nouveau projet sois lié à notre environnement ASF.

4 - Application Service Fabric dans Visual Studio 2017

On voit ici que la différence majeure entre un service ASP .Net Core standart et un service ASP .Net Core dans Service Fabric c’est le projet par défaut créé par Visual Studio (ici Orange.Techs.Microservices).

Celui-ci contient des fichiers de configurations pour le build et déploiement de nos services dans un cluster Service Fabric. En revanche nos services en eux mêmes (ici Orange.Techs.Microservices.StatelessAPI) sont identiques aux services de type WebApi que nous connaissons déja !

Par conséquent vous retrouvez facilement vos habitudes de développement au niveau des services ! Un point plus que positif à prendre en compte pour l’adoption de cet environnement 🙂

Création d’un cluster Azure Service Fabric (Portal mode)

Hello !

Après la description de notre projet et de nos services nous allons maintenant détailler la création de notre cluster Service Fabric. Pour ce premier cluster je vais utiliser le portail Azure ! Ce ne sera plus le cas par la suite ou nous privilégierons les templates ARM.

Création

1ere étape : paramètres de bases :

1 3 - Création d'un cluster Azure Service Fabric (Portal mode)

2eme étape : configuration du cluster. On dois ici :

  • Choisir le nombre de nœud de notre cluster
  • Pour chaque nœud on configure la machine hôte et les paramètres réseaux. Attention à la configuration des ports qui seront accessibles (80,81,82 ici) et à bien activer le reverse proxy !

2 1 - Création d'un cluster Azure Service Fabric (Portal mode)

3ème étape : Gestion de la sécurité.

3 1 - Création d'un cluster Azure Service Fabric (Portal mode)

Il faut créer un coffre de sécurité qui contiendra le certificat d’accès à notre cluster, modifier les stratégies d’accès puis valider.

4 1 - Création d'un cluster Azure Service Fabric (Portal mode)

5 1 - Création d'un cluster Azure Service Fabric (Portal mode)

Téléchargez le certificat créé, il nous servira ultérieurement.

6 1 - Création d'un cluster Azure Service Fabric (Portal mode)

Téléchargez le template généré avant de valider : ce template pourra être utilisé pour recréer notre cluster :

7 1 - Création d'un cluster Azure Service Fabric (Portal mode)

Et il n’y a plus qu’a valider le déploiement de notre plateforme :

8 1 - Création d'un cluster Azure Service Fabric (Portal mode)

L’installation est en cours :

9 - Création d'un cluster Azure Service Fabric (Portal mode)

Une fois toute les étapes validées, Azure créé notre cluster Service Fabric. L’opération dure un certains temps, 10 minutes environ.

Il faut maintenant installer le certificat précédemment téléchargé pour pouvoir accéder à l’interface d’administration Service Fabric. Il faut installer le certificat dans le magasin de certificat Windows et dans le navigateur utilisé.

Voici l’interface de notre solution : Service Fabric Explorer. Cet outil permet de visualiser rapidement l’état de santé de notre cluster et des instances des applications.

L’url de cet outil est : https://nom-du-cluster.localisation-du-cluster.cloudapp.azure.com:19080/Explorer

14 - Création d'un cluster Azure Service Fabric (Portal mode)

Application Insights

Il nous reste à déployer Application Insights pour notre cluster !

Pour se faire, positionnez vous sur votre ressource Service Fabric > Application Insights et cliquez sur Créer Application Insights :

10 - Création d'un cluster Azure Service Fabric (Portal mode)

11 - Création d'un cluster Azure Service Fabric (Portal mode)

Le déploiement est en cours :

12 - Création d'un cluster Azure Service Fabric (Portal mode)

Nous avons maintenant accès au dashboard de configuration et de monitoring d’Insights pour notre cluster Service Fabric et nos services :

13 - Création d'un cluster Azure Service Fabric (Portal mode)

Configuration

Attention à l’ouverture des ports sur le cluster et sur chaque nœud pour l’accessibilité externe à Service Fabric. Pour accéder au service, il faudra ajouter des règles de routage dans l’équilibreur de charge.

15 - Création d'un cluster Azure Service Fabric (Portal mode)

L’écran « Montée en charge » permet quant à lui de renseigner des règles pour adapter le nombre d’instances de nos services disponibles suivant la charge :

16 - Création d'un cluster Azure Service Fabric (Portal mode)

Par exemple, nous pouvons définir des règles par rapport :

  • Au trafic réseau
  • Un seuil d’utilisation CPU ou mémoire
  • Au nombre d’appels à nos API …

Notre cluster Service Fabric est maintenant opérationnel dans Azure et grâce à l’Explorer nous pouvons valider son bon fonctionnement même si pour le moment aucune application n’est déployée dessus 🙂

Ce sera l’objet du prochain article !

Azure Service Fabric : notre projet

Nous allons maintenant détailler la mise en œuvre concrète de la solution Azure Service Fabric introduit précédemment.

Notre système d’information de démonstration contient une application cœur de métier, utilisée par tous les employés du SI.

Cet applicatif « monolithique » adresse ainsi tous les métiers de l’entreprise :

  • Gestion client
  • Comptabilité
  • Commerce
  • RH
  • Fournisseur / Achat

Chaque employé à accès aux divers écrans en fonction de ces droits attribués par rapport à son rôle dans l’entreprise.

Un nouveau besoin pour un usage en mobilité conduit notre SI à une étude autour de son existant et une évaluation des possibilités d’amélioration.

Problématiques de l’existant

Les problématiques autour de cette application cœur de métier sont nombreuses :

Au niveau du projet et du code .Net, une base de code volumineuse apporte plusieurs problématiques :

  • Projet Visual Studio conséquent
  • Longueur des builds sur les postes de développement.
  • Difficulté à démarrer sur le projet pour un nouveau développeur
  • Couplage entre les modules de l’application : code spaghettis

Au niveau de l’application :

  • Problèmes de performances.
  • En cas de modification, il faut retester l’application dans son ensemble car les modules sont fortement couplé.
  • Cycle en V plutôt que méthode agile lié au coup de déploiement.
  • La mise à l’échelle implique de cloner toute l’application sur un nouveau serveur.

Pour détailler les problèmes de cet existant, nous pouvons utiliser l’approche FURPSE :

7 - Azure Service Fabric : notre projet

  • Utilisabilité : L’application est pollué par des lenteurs excessive.
  • Fiabilité : En cas de défaillance d’un composant, l’application crashe totalement. L’utilisateur doit alors relancer toute l’application.
  • Performance : Lenteur de l’application, au démarrage et lors de la navigation du aux trop nombreuses dépendances. Consommation de ressources CPU/RAM importante.
  • Maintenabilité : En cas d’erreur, difficulté d’analyse.
  • Evolutivité : Les évolutions sont couteuses à mettre en place car elles impliquent beaucoup d’analyse d’impact et de tests de la part des développeurs.
Conceptions

Le but de ce chapitre est de présenter comment bâtir une architecture microservices à partir de notre existant. Ce que nous voulons obtenir c’est une application de présentation, la plus légère possible et qui ne contient aucune logique fonctionnelle et une couche de service déployé dans Azure Service Fabric.

Celui-ci contient des services regroupés par domaine fonctionnels :

  • Clients
  • Comptabilités
  • Documents

A noter que certains services n’ayant pas besoin d’être forcément scalable (car peu utilisé) peuvent être déployé dans des WebApp plus classique par soucis de simplicité.

Une fois la logique fonctionnelle extraite de notre application, il sera bien plus facile :

  • De faire évoluer nos services.
  • D’ajouter une nouvelle application cliente.
  • De tester et déployer nos services.
  • De les rendre résilient aux pannes et adaptable à la charge.

Nous allons présenter différentes possibilités pour mettre en œuvre notre architectures microservices en gardant à l’esprit nos besoins. Nous souhaitons :

  • Des services au contexte délimité.
  • Un couplage faible entre composants.
  • Testables facilement et automatiquement.
  • Déployable automatiquement.

Proposition 1 : Un monolithe organisé :6 - Azure Service Fabric : notre projet

Ce découpage ne convient pas à nos besoins pour des raisons évidente.

Proposition 2 : Un monolithe et des services :5 - Azure Service Fabric : notre projet

Proposition 3 : Un monolithe distribué. Les services sont dupliqués manuellement pour répondre à la charge :4 - Azure Service Fabric : notre projet

Le risque de cette dernière proposition est de vite se retrouver à gérer :3 - Azure Service Fabric : notre projet

Proposition 5 : Une architecture microservice avec Azure Service Fabric :

2 - Azure Service Fabric : notre projet

Proposition retenue : Si le besoin d’ouvrir notre SI à des clients externe est présent nous pourrons facilement le mettre en œuvre grace à Azure API Management :1 - Azure Service Fabric : notre projet

Prochaine étape : la création de notre cluster Service Fabric !

Microservices et Azure Service Fabric

Après ces trois derniers articles :

Nous pouvons conclure qu’Azure Service Fabric propose une solution clé en main pour la conception d’une architecture microservices dans Azure car il offre des réponses aux différentes problématiques de mise en œuvre de microservices.

6 2 - Microservices et Azure Service Fabric

Grâce à cette offre PAAS, les développeurs ont à leur disposition :

  • Un Framework de développement en .Net et des templates de projet pour VS2017
  • Une solution CI/CD compatible avec VSTS depuis peu renommé Azure DevOps 🙂

ArticleVsts Alm - Microservices et Azure Service Fabric

  • Une offre PAAS pour l’intégration de la solution dans le cloud Azure. Cette offre PAAS garantis :
  • Scalabilité de nos services.
  • Découvrabilité via le Reverse Proxy.

6 3 - Microservices et Azure Service Fabric

  • Intégration avec API Management pour les appels clients.

3 3 - Microservices et Azure Service Fabric

  • Monitoring avec Application Insights.4 2 - Microservices et Azure Service Fabric
  • Communication avec Azure Service Bus pour les appels asynchrone.

De plus, un des avantages majeurs de cette solution à mon sens est que les développeurs retrouveront leur marque assez rapidement par rapport au développement d’API REST en ASP .Net Core.

net core logo proposal - Microservices et Azure Service Fabric

A contrario une solution comme Azure Container Service implique la montée en compétence sur :

  • La gestion des conteneurs avec Docker
  • Un orchestrateur de conteneur Docker tel que Kubernetes
  • La plateforme AKS en elle-même.

Maintenant que nous en avons terminé avec l’analyse de cette solution nous allons passer à la mise en oeuvre 🙂

Gérer les problèmes dans Service Fabric

Hello !

Suite à ce précédent article je vais aujourd’hui évoquer la gestion des erreurs et la tolérance aux pannes.

Cet article est une “réponse” aux questions soulevées ici !

Gestion des logs et monitoring

Le monitoring et la gestion des logs sont intégrés a Azure Service Fabric grâce à deux composants Azure :

  • Windows Application Diagnostics
  • Application Insights

Ces deux modules doivent être activés à la création du cluster Azure Service Fabric et configuré dans la solution Visual Studio.

1 2 - Gérer les problèmes dans Service Fabric

WAD permet de :

  • Détecter et diagnostiquer les problèmes d’infrastructure
  • Détecter les problèmes liés à votre application
  • Comprendre la consommation des ressources
  • Faire le suivi du niveau de performance des applications, des services et de l’infrastructure

Pour cela WAD collecte des « journaux » :

  • Evènements de la plateforme ASF
  • Intégrité et charge des clusters
  • Monitoring et utilisation du Reverse proxy
  • Compteur de performance
  • Evènement des applications

Application Insights quant à lui permet de :

AI nous offre également un langage de requête, inspiré de LinQ (Analytics pour Application Insights) pour extraire les données qui nous intéresse et les présenter sous forme de graphiques par exemple.

2 2 - Gérer les problèmes dans Service Fabric

3 2 - Gérer les problèmes dans Service Fabric

4 2 - Gérer les problèmes dans Service Fabric

5 2 - Gérer les problèmes dans Service Fabric

Insight analyse :

  • Les exceptions dans un services :6 2 - Gérer les problèmes dans Service Fabric
  • Consultations de pages et performances de chargement.
  • Nombre de sessions et d’utilisateurs.
  • Les appels services, temps de réponse et taux d’échec.
  • Compteurs de performances des serveurs Windows ou Linux, par exemple le processeur, la mémoire et l’utilisation du réseau.
  • Diagnostics d’hébergement Azure.
  • Journaux de suivi des diagnostics des applications : pour pouvoir mettre en corrélation les événements de suivi avec les demandes.
  • Mesures et événements personnalisés (à implémenter dans le code source)
  • Permet d’envoyer des alertes en cas de télémétrie anormale :7 2 - Gérer les problèmes dans Service Fabric

Insight est un outil complet et très puissant que nous aurions tort de ne pas utiliser avec Service Fabric de même qu’avec une Web App d’ailleurs 🙂

Gestion des pannes et résilience

Dans cet article nous avions identifié ces besoins :

  • Détecter quand un service est off pour que le client ne tente pas de le joindre inutilement.
  • Auto guérison des services : le cloud favorise la gestion de ce besoin par la mise en œuvre de :
  • Scalabilité horizontale : duplication automatique des composants logiciels.
  • Scalabilité verticale : augmentation de la puissance de la plateforme hôte (CPU / RAM / espace disque).

Azure Service Fabric répond à ce besoin car la plateforme tente d’apporter la plus grande fiabilité possible à notre application en nous proposant nativement :

  • Scalabilité automatique suivant des règles de charge
  • Load balancer pour répartir la charge
  • Redémarrage des services automatique
  • Outils de monitoring et de diagnostics pour analyser les problèmes

Mais nous détaillerons ces points précisément lors de la mise en oeuvre concrète de cette solution PAAS !

Data Management et Azure Service Fabric

Hello !

Suite à ce précédent article je vais aujourd’hui parler gestion des donnés avec des microservices dans Azure Service Fabric.

Cet article est une “réponse” aux questions soulevées ici !

Gestion des données

Il est bien sur possible d’utiliser des bases de données existantes (on prem) et d’héberger tout type de base de données dans Azure si besoin pour répondre aux différentes problématiques Data de vos applicatifs.

  • SQL Server
  • NoSQL : mongoDB
  • MySql

En ce qui concerne la séparation des données par service ASF, il n’y a pas de solutions meilleures qu’une autre. Chaque microservice est responsable de ces données et de leurs cohérences mais il n’y a pas d’obligation de provisionner une base de données pour chaque service. Nos options sont :

  • Chaque service à son jeu de tables attribués et ne peut effectuer des opérations CRUD que sur ces tables. Un seul microservice doit avoir accès à une table de la base de données. Il est donc interdit à un service B de réaliser une opération CRUD sur les données dont est responsable le service A.

4 - Data Management et Azure Service Fabric

  • Un service pour un schéma de la base.
  • Un service : une base de données.
  • Découpage lecture/écriture des données avec la mise en oeuvre du pattern CQRS.

L’architecte positionnera en fonction des contraintes et besoins de chaque solution la meilleure gestion de donnée pour le système d’informations.

Gestion des transactions

Les microservices peuvent-ils partager une transaction ?

Si une opération de mon SI nécessite deux microservices, comment font-ils pour se partager la transaction et garantir la cohérence du système en cas d’erreur ? Il faudrait pouvoir faire un rollback en cas d’échec et un commit en cas de succès mais sur les deux services via une même transaction.

Il s’agit d’une problématique purement logicielle à traiter manuellement avec éventuellement :

  • Commit en deux étapes : voir MSDN.
  • Méthode d’annulation : gestion par le développeur d’une méthode Non A pour chaque méthode A.

Ces deux façons de faire sont compliquées à mettre en œuvre et le risque d’erreur est important … Elles ne sont pas conseillées pour du microservice… Après tout si deux services sont impliqués dans une transaction commune, le découpage en « Bounded Context » de l’approche DDD n’est probablement pas optimal !

Ici nous avons traité de problématiques logicielles qui ne sont pas forcément spécifiques à Service Fabric mais à l’implémentation d’une architecture microservices en général. Il me semblais important d’en parler tout de même.