paint-brush
L'adoption de l'architecture de microservices pour les applications cloud nativesby@samsey
1,676
1,676

L'adoption de l'architecture de microservices pour les applications cloud natives

Donsamsey11m2023/12/19
Read on Terminal Reader
Read this story w/o Javascript

Ces défis peuvent impliquer de faire face à une complexité accrue, de gérer efficacement la latence du réseau, de gérer efficacement la découverte des services, de répondre de manière appropriée aux problèmes de gestion de la configuration et de garantir la mise en place de mesures de sécurité. Dans l'ensemble, même si les microservices offrent des avantages pour les applications natives, il est crucial de relever efficacement les défis associés afin d'exploiter tout leur potentiel.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Company Mentioned

Mention Thumbnail
featured image - L'adoption de l'architecture de microservices pour les applications cloud natives
Donsamsey HackerNoon profile picture
0-item
1-item

Dans le monde de l'architecture logicielle, les microservices sont un style qui implique des services indépendants qui fonctionnent ensemble via des interfaces bien définies. D'autre part, les applications natives sont spécifiquement conçues et développées pour les environnements cloud afin de tirer le meilleur parti de leur évolutivité, de leur résilience et de leur agilité.


Lorsqu’il s’agit d’utiliser des microservices dans des applications, il existe de nombreux avantages à prendre en compte. Ceux-ci incluent des cycles de développement, des processus de test et de débogage, une flexibilité et une modularité améliorées, ainsi qu'une tolérance aux pannes et des performances améliorées. Cependant, il est important de reconnaître que cette approche comporte également des défis.


Ces défis peuvent impliquer de faire face à une complexité accrue, de gérer efficacement la latence du réseau, de gérer efficacement la découverte des services, de répondre de manière appropriée aux problèmes de gestion de la configuration et de garantir la mise en place de mesures de sécurité.


Dans l'ensemble, même si les microservices offrent des avantages pour les applications natives, il est crucial de relever efficacement les défis associés afin d'exploiter tout leur potentiel.


Docker a gagné en popularité en tant qu'outil de développement, d'exécution et de déploiement de microservices. Il sert de plate-forme permettant la création et l'exécution de conteneurs qui sont des environnements autonomes, englobant tous les composants nécessaires à l'exécution d'un service. Ce qui inclut les bibliothèques de code, les dépendances et les paramètres de configuration.


Le plus grand avantage de Docker réside dans sa capacité à regrouper les services dans des conteneurs portables qui peuvent être déployés de manière transparente sur des machines prenant en charge Docker, quel que soit leur système d'exploitation ou leur infrastructure sous-jacente. De plus, Docker propose une gamme de fonctionnalités et d'outils pour gérer efficacement le cycle de vie de ces conteneurs.


De leur création et de leur exécution à leur arrêt, leur redémarrage, leur suppression ou leur mise à jour.

Il existe des avantages à utiliser des microservices pour les applications natives, notamment :

1. Cycles de développement et de déploiement accélérés : en décomposant votre application en unités gérables, les microservices permettent un développement, des tests et un déploiement indépendants et parallèles. Cette approche rationalisée réduit le temps et les efforts nécessaires pour introduire des fonctionnalités et des mises à jour. Il facilite également l’adoption de pratiques d’intégration et de livraison (CI/CD).


De plus, les microservices aident à atténuer les défis associés aux applications, tels que les délais de construction, les dépendances complexes et les déploiements risqués.


2. Évolutivité accrue : les microservices offrent l’avantage de faire évoluer votre application. Vous pouvez supprimer des instances de service selon vos besoins sans perturber le reste de l'application. Cette flexibilité facilite la gestion de différentes charges de travail et l'optimisation de l'utilisation des ressources. De plus, les microservices vous permettent d'utiliser des technologies et des cadres pour chaque service en les adaptant aux exigences et aux préférences.


3. Tolérance aux pannes et résilience améliorées : les microservices contribuent à une application disponible en isolant les pannes et en minimisant leur impact. Si un service rencontre un problème, les autres services peuvent continuer à fonctionner normalement tandis que le service problématique est rapidement réparé ou remplacé.


De plus, les microservices facilitent la mise en œuvre de mécanismes de défaillance tels que les disjoncteurs, les tentatives, les délais d'attente et les replis. Ces modèles évitent les pannes en cascade. Assurer une dégradation des performances.


4. Le choix et l'intégration de la technologie deviennent plus simples : les microservices permettent l'intégration et la compatibilité entre votre application et divers systèmes et services internes et externes. Ils y parviennent en utilisant des interfaces définies et standardisées telles que les API.


En tirant parti des microservices, la communication est transparente entre les composants, quelles que soient les technologies ou plates-formes sous-jacentes utilisées. De plus, les microservices vous permettent de profiter des technologies et services existants et émergents des fournisseurs de cloud, notamment des fonctions sans serveur, des bases de données, des systèmes de messagerie et des outils d'analyse.

Des difficultés surviennent lors de l’utilisation de microservices pour des applications natives. Ces défis comprennent :

1. Complexité et charge de communication accrues : l'intégration de microservices dans votre application ajoute de la complexité. Cela nécessite de gérer et de coordonner les services sur différentes machines et réseaux. Cela implique de résoudre des problèmes tels que la latence du réseau, la bande passante, la fiabilité et la sécurité.


De plus, des protocoles et des mécanismes doivent être implémentés pour des tâches telles que la découverte de services, l'équilibrage de charge, le routage et la synchronisation. Les services de surveillance et de dépannage ainsi que leurs interactions peuvent également être une tâche longue et difficile.


2. Difficultés liées aux tests et au débogage : les microservices rendent les tests et le débogage plus difficiles car vous devez tester et déboguer non seulement chaque service individuellement, mais aussi l'ensemble du système en tant qu'unité cohérente.


Vous devez vous assurer que vos services sont compatibles et cohérents les uns avec les autres et qu’ils peuvent gérer divers scénarios et cas extrêmes. Vous devez également simuler et reproduire l’environnement et les conditions réels de votre application, ce qui peut être complexe et coûteux.


3. Manque de standardisation et de gouvernance au sein de votre application : étant donné que chaque service a la liberté d'utiliser des technologies, des frameworks, des langages et des outils, cela peut entraîner des incohérences, des efforts dupliqués et une base de code fragmentée.


Par conséquent, la maintenance et la mise à jour de ces services peuvent devenir difficiles. Pour résoudre ce problème, il est crucial d'établir et d'appliquer des pratiques, des lignes directrices et des politiques pour vos services. Ceux-ci peuvent inclure des normes de codage, des exigences en matière de documentation, des procédures de test des protocoles de gestion des versions et des stratégies de déploiement.


4. La sécurité et la conservation des données posent des défis : étant donné que chaque service dispose de son stockage de données et de son contrôle d'accès, il existe un risque accru de violations, de fuites et de corruption de données. De plus, la gestion de l'authentification, de l'autorisation et du chiffrement des services et des données correspondantes peut devenir complexe.


Pour répondre à ces préoccupations, il est essentiel de donner la priorité à la sécurité de vos services et de garantir le respect des réglementations et normes. La mise en œuvre de stratégies, telles que les transactions, les sagas et la recherche d'événements, peut également contribuer à maintenir la cohérence des données.

Utiliser Docker pour les microservices

Si vous souhaitez créer, exécuter et déployer des microservices Docker peut être un outil pour vous aider. Dans cette section, nous approfondirons les concepts de Docker tels que les images, les conteneurs, les volumes et les réseaux. Nous fournirons également des conseils sur l’utilisation de Docker Compose pour définir et orchestrer efficacement les microservices.


De plus, nous discuterons de quelques pratiques et conseils pratiques pour utiliser Docker dans le contexte des microservices.

Images et conteneurs

Dans le domaine de Docker, une image agit comme un package contenant tout ce qui est nécessaire au bon fonctionnement d'un service. Cela inclut les extraits de code, les bibliothèques, les dépendances et les configurations de configuration. Il convient de noter qu'une fois créée, une image Docker est considérée comme immuable, ce qui signifie qu'elle ne peut pas être modifiée.


Pour créer une image personnalisée adaptée à vos besoins, vous avez la possibilité de créer un fichier Docker qui décrit les instructions de construction. Vous pouvez également utiliser des images existantes disponibles sur des plateformes telles que Docker Hub ou d'autres sources fiables.


Un conteneur Docker représente une instance d'une image Docker. Il fonctionne indépendamment de la machine hôte et des autres conteneurs disposant de son système de fichiers, de son réseau et de ses processus. Pour lancer un conteneur Docker, vous pouvez utiliser la commande docker run qui génère et lance un conteneur basé sur une image.


Alternativement, vous avez la possibilité d'utiliser les commandes docker start et docker stop pour démarrer ou arrêter respectivement un conteneur existant. Si nécessaire, la commande docker rm peut être utilisée pour supprimer un conteneur.

Volumes et réseaux

Dans la terminologie Docker, un volume est utilisé pour le stockage et peut être connecté à un conteneur Docker. En utilisant des volumes dans Docker, on peut facilement échanger des données entre les conteneurs et la machine hôte tout en assurant la continuité des données lors des redémarrages ou des mises à jour.


La création d'un volume Docker peut être réalisée soit en exécutant la commande docker volume create, soit en spécifiant l'option volumes dans la commande docker run ou dans votre fichier Docker.


De plus, il existe des commandes telles que docker volume pour répertorier les volumes, docker volume inspect pour obtenir des informations sur des volumes spécifiques, et enfin docker volume rm, pour supprimer les volumes indésirables.


Un réseau Docker sert de réseau qui connecte les conteneurs Docker entre eux avec la machine hôte. En utilisant un réseau Docker, vous pouvez garantir une communication isolée entre les conteneurs tout en permettant également l'accès aux services qui y sont exécutés.


Pour créer un réseau Docker, vous avez la possibilité d'utiliser soit la commande "docker network create", soit de spécifier les réseaux dans la commande "docker run" ou Dockerfile.


De plus, vous pouvez utiliser des commandes telles que « docker network », « docker network inspect » et « docker network rm » pour gérer et manipuler les réseaux.

Créer et exécuter un microservice simple à l'aide de Docker

Pour illustrer comment utiliser Docker pour les microservices, nous allons créer et exécuter un microservice simple qui renvoie une citation aléatoire à partir d'un fichier JSON. Le microservice sera écrit en Python et utilisera le framework Flask. Le fichier JSON contiendra un tableau de citations, chacune avec un auteur et un texte.


Pour commencer, créons un répertoire pour notre microservice et ajoutons-y deux fichiers : app.py et quotes.json. Le fichier app.py contiendra le code de notre microservice tandis que le fichier quotes.json stockera les données. Voici le contenu de chaque fichier ;


Python

# app.py

à partir de l'importation de flacon Flask, jsonify

importer au hasard


app = Flacon ( nom )


# Chargez les citations du fichier JSON

avec open("quotes.json") comme f :

 quotes = f.read() quotes = json.loads(quotes)


# Définir une route pour le point de terminaison /quote

@app.route("/quote")

citation def() :

 # Pick a random quote from the list quote = random.choice(quotes) # Return the quote as a JSON object return jsonify(quote)


JSON

# quotes.json

 "author": "Albert Einstein", "text": "Imagination is more important than knowledge."


 "author": "Mahatma Gandhi", "text": "Be the change that you wish to see in the world."


 "author": "Mark Twain", "text": "The secret of getting ahead is getting started."


 "author": "Oscar Wilde", "text": "Be yourself; everyone else is already taken."


 "author": "Steve Jobs", "text": "Your time is limited, so don't waste it living someone else's life."


Ensuite, nous devons créer un Dockerfile pour notre microservice qui spécifiera les instructions de création de l'image. Le Dockerfile sera le suivant :


Utilisez l'image Python officielle comme image de base

DEPython : 3.9


Définissez le répertoire de travail sur /app

RÉPERT TRAVAIL /app


Copiez les fichiers du répertoire actuel vers le répertoire /app

COPIE. /application


Installez les dépendances requises

RUN pip installer le flacon


Exposer le port 5000

EXPOSER 5000


Définir la commande pour exécuter l'application

CMD ["python", "app.py"]


Pour créer l'image, nous devons exécuter la commande suivante dans le terminal à partir du répertoire où se trouve le Dockerfile :


docker build -t quote-service.


L'option -t spécifie le nom et la balise de l'image, dans ce cas, quote-service. Le . spécifie le contexte de la construction, dans ce cas, le répertoire courant.


Pour exécuter le conteneur, nous devons exécuter la commande suivante dans le terminal :


docker run -d -p 5000:5000 --name quote-service quote-service


L'option -d exécute le conteneur en mode détaché, ce qui signifie qu'il s'exécute en arrière-plan. L'option -p mappe le port 5000 du conteneur au port 5000 de la machine hôte, nous permettant d'accéder au service depuis la machine hôte.


L'option --name attribue un nom au conteneur, dans ce cas, quote-service. Le dernier argument est le nom et la balise de l'image, dans ce cas, quote-service.


Pour tester le service, nous pouvons utiliser un outil comme Curl ou Postman pour envoyer une requête GET au point final /quote du service qui doit renvoyer une citation aléatoire au format JSON. Par exemple, en utilisant Curl, nous pouvons exécuter la commande suivante dans le terminal :


Boucle http://localhost:5000/quote


Le résultat devrait ressembler à ceci :


JSON

"auteur": "Mark Twain",

"text": "Le secret pour avancer, c'est de commencer."



Docker Composer

Docker Compose fournit un moyen de définir et de gérer des microservices à l'aide d'un fichier YAML. Avec Docker Compose, vous pouvez facilement gérer des tâches telles que la création, le démarrage, l'arrêt et la mise à jour des conteneurs. Il offre également des fonctionnalités telles que la découverte de services, l'équilibrage de charge, la mise à l'échelle et la mise en réseau pour simplifier la gestion de vos microservices.


Pour utiliser Docker Compose, nous devons créer un fichier appelé docker-compose.yml dans le même répertoire que notre Dockerfile. Le fichier docker-compose.yml contiendra la configuration de nos microservices, comme l'image, les ports, les volumes, les réseaux et les dépendances.


Par exemple, supposons que nous souhaitions ajouter un autre microservice qui consomme le service de devis et affiche le devis sur une page Web. Le microservice sera écrit en Node.js et utilisera le framework Express. Le fichier docker-compose.yml sera le suivant :


Spécifiez la version du format de fichier Docker Compose : "3.9"


Définir les services (conteneurs) qui composent nos services applicatifs :

Le service de devis

service de devis :

 # Build the image from the Dockerfile in the current directory build: . # Expose the port 5000 ports: - "5000:5000" # Assign a name to the container container_name: quote-service


Le service Web

service Web:

 # Use the official Node.js image as the base image image: node:14 # Set the working directory to /app working_dir: /app # Copy the files from the web directory to the /app directory volumes: - ./web:/app # Install the required dependencies command: npm install && node app.js # Expose the port 3000 ports: - "3000:3000" # Assign a name to the container container_name: web-service # Specify the dependency on the quote service depends_on: - quote-service


Le répertoire Web contiendra deux fichiers : app.js et index.html. Le fichier app.js contiendra le code de notre service Web et le fichier index.html contiendra le code HTML de notre page Web. Le contenu des fichiers est le suivant :


Javascript

// app.js

const express = require("express");

const axios = require("axios");


const app = express();


// Servir le fichier index.html comme route racine

app.get("/", (req, res) => {

res.sendFile(__dirname + "/index.html");

});


// Définir une route pour le point de terminaison /quote

app.get("/quote", async (req, res) => {

essayer

 // Call the quote service and get a random quote const response = await axios.get("http://quote-service:5000/quote"); const quote = response.data; // Return the quote as a JSON object res.json(quote);


attraper (erreur)

 // Handle the error and return a status code


Dans cet article, nous avons exploré le monde des microservices et des applications natives ainsi que la manière dont Docker peut être utilisé pour les créer, les exécuter et les déployer. Tout au long de notre discussion, nous avons examiné les avantages et les défis liés à l'utilisation de microservices pour les applications.


Ceux-ci incluent des cycles de développement, une flexibilité et une évolutivité accrues, une tolérance aux pannes améliorée, une résilience, une sélection et une intégration technologiques plus faciles, une latence du réseau, etc.


De plus, nous nous sommes familiarisés avec les concepts de Docker, tels que les images, les volumes de conteneurs et les réseaux. Nous avons également étudié l'utilisation de Docker Compose pour définir et orchestrer des microservices. En cours de route, nous avons partagé quelques pratiques et conseils utiles pour utiliser efficacement Docker dans un environnement de microservices.


Cela inclut des suggestions pour les stratégies de journalisation des conventions de dénomination et la mise en œuvre de contrôles de santé.


Dans l'ensemble, cet article a fourni un aperçu des microservices en conjonction avec des applications natives tout en montrant comment Docker peut jouer un rôle crucial dans leur cycle de vie de développement.


Il existe des exemples et des mentions d'entreprises qui ont mis en œuvre avec succès des projets de microservices à l'aide de Docker, comme Netflix, Uber, Spotify et Airbnb. Ces organisations ont adopté les microservices et Docker comme moyen d'étendre les capacités de leurs applications, d'améliorer les performances et de fournir des services avec rapidité et fiabilité.


Si vous souhaitez approfondir leurs idées et leurs approches recommandées, vous pouvez explorer leurs articles de blog, leurs podcasts et leurs présentations.


Si vous souhaitez approfondir vos connaissances sur les microservices et Docker, des ressources et des opportunités d'apprentissage sont à votre disposition. Ceux-ci incluent des livres, des cours, des tutoriels et de la documentation. Voici quelques recommandations :


« Microservices avec Docker, Flask et React » ; Ce livre fournit des conseils sur la création, le test et le déploiement de microservices à l'aide de Python, Flask, React et Docker.


« Docker et Kubernetes ; Le guide complet » ; Ce cours vous permet d'acquérir les compétences nécessaires pour développer, exécuter et déployer des applications à l'aide de Docker et Kubernetes.


« Créer un microservice simple à l'aide de Docker et Flask » ; Dans ce didacticiel, vous apprendrez à créer un microservice à l'aide de Docker et Flask. Il couvre également les techniques de test et de débogage utilisant des outils tels que Postman et VS Code.


« Documentation Docker » ; Pour plus d'informations sur tout ce qui concerne Docker, des instructions d'installation aux détails de configuration, cette documentation sert de ressource.


Explorez ces options pour approfondir le monde des microservices aux côtés de Docker.