Projet de fin d’année 2013 / 2014

Dernière mise à jour le 26 juin 2014 (màj du schéma et section sur Nginx)

Chaque année dans mon école, un (ou deux) projets de fin d’année à réaliser en groupes de quatre à six personnes nous sont donnés. Les sujets sont publiés fin novembre / début décembre et nous prenons la peau d’un prestataire de service devant mettre en place une solution pour un client : jeux vidéos, infrastructures de virtualisation, programmes en assembleur… Le staff académique ne manque jamais d’imagination et la tradition veut qu’un sujet soit plutôt orienté « dev' » et un autre orienté « archi ».

Cette année les choses ont changé puisque nos projets de fin d’année ont été fusionnés en un projet plus conséquent et revalorisé au niveau du nombre de crédits ECTS qu’ils peuvent nous rapporter, ce que je salue par ailleurs.

Inutile de tourner autour du pot voici le sujet des Ms.Sc.1 (4èmes années) pour l’année scolaire 2013 / 2014. Pour faire simple, nous devons mettre en place une solution type Dropbox architecturé autour d’une API et de différents clients pouvant s’y connecter (Windows, iOS, Windows Phone, Android…). Ça c’est pour la partie développement… que je laisse à mes amis développeurs. Nous on va plutôt se pencher sur la partie « infrastructure » 🙂

Cette page regroupe tous les articles relatifs à mon projet. C’est un peu le journal de bord où sont consignés les choix et les décisions pris par moi et mon coéquipier ainsi que leur mise en place technique.

Objectif du projet

Le but pour nous cette année est de mettre en place l’architecture suivante :

  • Un premier cluster dédié à l’hébergement d’une API. Très sensible (c’est le cœur du projet), il doit être hautement disponible et supporter d’éventuels pics de charge.
  • Un second cluster dédié à l’hébergement d’un site web. C’est en fait l’interface d’administration des administrateurs, mais aussi le tableau de bord des utilisateurs et le premier client web de l’API. Il doit lui aussi être hautement accessible et supporter les pics de charge.
  • Et enfin réfléchir à une solution de stockage pour les fichiers dit plats (stockés par les utilisateurs) et les bases de données… Deuxième élément hautement sensible (c’est le cerveau du projet), des mécanismes de réplications doivent être mis en place car il ne faut absolument pas perdre la moindre donnée utilisateur !

Prise de décision et choix effectués

La première étape importante pour commencer à travailler est de choisir les technologies employées, et ce en fonction des choix de développement et des ressources physiques à notre disposition. Les développeurs ont fait le choix de développer leur API et le premier client web en PHP. On aura donc au moins deux clusters Apache HTTP à mettre en place. Avec mon coéquipier nous avons pris le pari de tout faire (ou au moins au maximum) avec des outils libres. On a donc :

Pour la partie stockage / bases de données :

  • On s’oriente sur une solution à base de GlusterFS qui devrait nous permettre une certaine élasticité afin de répondre aux futurs besoins d’expansion. GLusterFS est un système de fichier de cluster proposant de nombreuses fonctionnalités intéressantes parmi lesquelles on trouve : réplication, partage de charge, gestion des pannes, ordonnancement et cache disque…
  • Le cluster de bases de données devrait fonctionner grâce à MariaDB Galera cluster. J’aurai sans doute l’occasion de vous en reparler.

Pour le cluster hébergeant l’API :

  • Les développeurs ayant choisi de s’orienter vers une API développée en PHP, nous plancherons donc sur un cluster Apache / PHP. Le choix a finalement été porté vers une solution moins gourmande en ressources et beaucoup plus rapide : Nginx / PHP-FPM.
  • Le couple Corosync / Pacemaker pour la solution de clustering. Abandonné (voir les articles sur LVS).
  • Un cluster LVS / Keepalived ou HAProxy pour la répartition de charge de tous les services.

Même chose pour le client web.

Allez, comme j’aime bien faire des jolis schémas et qu’un beau dessin vaut mieux qu’un long discours :

Cliquer sur l'image pour agrandir

Voilà il n’y a plus qu’à se mettre au travail ! Si vous avez des suggestions n’hésitez pas. Cette page évoluera au fil de mes découvertes, des mes essais et de mes lectures…

Mise en place technique du projet

Création et gestion du cluster de stockage GlusterFS

À propos de NginX

Répartition de charge

1 Comment

  1. Kali
    14/04/2015 @ 12:01

    Bonjour,

    Le projet a-t-il finalement abouti ?

    Reply

Leave a Reply

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.