Semaine 7 · Laboratoire

Un service,
une instance

Monter, mesurer, séparer, remesurer : le laboratoire de l'Application distribuée (Module 2).

420-5A4-MT · Acte 6 · La séparation
Laboratoire Séparation · Entreprise

Cornucopia · Espace Membres & Commandes en Direct

Flora et Hazel ouvrent le portail interactif des abonnés : gestion du profil, ajouts au panier et calcul des points de fidélité.
Projet de la Ferme

Permettre à chaque membre de modifier son panier de légumes en temps réel : chaque clic génère une écriture ou une lecture personnalisée en base de données MySQL.

Laboratoire Séparation · Achalandage

1 Million de requêtes BDD : séparer le Web et la BDD !

Sur le terrain

Niveau de Fréquentation

1 000 000 requêtes BDD / jour

⚠️ CONGESTION DISQUE & CPU !

MySQL consomme toute la mémoire RAM, provoquant des erreurs "Database Connection Error" pour les clients en ligne.

ANALYSE

Rapport du terrain

Le Problème Système

Architecture tout-en-un incapable d'absorber la séparation des charges CPU (web) et I/O (BDD).

✅ Solution trouvée

Isoler MySQL sur un serveur dédié, relier Apache via le réseau interne, et mesurer le gain avec un test de charge JMeter !

Laboratoire Séparation · Mission

La mission du jour

À la fin de la séance, vous aurez :

Cet atelier suit l'énoncé officiel Laboratoires Application distribuée (Module 2, 5 points, en équipe de 3 mais démonstration par étudiant). Minimum 2 commits pertinents en classe cette semaine.

Laboratoire Séparation · Devis

WordPress et MySQL : une instance, puis deux

5 points Git : /votre-depot/separation/

Partie 1 : tout sur une seule instance. Mettez en place, en fonction du matériel de cours, une instance unique qui héberge les deux services principaux :

Partie 2 : 1 service = 1 instance. Reconstruisez l'ensemble avec chaque service principal sur une instance distincte (mysql10, http20), selon la convention d'adressage.

Mesures (pour chaque partie) : test de charge BRUTAL avec JMeter :

Barème : guide d'installation (2), fichiers de configuration (1), tableau rempli (1), captures d'écran (1).

Minimum 2 commits pertinents en classe durant la semaine 7; le reste avant le cours de la semaine 8. Ce laboratoire doit être entièrement terminé pour le début de la semaine 8.

Laboratoire Séparation · Topologie Partie 1

WordPress et MySQL sur une seule VM

Topologie : un client 192.168.56.2 accède à une seule machine virtuelle WORDPRESS-MYSQL qui héberge Apache, WordPress et MySQL
Laboratoire Séparation · Consignes Partie 1

WordPress et MySQL sur une seule VM

La mise en place

  • Mettre en place un ensemble de serveurs, en fonction du matériel de cours, ayant les caractéristiques suivantes :
  • Chaque serveur provient d'une machine virtuelle de base nommée UbuntuServerAlpha.
  • Système d'exploitation : Ubuntu Server, mémoire vive : 1 Gb, espace disque : 12 GB.
  • hostname : SERVICE_PRINCIPAL + 3 derniers chiffres de l'IP (exemple : http20, mysql30...).
  • Chaque service principal est sur la même machine virtuelle : HTTP (apache2) et MySQL.
  • Un WordPress avec au moins 2 articles (image et texte) présenté dans un thème qui tient en une seule page.
  • Permettant l'accès à l'URL hébergée sur le serveur virtuel via le navigateur du système hôte.

Le test de charge BRUTAL

  • Faire un test de charge BRUTAL avec JMeter pour documenter les performances de votre ensemble de serveurs actuel.
  • Faire une seule capture d'écran statique de la commande top exécutée en ssh de tous les serveurs actifs après environ 10 secondes de test (performances_partie_1_10secondes.png).
  • La même chose après environ 60 secondes de test (performances_partie_1_60secondes.png).
  • Noter dans un tableau la valeur idle du processeur (id) pour chaque serveur.
  • Noter dans un tableau la valeur moyenne (temps moyen de réponse) indiquée par JMeter.
Laboratoire Séparation · Topologie Partie 2

1 service = 1 serveur (VM)

Topologie : un client 192.168.56.10 accède à la machine virtuelle HTTP (Apache et WordPress) qui communique avec la machine virtuelle MYSQL 192.168.56.20
Laboratoire Séparation · Consignes Partie 2

1 service = 1 serveur (VM)

La mise en place

  • Mettre en place un ensemble de serveurs, en fonction du matériel de cours, ayant les caractéristiques suivantes :
  • Chaque serveur provient d'une machine virtuelle de base nommée UbuntuServerAlpha.
  • Système d'exploitation : Ubuntu Server, mémoire vive : 1 Gb, espace disque : 12 GB.
  • hostname : SERVICE_PRINCIPAL + 3 derniers chiffres de l'IP (exemple : http20, mysql30...).
  • Chaque service principal est sur une machine virtuelle distincte : HTTP (apache2) et MySQL.
  • Un WordPress avec au moins 2 articles (image et texte) présenté dans un thème qui tient en une seule page.
  • Permettant l'accès à l'URL hébergée sur le serveur virtuel via le navigateur du système hôte.

Le test de charge BRUTAL

  • Faire un test de charge BRUTAL avec JMeter pour documenter les performances de votre ensemble de serveurs actuel.
  • Faire une seule capture d'écran statique de la commande top exécutée en ssh de tous les serveurs actifs après environ 10 secondes de test (performances_partie_2_10secondes.png).
  • La même chose après environ 60 secondes de test (performances_partie_2_60secondes.png).
  • Noter dans un tableau la valeur idle du processeur (id) pour chaque serveur.
  • Noter dans un tableau la valeur moyenne (temps moyen de réponse) indiquée par JMeter.
Laboratoire Séparation · Étape 1

Préparer ses instances

Selon votre choix d'infrastructure (VM VirtualBox, DinD ou VPS), préparez les instances de la semaine :

Laboratoire Séparation · Étape 2 · Partie 1

Tout sur une seule instance

Vous avez déjà toutes les techniques : c'est le WordPress du cours de serveur, remonté proprement. Le but de cette partie n'est pas la nouveauté : c'est d'avoir un point de comparaison mesurable.

Laboratoire Séparation · Étape 3

Premier test de charge BRUTAL

secondes / serveurWORDPRESS-MYSQLtemps moyen de réponse (seconde)
10 secondes
60 secondes
Laboratoire Séparation · Étape 4 · Partie 2

Séparer : 1 service = 1 instance

# sur mysql10 : ecouter sur le reseau
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = ADRESSE_DE_MYSQL10
# creer l'utilisateur distant pour http20, puis :
sudo systemctl restart mysql
# sur http20 : pointer WordPress vers la base distante
sudo nano /var/www/html/wordpress/wp-config.php
define('DB_HOST', 'ADRESSE_DE_MYSQL10');

Vérification : le site répond depuis l'hôte, les articles sont là. Si la page est blanche, les journaux d'Apache et l'utilisateur MySQL distant sont vos premiers suspects.

Laboratoire Séparation · Étape 5

Remesurer, comparer, conclure

secondes / serveurHTTPMYSQLtemps moyen de réponse (seconde)
10 secondes
60 secondes
Laboratoire Séparation · Barème

WordPress et MySQL sur une seule VM
1 service = 1 serveur (VM)

Dans Git : /votre-depot/separation/
  • (2 points) sa version de son guide d'installation
  • (1 point) les fichiers de configurations utilisés
  • (1 point) le tableau rempli
  • (1 point) les captures d'écran

Un minimum de 2 commits pertinents doit être effectué en classe durant la semaine 1, les autres devant être complétés avant le cours de la semaine 2. Ce laboratoire doit être entièrement terminé pour le début de la semaine 2.

Laboratoire Séparation · Avant de partir

Livrables et devoir

La semaine prochaine, l'acte 7 : tout passe par une seule entrée, un seul chemin. On double tout - deux Varnish, deux HAProxy, une IP virtuelle - et on éteindra le maître en pleine charge pour voir le site survivre.