Automatisation des gestionnaires de contenus (CMS)
Presentation tz2018
1. Base de données relationnelles orientée
documents
Projet Gestion Scolaire
Solofo / TechZara
Janvier 2018
2. À propos
Solofo
PHP, MySQL & PostgreSQL depuis 2006
Gestion Scolaire : https://github.com/solofo-ralitera/open-schedule
3. Orientée documents VS relationnelle
Informations sous forme de JSON
ou XML
Informations en colonnes
4. Orientée documents
- pas de schéma
- pas de jointure
- indexable
- données dénormaliser
- structure de données liés au
schéma de la BDD
- pas de redondance
- jointure pour reconstituer
l’information
Relationnelle
5. MySQL & documents
- nouveau type JSON en mysql 5.7.X
- structure hybride : une partie de la BDD structurée et un autre flexible
9. SELECT params->'$.icon' FROM os_resources
SELECT * FROM os_resources WHERE params->'$.icon' LIKE '%home%'
….
cf doc
Exploitation
10. Ce qu’il faut retenir
- Disponible sur MySQL et PostgreSQL
- Structure hybride
- Avantage du relationnel et du document
- Schéma flexible
- Rattraper une erreur de conception
- Indexable
- Requêtable
- JSON directement exploitable
- ORM type JSON ?
15. PHP 7 - quelques dates
- Sortie du 7.0 fin 2015
- 7.1 fin 2016
- 7.2 fin 2017
Support
- 5.6 : fin support sécurité : décembre 2018
- 7.0 : fin support actif : décembre 2017, fin support sécurité : décembre 2018
- 7.1 : fin support actif : décembre 2018, fin support sécurité : décembre 2019
- 7.2 : fin support actif : nov 2019, fin support sécurité : nov 2020
17. Migration
- Par version mineure :
- 5.4 => 5.5
- 5.5 => 5.6
- 5.6 => 7.0
- ….
- Corriger les Deprecated Message
- En prod : Désactiver les message d’erreur
- En dev : activer tous les messages : NOTICE, WARNING, DEPRECATED...
18. Apache / mod_php
- Module d’Apache
- Paquet libapache2-mod-php5
- Configuration:
- LoadModule php_module modules/libphp.so
SetHandler application/x-httpd-php
- !!!!!! A NE PLUS UTILISER, OBSOLÈTE !!!!!!!!
- pas optimiser
- plus maintenu
19. PHP-FPM
- FastCGI Process Manager
- Service indépendant
- Gestion de plusieurs pool
- Paquet : php7.1-fpm…
- Load balancer
20.
21. Cache d’OpCode : OPcache
Précompilation sans OPcache
1 - Parsing => Compilation (Zend opcode) => Exécution
Avec OPcache
1 - Parsing => Compilation (Zend opcode) => mise en cache => Exécution
2 - Vérification dans le cache / mis à jour => Exécution
En prod : opcache.validate_timestamps = 0
23. Cache mémoire / Cache utilisateur
- Persister les sessions en cache mémoire au lieu du file system
- Cache partagé pour le load balancing
- Eviter d’utiliser le file system
- memcached, redis, APCu
24.
25. composer / symfony
- php composer.phar dump-autoload --optimize
- En prod,ajouter l’option --no-dev
- En prod, exclure les répertoires/classes de tests (autoload : exlude-from-
classmap)
- Doctrine
- query cache : query_cache_driver: memcached
- annotation cache : metadata_cache_driver: memcached
- gain >>>>100%
- Twig : utiliser l'extension C fourni par SensioLabs
26. Autres
- HTTP2
- Deflate / Gzip
- Cache http en reverse proxy, ex varnish - surtout pour les CMS
- Ne pas utiliser PHP pour faire tout :
- Moteur de recherche spécialisé, ex SOLR ou ElasticSearch
- Reporting (pdf, xlsx, doc...)
- Images
- Temps réel
- ...
- Malgré tout si votre application est lente, peut être que votre code et #%$”*
Même performance HHVM # PHP7
Abandon support HHVM sur symfony 4, ZendFramwork
Les versions mineurs de PHP ne casse pas la compatibilité
Compatible avec apache et nginx
Possibilité de tourner plusieurs version de php sur un même serveur
Depuis php 5.3
Paquet disponible sur la plupart des distrib linux, pour les distrib redhat => remi collet repo
Différence avec HHVM le compilateur : Parsing => AOT Compiler => Local JIT (HHVM OpCode) => Native Machine code
ZendEngine: 80-90% du temps passé sur syntax validation et compilation, 10-20% pour l'exécution
PHP7 : Nouveau compilateur, optimisé mais plus lent => nécessité d’utiliser un cache d’opcode
Résolution des array static au niveau de la compilation, plus dans le runtime
….
Avec OPcache : temps de réponse -50%
Si optimisation activée : -10%
~20 paramètres pour une configuration optimale
Monitorer l’OpCache pour plus de performance
~20 configurations d’OpCache en production
File system : norme POSIX / ACID => pas de concurrence sur l'écriture => bottleneck
Php7 : Optimisation des array immutables
L’extension twig ne semble pas compiler sur PHP7, à tester