\newpage Introduction ============ Notre application du jour ------------------------- Aujourd'hui, nous allons travailler avec un mineur de pépites ... de chocolat ! De véritables cookies sont à gagner pour celles et ceux qui auront amassés le plus de pépites avant la pause ! ![ChocoMiner](dockercoins-diagram.svg) Fier de respecter le paradigme des micro-services, notre ChocoMiner fonctionne 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, * si le condensat respecte les contraintes pour obtenir une pépite, on est content, * et on recommence, ainsi de suite, pour avoir le maximum de pépites. Chaque seconde, le `worker` envoie à `influxdb` le nombre de hashs et de pépites qu'il a ainsi pu obtenir. Une interface graphique (`chronograf`) permet d'interroger la base de données pour afficher des statistiques. Obtenir l'application ---------------------
```shell git clone git://git.nemunai.re/chocominer.git ```
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 services à partir de leurs noms. Dans Kubernetes, le même principe s'applique : dans aucun cas, nous ne devrions coder en dur des adresses IP. Il convient d'utiliser au maximum le système de DNS, car les IP sont susceptibles de changer ! Tester avec `docker-compose` ---------------------------- `docker-compose up` Se connecter à chronograf sur le port qui va bien Monté en puissance ------------------ `docker-compose up -d --scale worker=2` Ok :-) `docker-compose up -d --scale worker=10` Argh :-( 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. `rng` : `httping -c 3 localhost:8001` `hasher` : `httping -c 3 localhost:8002` Il semblerait que notre application `rng` nécessite d'être exécuté en parallèle ! Mais on ne peut pas faire de répartition de charge facilement avec `docker-compose` !