SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like

download SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like

If you can't read please download the document

Transcript of SfPot Lille 07/2015 - Utiliser Symfony sur des environnements Heroku-like

  1. 1. Utiliser Symfony sur des environnementsUtiliser Symfony sur des environnements Heroku-likeHeroku-like Utiliser Symfony sur des environnementsUtiliser Symfony sur des environnements Heroku-likeHeroku-like
  2. 2. Remerciements
  3. 3. Il tait une fois Madame Michu est chocolatire. Elle vend sur Internet ses produits. Site en Symfony2, respectueux des pratiques. Une base de donnes. Des sessions stockes sur le systme de fichiers. Un serveur de websockets pour un service assistance. Cod dans une commande : php app/console support:run Les affaires marchent trs bien !
  4. 4. Quand tout coup, les soldes !
  5. 5. BAOUM. Sous la charge, le site se met ramer . Load average : 481,42 Impossible de reprendre la main en SSH. Les pages s'affichent en 45 secondes. C'est dramatique, Madame Michu aurait pu gagner beaucoup d'argent !
  6. 6. Solutions Ne rien faire. + Ne cote pas plus cher. + La prsentation est finie. - Perte d'argent et de notorit lors des soldes. Acheter un plus gros serveur. + Rsout le problme des soldes. - Cote plus cher le reste de l'anne.
  7. 7. Ou alors ... Adapter l'infrastructure au trafic. Ajouter de la puissance la veille des soldes. Et la retirer ensuite.
  8. 8. L'objectif But du jeu Passer de gauche droite. Pouvoir rajouter des instances chaud en quelques secondes.
  9. 9. The twelve-factor app Une mthodologie pour fournir une application en tant que service. Automatisable Portable Adapte au cloud Scalable crit par Adam Wiggins. Cofondateur de Heroku. Disponible sur http://12factor.net
  10. 10. I. Codebase One codebase tracked in revision control, many deploys Toutes les versions de l'application sont sur un seul repository. C'est une pratique courante dans la communaut Symfony.
  11. 11. II. Dependencies Explicitly declare and isolate dependencies Grce Composer, c'est dj le cas.
  12. 12. III. Config Store config in the environment Sparation du code et de la configuration. Au dploiement, la configuration n'est plus un souci.
  13. 13. III. Config
  14. 14. III. Config SYMFONY_ENV=prod SYMFONY__DATABASE_USER=myuser SYMFONY__DATABASE_NAME=myshop
  15. 15. IV. Backing Services Treat backing services as attached resources La base de donne est une ressource. Attention ! Les sessions aussi !
  16. 16. IV. Backing Services Pour doctrine, c'est natif. Tout est paramtrable via le parameters.yml. Et donc via l'environnement. Centralisons nos sessions dans Redis. Il y a un bundle pour a. https://github.com/snc/SncRedisBundle
  17. 17. IV. Backing Services Dpendances snc/redis-bundle: ~1.1 predis/predis: ~0.8 Configuration
  18. 18. V. Build, release, run Strictly separate build and run stages Build Composer install Inclure tous les binaires (apache / nginx, php / hhvm). Run Dmarrer apache / nginx.
  19. 19. V. Build, release, run Hein ?! Packager php avec le projet ? Avec un buildpack, c'est facile ! git clone https://github.com/heroku/heroku-buildpack-php cd heroku-buildpack-php ./bin/compile /path/to/the/app /tmp/cache /path/to/env ./bin/release /path/to/the/app On zippe le rsultat.
  20. 20. V. Build, release, run
  21. 21. VI. Processes Execute the app as one or more stateless processes Stateless Dj fait ! Backing Services Config via environnement One or more ? Le site = un process Le serveur de websockets = un process
  22. 22. VI. Processes Utiliser un Procfile. web: bin/heroku-php-nginx -C conf/nginx.conf web/ support: php app/console support:run
  23. 23. VII. Port binding Export services via port binding Base de donnes : 192.168.1.12:5210 Instance web 1 : 192.168.1.22:6597 Instance web 2 : 192.168.1.25:7851 La configuration pour relier les services.
  24. 24. VIII. Concurrency Scale out via the process model Notre application est stateless. Alors on peut en avoir 1, 10 ou 1000 sans altrer son fonctionnement.
  25. 25. IX. Disposability Maximize robustness with fast startup and graceful shutdown
  26. 26. X. Dev/prod parity Keep development, staging, and production as similar as possible Merci docker !
  27. 27. XI. Logs Treat logs as event streams Beaucoup de machines. Un mme visiteur peut passer sur plusieurs serveurs. Il faut centraliser. Les applications sont stateless. On n'crit pas de log sur la machine. Tout est redirig vers stdout / stderr.
  28. 28. XI. Logs Heureusement, Monolog est l !
  29. 29. XII. Admin processes Run admin/management tasks as one-off processes Comment crer la base de donnes ? Certainement pas sur une instance existante On dmarre une nouvelle instance en mode REPL REPL : readevalprint loop En gros : SSH A la fin de l'opration : l'instance est dtruite
  30. 30. XII. Admin processes
  31. 31. Mais qui s'occupe de collecter les logs, de dmarrer les machines avec les bonnes variables d'environnement, d'automatiquement exposer les services entre eux ?
  32. 32. Dmo time ! Amusons nous avec Flynn https://flynn.io/ Gratuit, open source Facile utiliser en local
  33. 33. Merci pour votre attention