Architectures Orientées Micro-Services
//page WIP//
Dans ce projet, nous avons étudié les architectures micro-services que ce soit niveau théorique, ou niveau pratique (via Docker).
Dans la théorie
Introduction
Le terme d'architectures micro-services est apparu aux alentours de 2011 lors d'un workshop sur les différentes architectures logicielles.
Lors de leur invention, cela fut une révolution dans la création des services, les rendant plus rapides et plus économes à grande échelle que les architectures orientées services.
Architecture logicielle
- Voir "Architecture Logicielle" sur wikipédia.
Une architecture logicielle décrit l'organisation globale d'un réseau, que ce soit les échanges ou la taille des entités.
Architecture orientée micro-services
Une architecture orientée micro-services se base sur l'architecture du Web, dans le sens où il n'y a pas de serveur centralisé. Chaque micro-service est un serveur, que l'on nomme conteneur, et ces conteneurs communiquent entre-eux, afin d'aboutir à ce que l'on recherche.
Cette architecture permet un travail à équipe réduite, car l'on assigne une équipe à un micro-service, qui ne nécessite pas de connaître tous les langages, mais uniquement les langages du micro-service sur lequel elle travaille.
De plus, une mise à jour d'une fonctionnalité ne nécessite que la mise à jour du conteneur en question, et non de toute l’infrastructure comme sur une architecture monolithique.
Enfin, si une surcharge se produit sur un micro-service car beaucoup d'utilisateurs le demande, l'application peut dupliquer ce service sans modifier l'architecture, car les conteneurs prennent source sur le même micro-service et donc gardent en mémoire les conteneurs où les informations sont stockées.
Utilisation en entreprise
- Entreprises de vente de masse (Amazon)
- Sites de Streaming Vidéo ou Audio (Netflix ou Deezer)
- Sites d'information utilisateur dans le domaine du transport (comme la SNCF ou Air France)
- Applications qui vendent des services en général (comme Uber ou Google Maps)
Comparatif avec les architectures les plus communes
Architectures | Monolithique | Orientée Services | Orientée Micro-Services |
---|---|---|---|
Forme | Une seule grosse application contenant toutes les fonctions | Une application par type de fonction | Une application par fonction |
Nombres de langages | Un seul pour toute l'application afin de faciliter la communication | Un nombre défini lors de la création du réseau | Autant de langages que l'on veut |
Moyen de communication | Par les données | Par les services | Par les services |
Force du couplage | Fort | Moyen | Faible |
Monolithique | Micro-services |
---|---|
Dans la Pratique (Docker)
Prérequis
- Avoir un système d'exploitation linux (soit une machine virtuelle avec ubuntu de préférence, soit physique)
- Avoir des connaissances de base en bash et en python
Installation
Pour installer Docker, il faut :
- Ouvrir le terminal de commandes
- Entrer cette commande :
sudo apt-get update && sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Installer un conteneur depuis DockerHub
Pour installer un conteneur depuis DockerHub sur notre machine via Docker, il faut :
- Ouvrir le terminal de commandes
- Entrer la commande suivante :
docker pull NOM_DE_L_IMAGE
Exemple :
docker pull romain22222/friendlyhello:Test
permet de télécharger l'image romain22222/friendlyhello:Test
Utiliser un conteneur
- Ouvrir le terminal de commandes
- Entrer la commande suivante :
docker run -d -p NumPort NOM_IMAGE
Ici, run
permet de lancer un conteneur à partir d'une image.
-d
permet de faire tourner le conteneur en arrière plan.
-p NumPort
permet de définir le port de votre machine sur lequel le conteneur est relié. Le port est de la forme #A:#B où #A correspond au port de la machine, et #B le port que Docker écoute.
Créer un conteneur
Pour créer un conteneur, il faut :
- Choisir un dossier ou l'on va créer l'image pour ce conteneur
- Créer un fichier nommé
Dockerfile
(Voir comment créer un fichier Dockerfile en-dessous) - Créer votre projet dans le dossier
- Ajouter un fichier requirements.txt dans lequel vous devez mettre tous les librairies non-natives pour python (au moins mettre Redis et Flask)
- Sauvegarder vos fichiers
- Lancer la commande suivante :
docker build -t NOM_DU_CONTENEUR CHEMIN
Exemple de fichier Dockerfile :
FROM python:2.7-alpine RUN apk add --update \ ca-certificates \ && update-ca-certificates \ && rm -rf /var/cache/apk/* COPY requirements.txt /requirements.txt RUN pip install -r /requirements.txt WORKDIR /app COPY . ./ EXPOSE 5000 CMD ["python", "app.py"]
FROM NOM_IMAGE_BASE
permet de partir d'une image docker existante (sur la machine ou sur dockerhub)RUN COMMANDE
permet de faire les mises à jour nécessaires et les installations hors python afin de faire tourner le conteneurCOPY CHEMIN1 CHEMIN2
fait une copie d'un fichier ou dossier vers un autre emplacementWORKDIR CHEMIN
donne le nom du chemin où va travailler la machineEXPOSE NOM_PORT
permet d'ouvrir un port de votre machine afin que le conteneur puisse communiquer (généralement 5000 pour Docker)CMD ["python", "NOM_FICHIER_PRINCIPAL.py"]
fait tourner python avec le fichier de lancement de votre conteneur.