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 !

Architecture d’un microservice

Pour le développement de nos services, qui seront des composants de cette architecture :

1 1 - Architecture d'un microservice

Une bonne pratique consistera à implémenter le pattern Repository. Notre application se décomposera en 3 couches :

  • Une couche Service qui expose les points d’entrée. Elle peux être également responsable de la gestion des exceptions, de l’authentification et des logs.
  • Une couche Business qui contient la logique fonctionnelle. Elle organise les context de connexion à la base (UnitOfWork) et appelle les repository pour effectuer des opérations sur la source de données.
  • Une couche Repository qui accède ou modifie les données.

Schéma d’architecture d’un service. Les flèches en rouge représente des appels non autorisés.

1 2 - Architecture d'un microservice

Chaque couche est séparée par des interfaces pour la mise en œuvre de l’injection de dépendance dans nos projets.

A noter que Asp .Net Core supporte nativement cette bonne pratique via la classe ServiceCollection.

Au niveau des framework et outils tiers nous pourrons utiliser, en vracs  :

  • Pour l’accès aux données : l’ORM Entity Framework Core.
  • Automapper : pour mapper facilement un objet entités avec un POCO ou DTO pour le transport des informations.
  • Swagger pour la présentation de nos API. Une valeur sure !
  • Postman pour les tests locaux de communication avec notre API.
  • Nuget qu’on ne présente plus pour le partage des interfaces et des objets.
  • Nunit + Un Framework de mocking tel que Moq ou Rhino Mock pour les tests unitaires.

J’en oublie surement mais j’ai cité les indispensables 🙂

A très vite pour la partie dev !

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 !