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. Remerciements
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. Quand tout coup, les soldes !
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. 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. Ou alors ... Adapter l'infrastructure au trafic. Ajouter de
la puissance la veille des soldes. Et la retirer ensuite.
8. L'objectif But du jeu Passer de gauche droite. Pouvoir
rajouter des instances chaud en quelques secondes.
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. 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. II. Dependencies Explicitly declare and isolate
dependencies Grce Composer, c'est dj le cas.
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. III. Config
14. III. Config SYMFONY_ENV=prod SYMFONY__DATABASE_USER=myuser
SYMFONY__DATABASE_NAME=myshop
15. IV. Backing Services Treat backing services as attached
resources La base de donne est une ressource. Attention ! Les
sessions aussi !
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. IV. Backing Services Dpendances snc/redis-bundle: ~1.1
predis/predis: ~0.8 Configuration
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. 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. V. Build, release, run
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. VI. Processes Utiliser un Procfile. web:
bin/heroku-php-nginx -C conf/nginx.conf web/ support: php
app/console support:run
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. 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. IX. Disposability Maximize robustness with fast startup and
graceful shutdown
26. X. Dev/prod parity Keep development, staging, and
production as similar as possible Merci docker !
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. XI. Logs Heureusement, Monolog est l !
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. XII. Admin processes
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. Dmo time ! Amusons nous avec Flynn https://flynn.io/
Gratuit, open source Facile utiliser en local