This commit is contained in:
nemunaire 2014-07-29 22:18:17 +02:00
parent 79860abe78
commit c3946c1308
6 changed files with 41 additions and 41 deletions

View File

@ -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é.

View File

@ -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.

View File

@ -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.

View File

@ -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 à

View File

@ -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.

View File

@ -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