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 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. 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 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 d'intégrer au plus tôt les remarques concernant la mise à l'échelle et la
sécurité. sécurité.

View File

@ -19,7 +19,7 @@ tout ce qui gravite autour du serveur de jeu :
\vspace{1em} \vspace{1em}
D'autre part, j'ai également permis d'éclaircir certain points encore 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 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. 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 ## Intérêt personnel
Ce stage m'a permis de découvrir et d'approfondir de nombreux aspects 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 sont des domaines porteurs pour l'avenir. En effet, bien que plutôt
ancienne dans les environnements Solaris et BSD, l'utilisation des ancienne dans les environnements Solaris et BSD, l'utilisation des
conteneurs est quelque chose d'assez nouveau au sein du noyau Linux et 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 contribué au nom de l'entreprise au développement ou à l'amélioration
de plusieurs projets. 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. particulièrement gratifiant.

View File

@ -33,7 +33,7 @@ Informatique en nuage
Journaux Journaux
: Liste d'événements survenus au sein d'un programme. En général on : 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 l'utilisation faite du programme : par exemple, en production, on
ne va enregistrer que les erreurs, tandis que dans un ne va enregistrer que les erreurs, tandis que dans un
environnement de développement, on va enregistrer les environnement de développement, on va enregistrer les
@ -47,7 +47,7 @@ Load-balancer
Machine virtuelle 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 virtualisation (hyperviseur ou émulateur) dans le but de tester un système
ou pour isoler l'exécution de programmes. ou pour isoler l'exécution de programmes.

View File

@ -1,7 +1,7 @@
## Présentation de l'entreprise ## Présentation de l'entreprise
Novaquark est un studio de jeux vidéo créé en janvier 2014 par Jean-Christophe 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. rachetée par Aldebaran en 2012.
L'équipe se concentre sur la conception d'un jeu vidéo en ligne massivement 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. machines de monitoring.
Par la suite, lorsque le serveur a été suffisamment fonctionnel, j'ai eu à 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 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 à 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 ### Montée en compétences
Une fois les outils sélectionnés suivants les critères établis au travers de 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 À la suite de cet apprentissage, j'ai effectué des tests afin de valider les
choix qui avaient été fait, afin d'en tirer les conclusions. choix qui avaient été faits, afin d'en tirer les conclusions.
## Respect des délais et critique de ce découpage ## 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 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 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 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} \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 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. 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 Le développement du jeu suit une méthodologie agile : cela a commencé par
Kaban, pour arriver aujourd'hui à Scrum. 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. 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 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 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é. 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 : 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 que ce soit pour se tenir mutuellement informés de nos activités ou pour faire
des points sur les développements à venir. 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 facilement d'adapter leur nombre en fonction du besoin (fortement en
corrélation avec le nombre de joueurs inscrits et connectés). 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 fournissant un service clef en main ; mais des solutions libres sont également
disponibles lorsque l'on désire s'occuper du service manuellement. disponibles lorsque l'on désire s'occuper du service manuellement.
@ -53,7 +53,7 @@ dans le cadre de cette analyse.
### Discussions complémentaires ### 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 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 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. 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 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 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 précises de certaine bibliothèques, paquet particulier). La virtualisation
permet de leur fournir un environnement clef en main qu'ils n'ont pas à permet de leur fournir un environnement clef en main qu'ils n'ont pas à
maintenir. 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 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 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 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} \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 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 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} \vspace{1em}
D'autre part, étant donné que plusieurs services devront pouvoir D'autre part, étant donné que plusieurs services devront pouvoir
s'authentifier en un point central, cela évite de fournir un travail 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. compatibles avec des solutions d'authentification standards.
### Propositions retenues ### Propositions retenues
@ -301,7 +301,7 @@ pour y faire des améliorations.
\vspace{1em} \vspace{1em}
En sus de ce programme de relevé de métrique, il m'a été demandé de réaliser un 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 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 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 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 - **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 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 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é. cluster de haute-disponibilité.
- **serveurs de base de données :** pour l'instant un seul type de base de - **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 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 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 - **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 recettes différentes sont nécessaires, en fonction du type de serveur que
l'on veut déployé. l'on veut déployé.
- **machine virtuelle de développement :** ces machines mises à disposition des - **machine virtuelle de développement :** ces machines mises à disposition des
développeurs doivent leur permettre de tester le jeu avec un serveur qui leur 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 est fournis grâce à ces machines virtuelles. Elles contiennent tous les
composants nécessaire au bon fonctionnement du serveur. composants nécessaires au bon fonctionnement du serveur.
- **serveur de machines virtuelles :** il s'agit de configurer un 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 fraîchement arrivé pour lui permettre d'exécuter des conteneurs (serveur de
jeu, site web, etc.). 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 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 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). logiciels en fonction de leur besoin (usage interne ou externe au cluster).
\vspace{1em} \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 Le temps passé au développement est primordial comparé au temps passé à tenter
de configurer l'environnement à partir de la documentation. Une solution clef 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 ### 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 ; * de conteneurs associés à des scripts d'automatisation ;
* d'un conteneur sur une machine dédiée : l'équipe serveur s'occupe de mettre * 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 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 ### 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") %%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 Dans un souci d'harmonisation des technologies, Docker a été retenu dans un
second temps pour répondre également aux problématiques de déploiement futurs. second temps pour répondre également aux problématiques de déploiements futurs.
\vspace{1em} \vspace{1em}
@ -480,7 +480,7 @@ les journaux du serveurs.
\newpage \newpage
## Conception de l'architecture de test de monté en charge ## Conception de l'architecture de test de montée en charge
### Objectifs ### Objectifs
@ -498,14 +498,14 @@ machines virtuelles exécutant chacune plusieurs clients.
### Résultats obtenus ### 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é 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 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 pas correctement son travail : il en résultait une surcharge des canaux de
diffusion, entraînant le plantage du serveur. diffusion, entraînant le plantage du serveur.
Ce problème a été corrigé dans la version suivante de la bibliothèque 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 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. et il n'en résultat pas de plantage du serveur.
@ -550,7 +550,7 @@ message vers la base de données.
### Objectifs ### Objectifs
Précédemment hébergé auprès d'une société d'hébergement mutualisé permettant de 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 et de l'héberger nous-même afin de pouvoir l'adapter plus facilement à nos
besoins. besoins.
@ -563,7 +563,7 @@ trouve).
\vspace{1em} \vspace{1em}
Le serveur web `nginx` est utilisé, allié au service `php-fpm`. Tous deux ont 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. site en même temps.
\vspace{1em} \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 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 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 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. très rapidement en cas de problème.
\vspace{1em} \vspace{1em}
Précédemment, il était plutôt question d'effectuer un déploiement plus 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. aurait procédé à la migration avant de relancer le nouveau serveur.
Les serveurs sont mis à jour progressivement ; en cas de problème durant la Les serveurs sont mis à jour progressivement ; en cas de problème durant la