Post on 26-Jun-2015
description
et un peu de Chef aussi...
Forum PHP 2014
SÉBASTIEN ANGÈLE DIRECTEUR ADJOINT DES NOUVEAUX MÉDIAS -‐ GROUPE EXPRESS ROULARTA
NICOLAS SILBERMAN CONSULTANT EN ARCHITECTURE IT -‐ VANILLE CARAMEL ENSEIGNANT -‐ ESSEC BUSINESS SCHOOL ANCIEN PRÉSIDENT DE L’AFUP
¡ Groupe historique de presse L’Express, L’Expansion, L’Entreprise, Mieux Vivre Votre Argent, L’Express Styles, Côté Sud, Côté Ouest, Zeste, Point de Vue, Studio Ciné Live, Lire, Classica, A nous Paris, L’Etudiant…
¡ Sur le web :
7 millions de VU/mois TOP 5 des sites d’actu
1 million de VU/mois Leader de la déco
¡ « Non, chez moi, ça marche… »
¡ « C’est normal, je ne t’ai pas tout installé, ne regarde pas cette partie du site... »
¡ « Ah bon, tu voulais tester ça aussi ? »
¡ “T’inquiète pas, ça marchera en prod… »
¡ Les postes de dev : standalone ou avec serveur de dev
¡ La recette / demo / staging
¡ La preprod
¡ La prod
L’Express en 2005: ¡ 1 application ¡ 1 base de données
L’Express en 2014 : ¡ 6 applications PHP ¡ 15 bdd métiers
sous MySQL + mongoDB + SQL Server
¡ Redis ¡ RabbitMQ
● Reproduire un bout : trop de dépendances
● Le faire à la main : long et toujours quelque chose qui manque
● Espérer que ça marche en prod...
● le middleware
● les applicatifs
● les BDDs
● les fichiers (images, pdfs,...)
¡ Industrialisation du code : Git
¡ Expérience du déploiement continu (Capistrano)
¡ Des compétences DevOps
¡ C’est un mouvement
¡ Réduire les frictions entre § Les devs § Les ops (aka admin sys ou barbus)
¡ Pour une belle phrase commune : « travailler ensemble pour produire de la valeur pour l'entreprise »
sources wikipedia
● Offres de service
● API
● Instances proposées ● … et envie de s’amuser !
¡ Démarrer une instance EC2 chez Amazon est très facile, on choisit les caractéristiques de la machine et c'est parti
¡ Démarrer une stack complète est également assez simple avec CloudFormation
¡ On peut par exemple demander via l'API d'Amazon: § Créer un serveur MySQL Master/Slave § Démarrer une instance EC2 et lui communiquer le EndPoint MySQL afin qu'il configure ses applications en fonction
¡ Facile de se noyer et de se perdre dans les offres : § Se faire accompagner par quelqu’un qui connait pour gagner du temps
¡ Si aucune expérience dans le Cloud, attention à la maîtrise du budget § Poser des alertes sur des seuils budgétaires
¡ Gouvernance des machines et optimisation des ressources
§ Optimiser au plus près : une machine qui ne fait rien n’a aucune raison d’ être allumée
¡ Logiciel qui permet de gérer les déploiements système et applicatif
¡ Historiquement : scripts Bash et Cfengine
¡ Deux candidats open source : § Puppet (Ruby) § Chef (Erlang)
¡ Et Ansible ? On ne connaissait pas !
¡ Précédentes expériences sur des stacks plus petites dans l’équipe
¡ Expérience significative de Nicolas Silberman chez Mediapart sur les problématiques d'environnement de développement
¡ Volonté de rapidement démarrer sur le projet.
¡ Pour démarrer : utiliser Foreman directement
¡ Attention : configuration de type hiera (fichiers YAML fournissant des variables) non compatible avec Foreman: lourd travail d'adaptation pour repasser en Foreman.
¡ Recettes de la communauté sont utilisés par un grand nombre et quand elles sont maintenues, elles sont d'excellente qualité.
¡ Complexité avec l'arbre de dépendances.
¡ Il n'est pas rare de se poser la question: cette action doit-‐elle être réalisée avant celle la ?
¡ Exemple de Dépendance: § install_apache § créer un Vhost § restart_apache
¡ Puppet compile l'ensemble des recettes, réalise un arbre de dépendances et joue les modifications à faire sur le système dans l'ordre des dépendances qu'il a déterminé
¡ Quand on atteint la vingtaine (ou même cinquantaine) de niveau de dépendances, trouver d'où est le problème devient compliqué.
¡ Tutoriaux de la communauté et la documentation fournie par AWS faisait uniquement mention de Chef (même si la doc Puppet arrive doucement sur AWS)
¡ Choix de Chef par notre hébergeur pour la prod
¡ Recettes plus simples à écrire
¡ Pas de « , » !
( ça le fait hein ! )
¡ Au début : images de Base (AMI) des distributions linux
¡ Maintenant : Packer.io pour construire des images avec : § Nginx compilé (gestion des SSI) § Autres briques : MySQL, Redis, MemCache, RabbitMQ, Apache, Php,…
¡ Un tableau de variable pour : § Créer les Vhost Nginx § Cloner le projet, exécuter un composer install § Cloner un sous repository dans un sous-‐dossier § Remplacer des fichiers au sein du dépot (fichiers de configuration)
§ Créer des règles spécifiques dans Varnish § Lancer des commandes de warmup, de générations de cache, …
¡ A remonter de la prod tous les jours : § 10 bases de donnée MySQL § 5 Bases MongoDB § 1 Dump Redis § 1 base SQL Serveur
¡ 30h pour tout remonter § Arbitrer la fraîcheur des données § Optimiser les bases de données
¡ Pas de solutions idéales pour l’instant
¡ Warmup avec un disque dur (si, si)
¡ Rsync
¡ Permet de faire des tests unitaires et fonctionnel sur les recettes
¡ Compatible avec beaucoup de provisionner (Puppet, Chef), bootstrapper (Amazon EC2).
¡ Concept de "Infrastructure as Code"
¡ Faire le moins de choses à la main
¡ Gérer son parc
¡ Ne pas être devops dépendant
¡ Très bonne documentation
¡ Disponibilité et temps de réponses
¡ SDK fourni pour PHP : se base sur Guzzle pour envoyer les requêtes et clients distincts pour chaque service (EC2Client, CloudFormationClient, S3Client, etc)
¡ Intégration rapide du SDK dans un projet Symfony2 grâce à l'injection de dépendance et l'event dispatcher
¡ Beaucoup de documentation à parcourir
¡ Nécessaire de savoir précisément ce que l'on souhaite faire pour ne pas prendre une mauvaise direction
¡ Investissement lourd au début
¡ Se mette en mode projet avec une équipe dédiée
¡ Travailler en agile et en lean...
¡ … tout en restant ambitieux !
¡ Finir à 100% !
¡ Gérer le fichier de config pour les développeurs
¡ Faire des projections budgétaires
@sangele
@nsilberman