Spelling
This commit is contained in:
parent
79860abe78
commit
c3946c1308
@ -19,7 +19,7 @@ En tant que *DevOps*, j'ai été amené à concevoir un système répondant aux
|
||||
besoins émis par les développeurs d'avoir un serveur de jeu dans des versions
|
||||
différentes en fonction de leur rôle au sein de l'équipe.
|
||||
|
||||
J'ai aussi effectué les tests de monté en charge à la demande de l'équipe en
|
||||
J'ai aussi effectué les tests de montée en charge à la demande de l'équipe en
|
||||
charge du serveur et ai participé aux réflexions de son développement afin
|
||||
d'intégrer au plus tôt les remarques concernant la mise à l'échelle et la
|
||||
sécurité.
|
||||
|
@ -19,7 +19,7 @@ tout ce qui gravite autour du serveur de jeu :
|
||||
\vspace{1em}
|
||||
|
||||
D'autre part, j'ai également permis d'éclaircir certain points encore
|
||||
obscurs tel que l'authentification, le système de chat ou encore
|
||||
obscurs tels que l'authentification, le système de chat ou encore
|
||||
l'architecture de déploiement et de mise à jour. Cela sera mis en
|
||||
place lorsque les développeurs seront plus avancés sur ces points.
|
||||
|
||||
@ -27,7 +27,7 @@ place lorsque les développeurs seront plus avancés sur ces points.
|
||||
## Intérêt personnel
|
||||
|
||||
Ce stage m'a permis de découvrir et d'approfondir de nombreux aspects
|
||||
tel que le déploiement automatique ou la virtualisation légère, qui
|
||||
tels que le déploiement automatique ou la virtualisation légère, qui
|
||||
sont des domaines porteurs pour l'avenir. En effet, bien que plutôt
|
||||
ancienne dans les environnements Solaris et BSD, l'utilisation des
|
||||
conteneurs est quelque chose d'assez nouveau au sein du noyau Linux et
|
||||
@ -38,5 +38,5 @@ bibliothèques et technologies libres, et suis ravi d'avoir pu
|
||||
contribué au nom de l'entreprise au développement ou à l'amélioration
|
||||
de plusieurs projets.
|
||||
|
||||
Enfin, la diversité du travail effectué durant ce stage fût
|
||||
Enfin, la diversité du travail effectué durant ce stage fut
|
||||
particulièrement gratifiant.
|
||||
|
@ -33,7 +33,7 @@ Informatique en nuage
|
||||
Journaux
|
||||
|
||||
: Liste d'événements survenus au sein d'un programme. En général on
|
||||
distingue plusieurs niveau d'enregistrement en fonction de
|
||||
distingue plusieurs niveaux d'enregistrement en fonction de
|
||||
l'utilisation faite du programme : par exemple, en production, on
|
||||
ne va enregistrer que les erreurs, tandis que dans un
|
||||
environnement de développement, on va enregistrer les
|
||||
@ -47,7 +47,7 @@ Load-balancer
|
||||
|
||||
Machine virtuelle
|
||||
|
||||
: Simulation complète d'une machine physique effectué par un programme de
|
||||
: Simulation complète d'une machine physique effectuée par un programme de
|
||||
virtualisation (hyperviseur ou émulateur) dans le but de tester un système
|
||||
ou pour isoler l'exécution de programmes.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
## Présentation de l'entreprise
|
||||
|
||||
Novaquark est un studio de jeux vidéo créé en janvier 2014 par Jean-Christophe
|
||||
\textsc{Baillie}. Il avait précédemment monté la start-up de robotique Gostai,
|
||||
\textsc{Baillie}. Il avait précédemment montée la start-up de robotique Gostai,
|
||||
rachetée par Aldebaran en 2012.
|
||||
|
||||
L'équipe se concentre sur la conception d'un jeu vidéo en ligne massivement
|
||||
@ -74,7 +74,7 @@ nombre de *recettes*. Les premières *recettes* concernaient le déploiement des
|
||||
machines de monitoring.
|
||||
|
||||
Par la suite, lorsque le serveur a été suffisamment fonctionnel, j'ai eu à
|
||||
concevoir le système de test de monté en charge.
|
||||
concevoir le système de test de montée en charge.
|
||||
|
||||
De nombreuses tâches annexes m'ont également été attribuées tout au long du
|
||||
stage en particulier pour connaître mon avis d'administrateur système quant à
|
||||
|
@ -15,17 +15,17 @@ résultats ainsi que leur critique.
|
||||
### Montée en compétences
|
||||
|
||||
Une fois les outils sélectionnés suivants les critères établis au travers de
|
||||
l'étape précédente, il a fallu monté en compétence sur ceux-ci.
|
||||
l'étape précédente, il a fallu montée en compétence sur ceux-ci.
|
||||
|
||||
### Développements et tests de monté en charge
|
||||
### Développements et tests de montée en charge
|
||||
|
||||
À la suite de cet apprentissage, j'ai effectués des tests afin de valider les
|
||||
choix qui avaient été fait, afin d'en tirer les conclusions.
|
||||
À la suite de cet apprentissage, j'ai effectué des tests afin de valider les
|
||||
choix qui avaient été faits, afin d'en tirer les conclusions.
|
||||
|
||||
|
||||
## Respect des délais et critique de ce découpage
|
||||
|
||||
À de nombreuses reprises, le planning initialement prévu n'a pas pu être
|
||||
À de nombreuses reprises, le planning initialement prévu n'a pu être
|
||||
respecté afin de faire face aux besoins qui se sont matérialisés à divers
|
||||
moments. Ainsi, les parties concernant l'intégration de données métriques
|
||||
dans le serveur, utile dans le long terme, a été repoussé afin de se concentrer
|
||||
@ -34,7 +34,7 @@ serveur de jeu aux développeurs du client.
|
||||
|
||||
\vspace{1em}
|
||||
|
||||
Je n'ai pas de critique à formuler quant à ce découpage, somme tout très
|
||||
Je n'ai pas de critique à formuler quant à ce découpage, somme toute très
|
||||
classique. Avec les objectifs globaux fixés par l'équipe, j'ai pu m'organiser
|
||||
de telle sorte que chaque étape coïncide avec les besoins de chacun.
|
||||
|
||||
@ -44,14 +44,14 @@ de telle sorte que chaque étape coïncide avec les besoins de chacun.
|
||||
Le développement du jeu suit une méthodologie agile : cela a commencé par
|
||||
Kaban, pour arriver aujourd'hui à Scrum.
|
||||
|
||||
Deux fois par semaines, toute l'équipe fait le point sur l'avancée de
|
||||
Deux fois par semaine, toute l'équipe fait le point sur l'avancée de
|
||||
chacun. C'est l'occasion de recentrer les priorités.
|
||||
|
||||
Tous les jours, nous sommes tenu d'envoyer un petit compte-rendu de nos
|
||||
Tous les jours, nous sommes tenus d'envoyer un petit compte-rendu de nos
|
||||
activités de la journée, en n'oubliant pas d'indiquer les difficultés que l'on
|
||||
peut rencontrer. En fonction de la difficulté, un membre de l'équipe peut être
|
||||
amené à donner son avis sur le problème s'il l'a déjà rencontré par le passé.
|
||||
|
||||
Le soir est toujours une bonne occasion de discuter avec mon maître de stage :
|
||||
que ce soit pour se tenir mutuellement informé de nos activités ou pour faire
|
||||
des points sur les développements à venir.
|
||||
que ce soit pour se tenir mutuellement informés de nos activités ou pour faire
|
||||
le point sur les développements à venir.
|
||||
|
@ -6,7 +6,7 @@ Les serveurs du jeu seront regroupés au sein d'une structure permettant
|
||||
facilement d'adapter leur nombre en fonction du besoin (fortement en
|
||||
corrélation avec le nombre de joueurs inscrits et connectés).
|
||||
|
||||
Depuis quelques années, un grand nombre de plate-forme se développent,
|
||||
Depuis quelques années, un grand nombre de plates-forme se développent,
|
||||
fournissant un service clef en main ; mais des solutions libres sont également
|
||||
disponibles lorsque l'on désire s'occuper du service manuellement.
|
||||
|
||||
@ -53,7 +53,7 @@ dans le cadre de cette analyse.
|
||||
|
||||
### Discussions complémentaires
|
||||
|
||||
Organisé par l'incubateur à destination des start-up intéressées, une
|
||||
Organisée par l'incubateur à destination des start-up intéressées, une
|
||||
journée nous a permis de discuter avec des architectes d'Amazon afin
|
||||
de connaître leur avis sur la structure que nous envisagions et
|
||||
comment cela pourrait s'intégrer au sein de l'offre d'Amazon.
|
||||
@ -130,7 +130,7 @@ plusieurs machines virtuelles d'une même machine physique, dédiée aux tests.
|
||||
|
||||
Pour les développeurs, l'installation de l'environnement de développement n'est
|
||||
pas toujours facile (surtout s'ils doivent alterner entre deux systèmes
|
||||
d'exploitation différent) et requiert une certaine standardisation (version
|
||||
d'exploitation différent) et requiert une certaine standardisation (versions
|
||||
précises de certaine bibliothèques, paquet particulier). La virtualisation
|
||||
permet de leur fournir un environnement clef en main qu'ils n'ont pas à
|
||||
maintenir.
|
||||
@ -160,7 +160,7 @@ car le logiciel Boot2Docker s'intègre uniquement à cette solution.
|
||||
Globalement, les technologies de virtualisation de type hyperviseur n'ont plus
|
||||
guère d'avantages face aux conteneurs : ils permettent de garantir un niveau de
|
||||
sécurité et d'isolation quasi-identique, sans avoir la lourdeur de gestion
|
||||
d'autant de noyau que l'on veut lancer de machines.
|
||||
d'autant de noyaux que l'on veut lancer de machines.
|
||||
|
||||
\vspace{1em}
|
||||
|
||||
@ -224,13 +224,13 @@ permettra de contrôler l'accès aux différents services du jeu :
|
||||
|
||||
L'implémentation d'une solution maison est encore une fois
|
||||
envisageable. Elle n'a pas été retenue pour éviter d'avoir à gérer les
|
||||
vulnérabilités qui pourraient être découverte une fois le jeu lancé.
|
||||
vulnérabilités qui pourraient être découvertes une fois le jeu lancé.
|
||||
|
||||
\vspace{1em}
|
||||
|
||||
D'autre part, étant donné que plusieurs services devront pouvoir
|
||||
s'authentifier en un point central, cela évite de fournir un travail
|
||||
pour rendre compatible avec une solution maison les logiciels
|
||||
pour rendre compatibles avec une solution maison les logiciels
|
||||
compatibles avec des solutions d'authentification standards.
|
||||
|
||||
### Propositions retenues
|
||||
@ -301,7 +301,7 @@ pour y faire des améliorations.
|
||||
\vspace{1em}
|
||||
|
||||
En sus de ce programme de relevé de métrique, il m'a été demandé de réaliser un
|
||||
tableau de board permettant de visualiser en temps réel les données
|
||||
tableau de bord permettant de visualiser en temps réel les données
|
||||
compilées. Le premier tableau de bord a été réalisé directement avec le serveur
|
||||
web de la base de données allié à la bibliothèque JavaScript *Cubism* (voir
|
||||
figure \ref{fig:img/cubism.png}) : il permet de visualiser en un coup d'oeil
|
||||
@ -335,19 +335,19 @@ Les recettes qu'il a été nécessaire de développer sont les suivantes :
|
||||
- **serveur de monitoring :** chaque serveur déployé assure son rôle grâce à la
|
||||
mise à disposition d'une base de données InfluxDB et à des outils permettant
|
||||
de visualiser la charge. Afin de toujours connaître l'état en temps réel
|
||||
l'état des serveurs de jeu, chaque serveur configuré est inclus au sein d'un
|
||||
des serveurs de jeu, chaque serveur configuré est inclus au sein d'un
|
||||
cluster de haute-disponibilité.
|
||||
- **serveurs de base de données :** pour l'instant un seul type de base de
|
||||
données est utilisé : Redis. La recette doit permettre de déployer un serveur
|
||||
au sein d'un cluster Redis. À terme, un second type de base de données devra
|
||||
être déployée afin de disposer de stockage permanent.
|
||||
être déployé afin de disposer de stockage permanent.
|
||||
- **serveurs de jeu :** le serveur étant décomposé en trois parties, trois
|
||||
recettes différentes sont nécessaires, en fonction du type de serveur que
|
||||
l'on veut déployé.
|
||||
- **machine virtuelle de développement :** ces machines mises à disposition des
|
||||
développeurs doivent leur permettre de tester le jeu avec un serveur qui leur
|
||||
est fournis grâce à cette machine virtuelle. Elle contient tous les
|
||||
composants nécessaire au bon fonctionnement du serveur.
|
||||
est fournis grâce à ces machines virtuelles. Elles contiennent tous les
|
||||
composants nécessaires au bon fonctionnement du serveur.
|
||||
- **serveur de machines virtuelles :** il s'agit de configurer un serveur
|
||||
fraîchement arrivé pour lui permettre d'exécuter des conteneurs (serveur de
|
||||
jeu, site web, etc.).
|
||||
@ -368,7 +368,7 @@ permettant de prévenir diverses attaques comme le DNS et l'ARP-poisoning).
|
||||
|
||||
Certaines machines disposeront de deux interfaces réseau : une publique et une
|
||||
privée. Un plugin pour Ansible a donc été développé afin de gérer la présence
|
||||
de ces deux cartes, permettant d'adapter automatique les configurations des
|
||||
de ces deux cartes, permettant d'adapter automatiquement les configurations des
|
||||
logiciels en fonction de leur besoin (usage interne ou externe au cluster).
|
||||
|
||||
\vspace{1em}
|
||||
@ -422,7 +422,7 @@ jeu global (lorsqu'il est question de faire des tests à plusieurs).
|
||||
|
||||
Le temps passé au développement est primordial comparé au temps passé à tenter
|
||||
de configurer l'environnement à partir de la documentation. Une solution clef
|
||||
en main où le moins de connaissances préalables sont nécessaire est un plus.
|
||||
en main où le moins de connaissances préalables nécessaires est un plus.
|
||||
|
||||
### Propositions retenues
|
||||
|
||||
@ -434,7 +434,7 @@ Pour la mise en place de ce processus, il a été retenu la mise à disposition
|
||||
* de conteneurs associés à des scripts d'automatisation ;
|
||||
* d'un conteneur sur une machine dédiée : l'équipe serveur s'occupe de mettre
|
||||
en place les conteneurs en fonction des besoins de chacun, sans avoir à gérer
|
||||
les problèmes lié à la configuration personnelle des machines de chacun.
|
||||
les problèmes liés à la configuration personnelle des machines de chacun.
|
||||
|
||||
### Difficultés
|
||||
|
||||
@ -448,8 +448,8 @@ et centraliser les principales actions.
|
||||
|
||||
%%fimage(img/ncurses-dev.png, 0.67, "Interface Curses de contrôle du serveur")
|
||||
|
||||
Dans un soucis d'harmonisation des technologies, Docker a été retenu dans un
|
||||
second temps pour répondre également aux problématiques de déploiement futurs.
|
||||
Dans un souci d'harmonisation des technologies, Docker a été retenu dans un
|
||||
second temps pour répondre également aux problématiques de déploiements futurs.
|
||||
|
||||
\vspace{1em}
|
||||
|
||||
@ -480,7 +480,7 @@ les journaux du serveurs.
|
||||
|
||||
\newpage
|
||||
|
||||
## Conception de l'architecture de test de monté en charge
|
||||
## Conception de l'architecture de test de montée en charge
|
||||
|
||||
### Objectifs
|
||||
|
||||
@ -498,14 +498,14 @@ machines virtuelles exécutant chacune plusieurs clients.
|
||||
|
||||
### Résultats obtenus
|
||||
|
||||
Dans un premier temps, la monté en charge montrait que le serveur ne permettait
|
||||
Dans un premier temps, la montée en charge montrait que le serveur ne permettait
|
||||
pas de dépasser 250 joueurs. Au delà, l'analyse qui s'en est suivie a montré
|
||||
que le scheduler de la bibliothèque d'acteurs que nous utilisions ne faisais
|
||||
pas correctement son travail : il en résultait une surcharge des canaux de
|
||||
diffusion, entraînant le plantage du serveur.
|
||||
|
||||
Ce problème a été corrigé dans la version suivante de la bibliothèque
|
||||
d'acteurs. La nouvelle monté en charge a permis d'atteindre cette fois plus de
|
||||
d'acteurs. La nouvelle montée en charge a permis d'atteindre cette fois plus de
|
||||
800 joueurs simultanément, à ce moment, c'était bien le CPU qui était limitant
|
||||
et il n'en résultat pas de plantage du serveur.
|
||||
|
||||
@ -550,7 +550,7 @@ message vers la base de données.
|
||||
### Objectifs
|
||||
|
||||
Précédemment hébergé auprès d'une société d'hébergement mutualisé permettant de
|
||||
modifier facilement de contenu du site ; nous avons été contraint de le refaire
|
||||
modifier facilement le contenu du site ; nous avons été contraint de le refaire
|
||||
et de l'héberger nous-même afin de pouvoir l'adapter plus facilement à nos
|
||||
besoins.
|
||||
|
||||
@ -563,7 +563,7 @@ trouve).
|
||||
\vspace{1em}
|
||||
|
||||
Le serveur web `nginx` est utilisé, allié au service `php-fpm`. Tous deux ont
|
||||
été configurés afin de permettre à un millier d'utilisateur de visionner le
|
||||
été configurés afin de permettre à un millier d'utilisateurs de visionner le
|
||||
site en même temps.
|
||||
|
||||
\vspace{1em}
|
||||
@ -597,13 +597,13 @@ d'un conteneur préalablement, de l'envoyer sur un dépôt d'images (contenant
|
||||
toutes les dernières versions des conteneurs). Ensuite, progressivement, on
|
||||
coupe les serveurs de jeu, puis on lance la nouvelle image. En cas de problème
|
||||
lors du déploiement, l'ancienne image persiste sur les serveurs jusqu'à ce que
|
||||
l'on lance un nettoyage. Cela permet de relancer la version stable précédent
|
||||
l'on lance un nettoyage. Cela permet de relancer la version stable précédente
|
||||
très rapidement en cas de problème.
|
||||
|
||||
\vspace{1em}
|
||||
|
||||
Précédemment, il était plutôt question d'effectuer un déploiement plus
|
||||
classique : une recette Ansible aurait éteint un petit groupe de serveur, puis
|
||||
classique : une recette Ansible aurait éteint un petit groupe de serveurs, puis
|
||||
aurait procédé à la migration avant de relancer le nouveau serveur.
|
||||
|
||||
Les serveurs sont mis à jour progressivement ; en cas de problème durant la
|
||||
|
Reference in New Issue
Block a user