Save tuto corrections

This commit is contained in:
nemunaire 2022-02-24 20:43:43 +01:00
commit 10448a6c8d
115 changed files with 1423 additions and 1289 deletions

View file

@ -1,23 +1,9 @@
\newpage
Introduction
============
Aujourd'hui, nous allons travailler avec un mineur de pépites ... de chocolat !
<!--Alors, on se fait un bon thé, on prend sa boîte de gâteaux pour tenir le coup,
et c'est parti !-->
Comme c'est notre dernier cours ensemble, de véritables cookies sont à
gagner pour celles et ceux qui auront amassé le plus de pépites d'ici
la fin du TP[^cookies] ! Vous pouvez suivre votre progression sur
[cette page](https://virli.nemunai.re/scores.html).
[^cookies]: Dans la limite des stocks disponibles.
\
![ChocoMiner](dockercoins-diagram.svg)
Fier de respecter le paradigme des micro-services, notre ChocoMiner fonctionne
ainsi :
ainsi :
* le `worker` demande à `rng` de générer un grand nombre aléatoire,
* le `worker` envoie ce grand nombre au `hasher`, qui lui retourne un hash,
@ -31,8 +17,9 @@ Une interface graphique (`chronograf`) permet d'interroger la base de données
pour afficher des statistiques.
Obtenir l'application
---------------------
### Obtenir l'application
Les micro-services sont regroupés sur le dépôt suivant :
<div lang="en-US">
```shell
@ -41,57 +28,64 @@ git clone https://git.nemunai.re/srs/chocominer.git
</div>
Rappels sur la découverte de services
-------------------------------------
### Rappels sur la découverte de services
Dans Docker, nous avions vu que nous n'avions pas besoin de connaître les IP
des conteneurs : un serveur DNS nous permettait de se connecter aux différents
des conteneurs : un serveur DNS nous permettait de se connecter aux différents
services à partir de leurs noms.
Dans Kubernetes, le même principe s'applique : dans aucun cas, nous ne devrions
Dans Kubernetes, le même principe s'applique : dans aucun cas, nous ne devrions
inscrire en dur des adresses IP. Il convient d'utiliser au maximum le système
DNS, car les IP sont susceptibles de changer !
DNS, car les IP sont susceptibles de changer !
Tester avec `docker-compose`
----------------------------
### Tester avec `docker-compose`
<div lang="en-US">
```bash
docker-compose up
```
</div>
Une fois le docker-compose lancé, nous devrions pouvoir accéder à l'interface
de chronograf pour voir l'avancement de recherche de pépites :
Une fois le `docker-compose` lancé, nous devrions pouvoir accéder à l'interface
de chronograf pour voir l'avancement de recherche de pépites :
<http://localhost:8888/sources/1/dashboards/1>
Montée en puissance
-------------------
### Montée en puissance
Avec `docker-compose`, on peut facilement monter en puissance. Commençons en
augmentant doucement le nombre de `worker`, pour voir si cela a un impact :
<div lang="en-US">
```bash
docker-compose up -d --scale worker=2
```
</div>
On remarque que le nombre de hashs calculés augmente ! Génial !
On remarque que le nombre de hashs calculés augmente ! Génial ! Continuons
d'augmenter alors :
<div lang="en-US">
```bash
docker-compose up -d --scale worker=10
```
</div>
Mais ça atteint un palier au bout d'un moment...
Mais l'augmentation n'est plus aussi nette, on semble atteindre un palier au
bout d'un moment...
Identification du goulot d'étranglement
---------------------------------------
### Identification du goulot d'étranglement
De nombreux outils existent pour réaliser des tests de performance, essayons
`httping` sur nos différents services pour voir si un service ne serait pas
la cause des ralentissements :
la cause des ralentissements :
- Testons `rng` : `httping -c 3 localhost:8001`,
- puis testons `hasher` : `httping -c 3 localhost:8002`.
- Testons `rng` : `httping -c 3 localhost:8001`,
- puis testons `hasher` : `httping -c 3 localhost:8002`.
Il semblerait que notre application `rng` nécessite d'être exécutée en parallèle
! Mais on ne peut pas faire de répartition de charge facilement avec
`docker-compose` !
Il semblerait que notre application `rng` nécessite d'être exécutée en
parallèle ! Mais on ne peut pas faire la répartition de charge facilement avec
`docker-compose` !