Spelling and more

This commit is contained in:
nemunaire 2014-07-30 11:00:09 +02:00
parent c3946c1308
commit 4960122c17
7 changed files with 184 additions and 100 deletions

View File

@ -4,14 +4,15 @@ Novaquark est un studio de jeux vidéo réalisant un jeu en ligne massivement mu
Durant les six mois de mon stage, j'ai travaillé au sein de l'équipe en charge Durant les six mois de mon stage, j'ai travaillé au sein de l'équipe en charge
du développement du serveur, dans le but de mettre en place les bases de du développement du serveur, dans le but de mettre en place les bases de
l'infrastructure d'informatique en nuage nécessaire à la mise à l'échelle l'infrastructure d'informatique en nuage nécessaires à la mise à l'échelle
automatiquement du nombre de serveurs en fonction du nombre de joueurs automatiquement du nombre de serveurs en fonction du nombre de joueurs
connectés. connectés.
\vspace{1em} \vspace{1em}
Le jeu étant encore en phase de développement intensif, j'ai donc surtout Le jeu étant encore en phase de développement intensif, j'ai donc surtout
analyser différentes solutions d'hébergement, de déploiement, etc. analysé les différentes solutions d'hébergement, de déploiement, etc. avant de
monter en compétence sur les technologies retenues.
\vspace{1em} \vspace{1em}

View File

@ -18,7 +18,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 certains points encore
obscurs tels 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.
@ -33,10 +33,14 @@ 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
est en train de se généraliser depuis plusieurs mois. est en train de se généraliser depuis plusieurs mois.
Par ailleurs, j'ai travaillé avec de nombreuses application, \vspace{1em}
bibliothèques et technologies libres, et suis ravi d'avoir pu
contribué au nom de l'entreprise au développement ou à l'amélioration Par ailleurs, j'ai travaillé avec de nombreuses applications,
bibliothèques et technologies libres, et suis ravi d'avoir pu,
contribuer au nom de l'entreprise, au développement ou à l'amélioration
de plusieurs projets. de plusieurs projets.
\vspace{1em}
Enfin, la diversité du travail effectué durant ce stage fut Enfin, la diversité du travail effectué durant ce stage fut
particulièrement gratifiant. particulièrement gratifiant.

View File

@ -1,34 +1,61 @@
Chat Chat
: Moyen de communication instantanné entre les joueurs. : Moyen de communication instantané entre les joueurs.
\vspace{0.5em}
Cluster Cluster
: Un groupe de machine. : Un groupe de machines.
\vspace{0.5em}
Cloud computing Cloud computing
: Voir *Informatique en nuage*. : Voir *Informatique en nuage*.
\vspace{0.5em}
Conteneur Conteneur
: Système d'exploitation complet (programmes, bibliothèques, ...) exécuté par : Système d'exploitation complet (programmes, bibliothèques, ...) exécuté par
un noyau compatible (GNU/Linux, BSD, Solaris). L'idée est de cloisonner, un noyau compatible (GNU/Linux, BSD, Solaris). L'idée est de cloisonner,
voire de restreindre, les actions effectuée par ce conteneur. voire de restreindre, les actions effectuées par ce conteneur.
\vspace{0.5em}
Déploiement Déploiement
: Configurer une machine ou un programme pour qu'il s'exécute d'une manière : Configurer une machine ou un programme pour qu'il s'exécute d'une manière
définie. définie.
\vspace{0.5em}
DevOps
: Personne ou groupe de personnes chargé d'écouter les demandes des
équipes de développement afin de répondre aux mieux à leur besoin du
point de vue du système d'information mis à leur disposition.
\vspace{0.5em}
Front-end Front-end
: Partie d'un système exposée à l'utilisateur final. En opposition au : Partie d'un système exposée à l'utilisateur final. En opposition au
*back-end* qui lui n'est pas voué à être accédé par l'utilisateur final. *back-end* qui lui n'est pas voué à être accédé par l'utilisateur final.
\vspace{0.5em}
Informatique en nuage Informatique en nuage
: s : Abstraction des couches bases d'un système qui ne relèvent pas du
cœur de métier d'une entreprise. Les premières couches concernées
par les délégations/sous-traitements sont le matériel, puis le
système d'exploitation, et peuvent aller jusqu'à la mise à
disposition d'un logiciel particulier configuré pour un usage
déterminé.
\vspace{0.5em}
Journaux Journaux
@ -39,17 +66,23 @@ Journaux
environnement de développement, on va enregistrer les environnement de développement, on va enregistrer les
avertissements ou des informations de développement. avertissements ou des informations de développement.
\vspace{0.5em}
Load-balancer Load-balancer
: Machine ou groupe de machines dont le rôle est d'orienter le trafic : Machine ou groupe de machines dont le rôle est d'orienter le trafic
entrant vers un second groupe de machines, effectuant un travail plus entrant vers un second groupe de machines, effectuant un travail plus
lourd. lourd.
\vspace{0.5em}
Machine virtuelle Machine virtuelle
: Simulation complète d'une machine physique effectuée 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.
\vspace{0.5em}
Monitoring Monitoring
@ -57,17 +90,23 @@ Monitoring
relevé de métriques permettant de s'assurer de la bonne marche des relevé de métriques permettant de s'assurer de la bonne marche des
installations. installations.
\vspace{0.5em}
Pare-feu Pare-feu
: Programme filtrant les données passant sur le réseau d'une machine : Programme filtrant les données passant sur le réseau d'une machine
connectée afin de supprimer le trafic qui n'est pas jugé légitime connectée afin de supprimer le trafic qui n'est pas jugé légitime
suivant des critères prédéfinis. suivant des critères prédéfinis.
\vspace{0.5em}
Plugin Plugin
: Extension d'un programme se présentant généralement sous la forme : Extension d'un programme se présentant généralement sous la forme
d'un module, permettant de lui ajouter des fonctionnalités. d'un module, permettant de lui ajouter des fonctionnalités.
\vspace{0.5em}
SSH SSH
: Protocole sécurisé de connexion à distance dans les environnements : Protocole sécurisé de connexion à distance dans les environnements

View File

@ -18,9 +18,9 @@ d'évoluer dans un monde éditable (à la manière de Minecraft).
Depuis la création de l'entreprise, de nombreux concurrents sont apparus, Depuis la création de l'entreprise, de nombreux concurrents sont apparus,
partageant des idées innovantes de \Dual : partageant des idées innovantes de \Dual :
- Untold Universe : projet similaire incubé chez Startup 42 ; - Star Citizen : MMO par le concepteur de jeux vidéo Chris Roberts ;
- Star Citizen : MMO par concepteur de jeux vidéo Chris Roberts ;
- No Man's Sky : MMO dans un univers généré de manière procédurale ; - No Man's Sky : MMO dans un univers généré de manière procédurale ;
- Untold Universe : projet similaire incubé chez Startup 42 ;
- Blockscape ; - Blockscape ;
- Space Engineers ; - Space Engineers ;
- Planets Cube ; - Planets Cube ;
@ -47,7 +47,7 @@ mener à bien mon sujet de stage.
\vspace{1em} \vspace{1em}
Depuis l'équipe s'est aggrandie et se compose aujourd'hui de 10 personnes : Depuis, l'équipe s'est aggrandie et se compose aujourd'hui de 10 personnes :
dont un concepteur de jeux-vidéo, un gestionnaire de communauté, un graphiste, dont un concepteur de jeux-vidéo, un gestionnaire de communauté, un graphiste,
un développeur client, et trois autres stagiaires. Voir l'organigramme figure un développeur client, et trois autres stagiaires. Voir l'organigramme figure
\ref{fig:img/organigrame.pdf} en page \pageref{fig:img/organigrame.pdf}. \ref{fig:img/organigrame.pdf} en page \pageref{fig:img/organigrame.pdf}.
@ -73,9 +73,13 @@ solutions existantes de déploiement automatique, puis d'écrire un certain
nombre de *recettes*. Les premières *recettes* concernaient le déploiement des nombre de *recettes*. Les premières *recettes* concernaient le déploiement des
machines de monitoring. machines de monitoring.
\vspace{1em}
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ée en charge. concevoir le système de test de montée en charge.
\vspace{1em}
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 à
l'implémentation de certaines fonctionnalités pouvant influer sur le l'implémentation de certaines fonctionnalités pouvant influer sur le
@ -84,7 +88,7 @@ déploiement, la charge ou la sécurité.
## Maturité de l'entreprise ## Maturité de l'entreprise
L'entreprise démarrant son activité, elle n'avait encore aucune base de travail L'entreprise démarrant son activité, elle n'avait encore aucune base de travail
lié à mon sujet de stage. liée à mon sujet de stage.
Les autres employés de l'entreprise travaillaient sur d'autres problématiques : Les autres employés de l'entreprise travaillaient sur d'autres problématiques :
principalement le code du client : moteur de rendu, expérience de jeu, etc. principalement le code du client : moteur de rendu, expérience de jeu, etc.
@ -129,16 +133,19 @@ Pour l'entreprise, mon stage a permis d'établir :
L'entreprise est établie dans l'incubateur Agoranov ; une pièce nous y a été L'entreprise est établie dans l'incubateur Agoranov ; une pièce nous y a été
attribuée. Nous nous y retrouvons tous pour travailler, il est donc facile de attribuée. Nous nous y retrouvons tous pour travailler, il est donc facile de
parler à n'importe qui puisque l'on se trouve dans le même espace. parler à n'importe qui puisque l'on se trouve dans le même espace. Voir la
figure \ref{fig:img/tinyplanet.jpg} sur la page suivante.
%%fimage(img/tinyplanet.jpg, 0.49, "Notre espace de travail") \vspace{1em}
Dès le premier jour, une machine dotée de composants de pointe m'a été Dès le premier jour, une machine dotée de composants de pointe m'a été
attribuée ; il m'a été laissé le choix du système d'exploitation. Au milieu de attribuée ; il m'a été laissé le choix du système d'exploitation. Au milieu de
mon stage, j'ai eu besoin de travailler avec un disque dur plus réactif, à la mon stage, j'ai eu besoin de travailler avec un disque dur plus réactif ; à la
suite de ma demande, celui-ci a été commandé dans la semaine. suite de ma demande, celui-ci a été commandé dans la semaine.
\vspace*{1em} \vspace{1em}
Arrivé quelques semaines après la création de l'entreprise, j'ai participé à Arrivé quelques semaines après la création de l'entreprise, j'ai participé à
l'élaboration des premières documentations. l'élaboration des premières documentations.
%%fimage(img/tinyplanet.jpg, 0.9, "Notre espace de travail")

View File

@ -5,7 +5,7 @@
Afin de mesurer l'ampleur de l'architecture qu'il est nécessaire de mettre en Afin de mesurer l'ampleur de l'architecture qu'il est nécessaire de mettre en
place, mon stage a débuté par plusieurs comparaisons d'outils et place, mon stage a débuté par plusieurs comparaisons d'outils et
l'apprentissage de certains concepts propres aux jeux vidéo et tout l'apprentissage de certains concepts propres aux jeux vidéo et tout
particulièrement aux jeux massivement multi-joueurs. particulièrement aux jeux en ligne massivement multijoueurs.
\vspace{1em} \vspace{1em}
@ -15,7 +15,7 @@ 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ée en compétence sur ceux-ci. l'étape précédente, il m'a fallu monter en compétence sur ceux-ci.
### Développements et tests de montée en charge ### Développements et tests de montée en charge
@ -44,6 +44,8 @@ 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.
\vspace{1em}
Deux fois par semaine, 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.
@ -52,6 +54,8 @@ activités de la journée, en n'oubliant pas d'indiquer les difficultés que l'o
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é.
\vspace{1em}
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és de nos activités ou pour faire que ce soit pour se tenir mutuellement informés de nos activités ou pour faire
le point sur les développements à venir. le point sur les développements à venir.

View File

@ -7,8 +7,9 @@ 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 plates-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 de mise à l'échelle clef en main ; mais des solutions
disponibles lorsque l'on désire s'occuper du service manuellement. libres sont également disponibles lorsque l'on désire s'occuper du service
manuellement.
Ici, l'objectif était de trouver les avantages et les inconvénients de chaque Ici, l'objectif était de trouver les avantages et les inconvénients de chaque
fournisseur et de contre balancer cette analyse par rapport aux solutions à fournisseur et de contre balancer cette analyse par rapport aux solutions à
@ -71,17 +72,19 @@ d'harmonisation, les difficultés de réalisation des mises à jour, les besoins
de tests de l'environnement avant la mise en production, le redéploiement de tests de l'environnement avant la mise en production, le redéploiement
rapide d'une version stable ou précédente. rapide d'une version stable ou précédente.
\vspace{1em}
Il est nécessaire de configurer de nombreuses machines dans différents cadres : Il est nécessaire de configurer de nombreuses machines dans différents cadres :
* ajout d'un nouveau serveur au sein du cluster (fournir le contexte) ; * ajout d'un nouveau serveur au sein du cluster (lui fournir le contexte et l'annoncer) ;
* configuration d'une machine virtuelle à destination des développeurs ; * configuration d'une machine virtuelle à destination des développeurs ;
* configuration des serveurs annexes (sites web, bases de données, monitoring, ...). * configuration des serveurs annexes (sites web, bases de données, monitoring, ...).
### Alternatives possibles ### Alternatives possibles
Dans de nombreux environnements chaque machine est configurée à la main par un Dans de nombreux environnements chaque machine est configurée à la main par un
administrateur système, à chaque étape, une erreur humaine peut venir administrateur système ; à chaque étape, une erreur humaine peut venir
interférer dans la procédure de mise à jour. interférer dans les procédures de mise à jour.
Cette solution est évidemment à écarter si l'on veut garder le contrôle de son Cette solution est évidemment à écarter si l'on veut garder le contrôle de son
système d'information et pouvoir faire face à tout type de problème. système d'information et pouvoir faire face à tout type de problème.
@ -121,17 +124,17 @@ La virtualisation peut nous être utile à plusieurs niveaux :
\vspace{1em} \vspace{1em}
Si dans une contexte de production les serveurs sont utilisés à une valeur Si dans un contexte de production les serveurs sont utilisés à une valeur
proche de leur puissance maximale, pour un environnement de test, il est tout à proche de leur puissance maximale, pour un environnement de test, il est tout à
fait envisageable de regrouper les différentes machines nécessaire au sein de fait envisageable de regrouper les différentes machines nécessaires au sein de
plusieurs machines virtuelles d'une même machine physique, dédiée aux tests. plusieurs machines virtuelles d'une même machine physique, dédiée aux tests.
\vspace{1em} \vspace{1em}
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 (versions d'exploitation différents) et requiert une certaine standardisation (versions
précises de certaine bibliothèques, paquet particulier). La virtualisation précises de certaines bibliothèques, paquets particuliers). 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.
@ -139,8 +142,8 @@ maintenir.
Sont apparues ces dernières années des technologies prônant le déploiement en Sont apparues ces dernières années des technologies prônant le déploiement en
production de machines virtuelles ou conteneur. Cela permet d'avoir une série production de machines virtuelles ou conteneur. Cela permet d'avoir une série
de machine hôte dédiée au déploiement et des machines virtuelles minimalistes de machines hôtes dédiées au déploiement et des machines virtuelles
et standardisées (pas d'écoute SSH par exemple). standardisées et minimalistes (pas d'écoute SSH par exemple).
### Propositions retenues ### Propositions retenues
@ -176,18 +179,17 @@ avancée que ne permettrait pas de faire Docker.
### Objectifs ### Objectifs
Le chat est un élément essentiel dans un jeu massivement Le chat est un élément essentiel dans un jeu en ligne massivement
multijoueurs. Pour nous éviter de réinventer la roue, il a fallu faire multijoueurs. Pour nous éviter de réinventer la roue, il a fallu faire
le choix d'une technologie existante et répondant à nos besoins. le choix d'une technologie existante et répondant à nos besoins.
### Alternatives possibles ### Alternatives possibles
Ajouter au sein du serveur de jeu la gestion du chat aurait pu être Ajouter au sein du serveur de jeu la gestion du chat aurait pu être
envisageable. Cependant, il peut être fastidieux de programmer un envisageable. Cependant, il peut être fastidieux de programmer un système
système complet (par exemple il faut prévoir les systèmes de complet (par exemple il faut prévoir les systèmes de modération, de répartition
modération, de répartition de charge, ...). Afin d'éviter de faire de charge, ...). Afin d'éviter d'ajouter inutilement du temps au développement,
perdre du temps inutilement au développement, il a donc été préféré le il a donc été préféré le choix d'une technologie existante.
choix d'une technologie existante.
### Propositions retenues ### Propositions retenues
@ -230,15 +232,15 @@ vulnérabilités qui pourraient être découvertes une fois le jeu lancé.
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 compatibles avec une solution maison les logiciels pour rendre compatibles avec une solution maison les logiciels déjà
compatibles avec des solutions d'authentification standards. opérationnels avec des solutions d'authentification standards.
### Propositions retenues ### Propositions retenues
Les solutions de centralisation d'authentification courantes sont : Les solutions de centralisation d'authentification courantes sont :
* LDAP ; * LDAP ;
* Kerberos/PKINIT ; * Kerberos, PKINIT ;
* RADIUS. * RADIUS.
### Résultats obtenus ### Résultats obtenus
@ -256,7 +258,7 @@ au sein du client de jeu (chat, jeu, contenus, marché) et compte tenu du fait
que plusieurs serveurs vont être contactés par le client au fil de l'évolution que plusieurs serveurs vont être contactés par le client au fil de l'évolution
du joueur dans le jeu, l'authentification par un serveur Kerberos puis du joueur dans le jeu, l'authentification par un serveur Kerberos puis
l'échange de tickets permet de s'affranchir de trop nombreuses l'échange de tickets permet de s'affranchir de trop nombreuses
authentifications. authentifications répétées.
\newpage \newpage
@ -285,8 +287,8 @@ choisi de le développer.
\vspace{1em} \vspace{1em}
Le langage retenu fut le Go : le langage compilant les binaires statiquement, Le langage retenu fut le Go : le langage compilant les binaires statiquement,
il n'y aurait donc rien de plus à installer sur les machines sur lesquels nous il n'y aurait donc rien de plus à installer sur les machines sur lesquelles
devrons faire les relevés. nous devions faire les relevés.
### Résultats obtenus ### Résultats obtenus
@ -295,21 +297,22 @@ CC0.
Il a ensuite été annoncé à la communauté InfluxDB qui lui a fait un bon Il a ensuite été annoncé à la communauté InfluxDB qui lui a fait un bon
accueil : nous avons eu quelques retours sur des fonctionnalités manquantes et accueil : nous avons eu quelques retours sur des fonctionnalités manquantes et
les membres de la communauté ont eux-mêmes pris la peine de modifier le code des membres de la communauté ont eux-mêmes pris la peine de modifier le code
pour y faire des améliorations. 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étriques, il m'a été demandé de réaliser
tableau de bord permettant de visualiser en temps réel les données un 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
l'état des différents serveurs. Le deuxième dashboard utilise la bibliothèque l'état des différents serveurs. Le deuxième tableau de bord utilise la
JavaScript *Graphana* : il montre sous une autre forme les données enregistrées bibliothèque JavaScript *Graphana* (voir figure
dans la base de données en permettant plus facilement de comparer sur le long \ref{fig:img/grafana-monitor0.png}) : il montre sous une autre forme les
terme l'utilisation des ressources sur les machines en les corrélant avec les données enregistrées dans la base de données en permettant plus facilement de
événements survenus dans le jeu. comparer sur le long terme l'utilisation des ressources sur les machines en les
corrélant avec les événements survenus dans le jeu.
%%fimage(img/cubism.png, 0.7, "Tableau de bord réalisé avec Cubism") %%fimage(img/cubism.png, 0.7, "Tableau de bord réalisé avec Cubism")
%%fimage(img/grafana-monitor0.png, 1, "Tableau de bord réalisé avec Graphana") %%fimage(img/grafana-monitor0.png, 1, "Tableau de bord réalisé avec Graphana")
@ -326,60 +329,70 @@ reconfiguré rapidement en fonction des rôles qui lui sont attribués.
Certains rôles sont réutilisés d'une recette à l'autre : par exemple la machine Certains rôles sont réutilisés d'une recette à l'autre : par exemple la machine
virtuelle de développement est un serveur de jeu sur lequel tous les types de virtuelle de développement est un serveur de jeu sur lequel tous les types de
serveur sont disponibles et elle possède également une base de donnée locale. serveur de jeu sont disponibles et elle possède également une base de donnée
locale.
### Résultats obtenus ### Résultats obtenus
Les recettes qu'il a été nécessaire de développer sont les suivantes : 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 et les événements. Afin de toujours connaître l'état
des serveurs de jeu, chaque serveur configuré est inclus au sein d'un en temps réel des serveurs de jeu, chaque serveur configuré est inclus au
cluster de haute-disponibilité. sein d'un cluster de haute-disponibilité, grâce à LVS et Keepalived.
- **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é afin de disposer de stockage permanent. être déployée afin de disposer de stockage permanent.
- **serveurs de jeu :** le serveur étant décomposé en trois parties, trois - **Serveurs de jeu :** le serveur de jeu étant décomposé en trois parties,
recettes différentes sont nécessaires, en fonction du type de serveur que trois recettes différentes sont nécessaires, en fonction du type de serveur
l'on veut déployé. que l'on veut déployer.
- **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 à ces machines virtuelles. Elles contiennent tous les est fournis. Elles contiennent tous les composants nécessaires au bon
composants nécessaires au bon fonctionnement du serveur. fonctionnement du serveur de jeu.
- **serveur de machines virtuelles :** il s'agit de configurer un serveur - **Serveur de machines virtuelles/conteneurs :** il s'agit de configurer un
fraîchement arrivé pour lui permettre d'exécuter des conteneurs (serveur de serveur fraîchement arrivé pour lui permettre d'exécuter des conteneurs
jeu, site web, etc.). (serveur de jeu, site web, etc.). Pour cela, une étape supplémentaire est
- **site web commercial :** cette recette crée un conteneur permettant nécessaire afin de qualifier une première fois les rôles à déployer sur le
d'afficher le site web du jeu via un serveur web correctement configuré. serveur. Par exemple, on peut distinguer les rôles suivants :
- **serveur de supervision :** cette recette crée un conteneur pouvant exécuter * **proxy frontal :** cette recette crée un conteneur redirigeant le trafic
un serveur icinga (clone de nagios). Le conteneur est préconfiguré pour vers d'autres machines virtuelles exécutant un service web. En effectuant
aussi peu d'action que possible, il permet d'afficher une page d'erreur
lorsque les autres services sont rendus inaccessibles;
* **site web commercial :** cette recette crée un conteneur permettant
d'afficher le site web du jeu via un serveur web correctement configuré;
* **forum :** cette recette crée un conteneur exécutant le logiciel de forum;
* **serveur de mails** à usage interne aux serveurs.
- **Serveur de supervision :** cette recette crée un conteneur exécutant un
serveur icinga (clone de nagios). Le conteneur est préconfiguré pour
superviser les serveurs connus au moment de sa construction. superviser les serveurs connus au moment de sa construction.
\vspace{1em} \vspace{1em}
Pour chaque recette, un certain nombre d'actions communes sont effectuées comme Pour chaque recette, un certain nombre d'actions communes sont effectuées comme
la mise à jour des paquets et la sécurisation générale (comme la restriction de la mise à jour des paquets et la sécurisation générale (restriction de
l'authentification par SSH, des règles de pare-feu sommaires et diverses règles l'authentification par SSH, ajout de règles de pare-feu sommaires et diverses
permettant de prévenir diverses attaques comme le DNS et l'ARP-poisoning). règles permettant de prévenir diverses attaques comme le DNS et
l'ARP-poisoning suivant les machines).
\vspace{1em} \vspace{1em}
Certaines machines disposeront de deux interfaces réseau : une publique et une Certaines machines disposeront de deux cartes 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 automatiquement les configurations des de ces deux interfaces, 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}
De nombreux modules Ansible existent afin de configurer des bases de De nombreux modules Ansible existent afin de configurer des bases de
données. Malheureusement, InfluxDB étant encore relativement récente, aucun données. Malheureusement, InfluxDB étant encore relativement récente, aucun
module n'était disponible. Pour nos besoins, nous avons donc du développer un module n'était disponible. Pour nos besoins, nous avons donc dû développer un
module en Go (pour profiter d'un code compilé de manière statique avec ses module en Go (pour profiter d'un code compilé de manière statique avec ses
bibliothèques, nous évitant ainsi d'avoir des prérequis sur les machines). Une bibliothèques, nous évitant ainsi d'avoir des prérequis sur les machines). Une
demande de fusion de branche a été passé auprès de l'équipe d'Ansible afin de demande de fusion de branche a été passée auprès de l'équipe d'Ansible afin de
permettre l'exécution de programme natifs (précédemment limité aux scripts). permettre l'exécution de programmes natifs (précédemment limité aux scripts).
\vspace{1em} \vspace{1em}
@ -388,15 +401,26 @@ compilation `sbt-native-packager`, cela générait les scripts
d'initialisation. Lors de la mise en place des recettes de déploiement pour d'initialisation. Lors de la mise en place des recettes de déploiement pour
cette version du serveur, nous avons observé un bug dans le script cette version du serveur, nous avons observé un bug dans le script
d'initialisation à destination des systèmes Debian. Nous avons donc corrigé le d'initialisation à destination des systèmes Debian. Nous avons donc corrigé le
problème et soumis le correctif au mainteneur du la solution. problème et soumis le correctif au mainteneur de la solution.
\vspace{1em} \vspace{1em}
Un peu plus tard, afin d'enregistrer les actions effectuées par le programme de Un peu plus tard, afin d'enregistrer les actions effectuées par le programme de
déploiement, il a été nécessaire de développer un nouveau module pour Ansible déploiement, il a été nécessaire de développer un nouveau module pour Ansible
afin qu'il enregistrer les actions qu'il fait et les éventuelles erreurs qu'il afin qu'il enregistre les actions qu'il effectue ainsi que les éventuelles
rencontre. Cela permet d'avoir une traçabilité des déploiements et des mises à erreurs qu'il rencontre. Cela permet d'avoir une traçabilité des déploiements
jour effectuées sur l'ensemble du cluster. et des mises à jour de l'ensemble du cluster.
\vspace{1em}
À noter que pour le moment, aucune solution n'a été trouvée pour éviter ou
simplifier l'étape de compilation de noyau sur les serveurs exécutant les
conteneurs. En effet, les serveurs nous sont livrés avec un noyau standard ne
disposant pas de toutes les options nécessaires au fonctionnement de LXC.
Une première étape manuelle consiste alors à compiler un noyau renforcé (par
l'application du correctif GrSecurity) avec des options plus appropriées à
notre usage.
\newpage \newpage
@ -475,7 +499,7 @@ Actuellement au stade d'étude, il serait question de mettre à disposition des
développeurs une interface web leur permettant de lancer à volonté des machines développeurs une interface web leur permettant de lancer à volonté des machines
virtuelles et de leur permettre de contrôler certains aspects préenregistrés virtuelles et de leur permettre de contrôler certains aspects préenregistrés
(vider la base de données, charger une carte prédéfinie, ...) et de consulter (vider la base de données, charger une carte prédéfinie, ...) et de consulter
les journaux du serveurs. les journaux des différents programmes.
\newpage \newpage
@ -500,14 +524,17 @@ machines virtuelles exécutant chacune plusieurs clients.
Dans un premier temps, la montée 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 l'ordonnanceur de la bibliothèque d'acteurs que nous utilisions ne faisait
pas correctement son travail : il en résultait une surcharge des canaux de pas correctement son travail : il en résultait alors une surcharge anormale des
diffusion, entraînant le plantage du serveur. canaux de diffusion internes, entraînant le sabordage du serveur de jeu
(s'agissant d'une situation irrécupérable).
\vspace{1em}
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ée 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ésultait pas de plantage du serveur.
\newpage \newpage
@ -518,8 +545,9 @@ et il n'en résultat pas de plantage du serveur.
Les métriques relevées précédemment concernaient le système : consommation CPU, Les métriques relevées précédemment concernaient le système : consommation CPU,
utilisation de la mémoire et de la bande passante, ... Pour des besoins utilisation de la mémoire et de la bande passante, ... Pour des besoins
statistiques (et à terme business), il est nécessaire d'intégrer au serveur statistiques (et à terme business), il est nécessaire d'intégrer au serveur de
l'envoi de métrique telles que le nombre de joueurs inscrits, connectés, ... jeu l'envoi de métriques telles que le nombre de joueurs inscrits, connectés,
...
### Difficultés ### Difficultés
@ -538,6 +566,8 @@ système de configuration de l'application. En effet, jusque là, les quelques
paramètres nécessaires au fonctionnement du serveur étaient regroupés dans des paramètres nécessaires au fonctionnement du serveur étaient regroupés dans des
macros de préprocesseur. macros de préprocesseur.
\vspace{1em}
Une fois ce travail préliminaire réalisé, il a été aisé de rajouter dans le Une fois ce travail préliminaire réalisé, il a été aisé de rajouter dans le
code du serveur une série de macros envoyant à chaque événement intéressant, un code du serveur une série de macros envoyant à chaque événement intéressant, un
message vers la base de données. message vers la base de données.
@ -566,7 +596,7 @@ Le serveur web `nginx` est utilisé, allié au service `php-fpm`. Tous deux ont
été configurés afin de permettre à un millier d'utilisateurs 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} %%fimage(img/siteweb.png, 0.95, "Page d'accueil du site web")
Prévoyant un afflux massif de joueurs dans les prochains mois, nous nous sommes Prévoyant un afflux massif de joueurs dans les prochains mois, nous nous sommes
intéressés aux services d'Amazon afin de bénéficier d'une structure de mise à intéressés aux services d'Amazon afin de bénéficier d'une structure de mise à
@ -577,8 +607,6 @@ spécifique afin de répondre à la demande fluctuante, selon des critères
préétablis. Après ce test, compte-tenu du coût de la solution, il a été décidé préétablis. Après ce test, compte-tenu du coût de la solution, il a été décidé
d'attendre d'en avoir vraiment l'utilité. d'attendre d'en avoir vraiment l'utilité.
%%fimage(img/siteweb.png, 0.95, "Page d'accueil du site web")
\newpage \newpage
@ -588,7 +616,8 @@ d'attendre d'en avoir vraiment l'utilité.
La sortie du jeu n'étant pas encore à l'ordre du jour et certains aspects du La sortie du jeu n'étant pas encore à l'ordre du jour et certains aspects du
développement du serveur n'étant pas encore complètement réglés, cette étape développement du serveur n'étant pas encore complètement réglés, cette étape
est là pour établir une base de travail. est là pour établir une base de travail concernant l'architecture et le
déploiement des serveurs de jeu, de monitoring ainsi que leur interactions.
### Pistes envisagées ### Pistes envisagées
@ -604,12 +633,12 @@ très rapidement en cas de problème.
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 serveurs, 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 les serveurs mis à jour.
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
procédure de mise à jour, il faut alors retirer du cluster les serveurs procédure, il faut alors retirer du cluster les serveurs défectueux. Cette
défectueux. Cette opération est plus lourde que le basculement d'une version à opération est plus lourde que le basculement d'une version à l'autre tel que le
l'autre tel que le permet Docker. permet Docker.
\vspace{1em} \vspace{1em}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 143 KiB