• Ce blog — désormais archivé — est en lecture seule.

#forumPHP : résumé de ma première journée

Première journée passée à la Cité des Sciences à Paris à l’occasion du Forum PHP organisé par  l’AFUP. Excellent moment, plein de cadeaux, de têtes plus ou moins connues (que je n’ai pas trop osé aborder d’ailleurs…) et bien sûr d’excellentes conférences. Voici le résumé de ma journée, livré brute (ou presque :-) ).

Rasmus Ledorf

Première conférence du créateur de PHP. Après quelques minutes de galère pour projeter sa présentation, Rasmus a présenté la création puis l’évolution de PHP. Ce que l’on doit retenir : « PHP isn’t cool but what we can do with is » et « i don’t have a cell phone ». Voilà, vous savez tout.

Industrialisation PHP par Canal+

Présenté par Raphaël Carles

Canal+ gère une affluence d’environ 700000+ visites par jour (en pic). Leurs développements s’appuient sur Symfony, ezPublish, Zend et Magento.

Ils virtualisent leurs serveurs web et applications, utilisent des load balancers redondés. Une bonne idée est d’exécuter les batchs sur un serveur virtuel dédié. PHP a été choisi pour sa souplesse en terme de déploiement et de packaging. Leurs exigences sont indépendantes de la technologie employée. Ils ont fait le choix d’utiliser des CMS et solutions PHP pour garantir une maitrise des développements.

Zend Plateform leur permet d’analyser et suivre de manière permanente la santé des sites. Ils ont mis en place des normes d’installation et de configuration des solutions. Ils ont une démarche de capitalisation permanente. Ils ont mis en place des bonnes pratiques au niveau SEO, perfs, navigateurs, développements.

Ils disposent d’un environnements de livraison spécialisés :

- recettes fonctionnelles pour les MOA

- recettes techniques pour intégrateurs et hébergeurs

Chaque commit est constitué d’un patch du code, des commandes SQL, une liste des fichiers modifés et une liste des bugID.

Sans surprise, on retrouve Capistrano au niveau automatisation des déploiements. Ils maitrisent la logistique des déploiements avec des fiches récapitulant des informations telles : planification, horaires automatisés, …

Niveau outils en vrac, ils utilisent : SVN, Zend Studio, Zend Server et Zend FW, UML / Merise.

Ils ont développés un outil de pilotage de SVN (fork de webSVN) et des sources couplé à un serveur de développement centralisé :

- gérer les effets de bord en temps réel

- centralisation des configurations

- verrouillage des sources sur le serveur

Ceci nécessite un développement linéaire. D’autre part, leur outil va générer de la documentation automatiquement. Un autre outil développé concerne le suivi des livraisons (couplé au bug tracking).

Mon avis : Cette présentation n’était pas réellement intéressante. Elle n’apprend rien et l’orateur n’a pas été concluant, il nous tournait le dos… Cependant on voit bien que Canal+ n’est qu’en cours d’industrialisation, il n’y avait pas de retour d’expérience réel et c’est bien dommage.

Propel : apprendre en persistant

Présenté par Arlo Borras

Approche en plusieurs niveau pour appréhender Propel :

Niveau 1 : connaître PDO

Niveau 2 : Faire des objets

ActiveRecord : design pattern permettant à un objet de se gérer (se sauvegarder, se mettre à jour, …)

Encapsulation des requêtes SQL.

PDO doit être aidé pour gérer des éléments NULL : utilisation de l’attribut PARAM_NULL.

Niveau 3 : Ne pas réinventer la roue

Utilisons Propel !

Niveau 4 : Maitriser l’outil

Avantages de Propel :

- PHP5.3 ready (namespaces)

- Connexion implicite à la demande

- Sauvegarde en cascade

- Rapidité :

Avec l’utilisation du design pattern Identity Map = persistance mémoire de ce qui a déjà été demandé.

Et l’utilisation de l’hydratation à la demande via un « formatter » : collection vide, itération hydrate un à un les éléments.

- Validators, Behaviors.

- Gestion de l’héritage : table inheritance : single inheritance (1 table) ou concret inheritance (plusieurs tables)

- Et… Logging, hooks, nested sets, N-N, 1-N, runtime introspection, packages, nested transactions, master/slave, pager, query cache, …

Niveau 5 : dépasser l’outil

Penser aux objets/en objet.

!! Domain-Driven Design !!

L’ORM transforme une BDD en base de d’objets.

Un objet persistant est un objet avant tout.

La persistance d’un objet n’est qu’une caractéristique.

Mon avis : j’attendais cette conférence plus que tout pour rencontrer François Zaninotto, malheureusement il n’a pu venir et Arlo l’a remplacé. Bon tour d’horizon de Propel avec une présentation Prezzi très réussie.

Magento : un framework e-commerce

Par Hubert Desmarest, Guillaume Babik et Roy Rubin (fondateur de Magento)

Trois mots d’ordre pour Magento : Flexibility, scalability, growth

Magento solution c’est :

- Design, development, integration

- Magento eCommerce, Entreprise, Professional & community

- Industry partners

- Hosting environment

- Magento mobile commerce (browser, iPhone app)

- Magento connect / local (extensions market place)

Magento dispose de plus de 3000 extensions. Ecrit en PHP5 en utilisant Zend Framework.

« Upgradeability with customizations : core, local, community » -> Séparation physique des éléments.

« Modularity & flexibility are Key » -> architecture élaborée.

Un point sur l’API « core » :

- Web services : SOAP & XML RPC protocols (catalog, customer, order)

- Tout ce qui est disponible devrait l’être via web services.

- Plusieurs langues, marques sur un système unique à maintenir : Multi-store systems.

Magento au niveau SEO c’est : 100% SE friendly, site map, url rewrites, meta-informations, …

Magento est orienté marketing et dispose d’outils de promotions comme les réductions basées sur des règles.

Au niveau administration : gestion du catalogue, du contenu et également des commandes mais une fonctionnalité étonnante : la possibilité pour l’admin d’ajouter des éléments dans le panier d’un client. On note aussi la présence d’un outil de reporting.

Magento permet les ventes privées en natif, tout comme la navigation mobile.

Avantages de Magento (point de vue intégrateur) :

- modèle très souple

- au service du marketing

- les « multi »

- licence : cout nul ou moindre

- approche logicielle

- solution pérenne

Mais :

- peu documenté

- difficulté d’apprentissage : 4 à 6 mois pour un bon développeur Zend

- modèle de données et applicatif lourd

Mon avis : Magento me semble sexy. Les orateurs n’ont pas caché son côté « usine à gaz » mais je pense qu’il peut valoir le coup, en tout cas, la présentation donnait envie d’essayer :)

Les frameworks, essentiels dans l’écosystème PHP

Par Bastien Jaillot, Xavier Lacot

On attaque avec une réflexion sur les solutions possibles pour réaliser une application web : solutions intégrées ou frameworks.

Considérations :

- complexité

- besoins

- méthodologies

- nouvelles fonctionnalités ? Suppression de fonctionnalités

- Plugins/extensions existent, couvrent les besoins ?

La première conclusion est la suivante : une solution intégrée est souvent une bonne solution car elle a permet de gagner du temps, de l’argent et évite la pression. Une solution intégrée permet de ne pas réinventer la roue. : c’est parfait pour des besoins communs.

Mais pas de besoins communs, alors il faut :

- hacker

- patcher

- extensions : mais pas forcément étendables

- jeter et recoder en utilisant un FW

Donc on recommence et on définit les vrais besoins ! La bonne question c’est : Temps pour bidouiller versus temps pour construire !

On passe ensuite aux critères de choix d’un framework. Les objectifs généraux sont les suivants :

- accélérer les dévs

- simplifier les MAJ et évolutions

- améliorer les perfs

- internationalisation : envisager l’avenir plus sereinement

- améliorer la qualité

- industrialiser la production

- ne plus réinventer la roue

- profiter du travail des autres

Et surtout se faire son idée. Ce n’est donc pas évident. Il faut également prendre en compte un tas de paramètres tels : risques, perfs, sécurité, modèle de conception, outillage, respect des standards, extensibilité, i18n, intégration des briques externes. Il est ensuite démontré que travailler sans framework en entreprise n’est pas simple, voire quasiment pas faisable à cause des méthodes de travail, des procédures diverses, …

Les frameworks offrent la possibilité de faire des tests unitaires, fonctionnels, … Et surtout dispose de métriques ! Ensuite, on a une présentation des différents frameworks : avant, maintenant, bientôt. Les nouvelles tendances sont :

- injection de dépendances

- utilisation des namespaces

- retrait des singletons

- plus légers

En d’autres termes : abandon progressif de la génération actuelle des frameworks. L’avenir se concentre sur les performances.

Enfin, les derniers mots mettent en avant le concept suivant : ne pas javaiser PHP !

Mon avis : Cette présentation donne des billes pour ceux qui pensent encore que les solutions toutes faites sont meilleures quelque soit les problématiques. J’ai bien aimé la présentation et son enchainement.

Optimisations des performances LAMP

Par Cyril Pierre de Geyer et Guillaume Plessis

Premièrement, on doit savoir ce qu’il se passe :

- Logs accès, erreurs

- Xdebug -> profiling

- Requêtes lentes & sans indexes

- Journal des requêtes

Il est conseillé de mettre en place des outils de monitoring :

- Nagios, Zabbix (graphes)

- Cacti, Munin (graphes)

PHP : Pinba (exectime, mémoire, …), Zend Plateform

On doit surveiller :

- OS : CPU, RAM, Réseau

- Apache : disponibilité, requêtes par seconde, temps de réponse

- PHP : Pinba

- MySQL : requêtes par seconde, connexions, innodb_buffer_pool

Après, on va simuler :

  • Tirs de charge

  • Outils : Jmeter, Funkload, Siege, apachebench

Attention à rejouer les tests dans le même contexte : tir de charge de référence.

Ensuite on va analyser :

- Profiling : améliorer les performances

- Détecter les goulots d’étranglement

- Outils : Xdebug, KcacheGrind, webgrind, ZendServer

Et enfin, on va améliorer :

D’abord PHP :

é Opcodes : APC, Xcache, Zend Optimizer

é Script PHP -> Opcode -> Exécution

Puis Apache :

- KeepAlive

- ServerLimit, MaxClients

- MaxRequestsPerChild

- désinstaller les modules non utilisés

- privilégier d’autres serveurs http : Nginx pour le contenu statique

- reverse proxy cache http : varnish

- Compression Gzip/Deflate

- En-têtes Expire

- Etags

Et maintenant, améliorer la base de données :

- Choisir le bon système : Linux 2.6 64bit (60% de perfs en plus face à 2.4)

- Bonne distrib MySQL

- Bon moteur de stockage :

  • MyISAM, InnoDB, HEAP, Archives, …
  • MyISAM : rapide mais ne monte pas en charge, pas transactionnel
  • InnoDB : plugin de MySQL. Plus robuste, transactionnel, …
  • HEAP : en mémoire
  • Archives : informations sans effacement

- Profiling / EXPLAIN

- Optimisation des requêtes et du modèle

- Réplication (maitre/esclave, maitre/maitre)

- Sharding : répartir les données sur différentes grappes de calcul et agréger les résultats.

Mon avis : Excellent ! Je connaissais pas mal de choses sur le sujet mais j’ai appris quelques trucs et astuces qui feront l’objet d’un futur article :)

Introduction au monde No-SQL

Par Damien Tournoud

Plusieurs besoins amènent au monde No-SQL :

- Stocker temporairement ses données : Memcache(d)

- Stocker des données simples : Redis

- Stocker des données structurées : MongoDB, orientée document, non relationnelle, horizontalement scalable par sharding.

En No-SQL on parle de Documents : ce sont des données en Json. On parle également de Collections, des ensemble de Documents.

- Gérer une file d’attente : Beanstalkd (et Pheanstalk pour PHP)

D’autres outils :

- RabbitMQ : implémentation opensource de AMQP.

- Amazon SQS : file d’attente SaaS, API REST

- Indexer en full-text : Apache Solr (basé sur Lucène), Sphinx (écrit en C++)

- Autres (pour les graphes, …) : FlockFlockDB, pas d’intégration facile en PHP, développé par Facebook.

- Bases massivement distribuées éventuellement consistantes : HBase, Cassandra. Le conférencier ne conseille pas d’explorer ces pistes, c’est très compliqué.

Mon avis : Bonne conférence mais pas assez technique. La présentation est bien mais ce fût trop « introduction », ce qui est dommage. Cependant, Damien est sympa, trolleur également mais il a fait une présentation très vivante et très intéressante.

Avis général

Excellentissime ! Des gens cools, des conférences extras, des stands, du café (ahah), … Organisation tip/top, bref rien à dire pour cette première journée.

  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • FriendFeed
  • LinkedIn
  • MySpace
  • Netvibes
  • PDF
  • Ping.fm
  • RSS
  • Technorati
  • viadeo FR
  • Wikio
  • Yahoo! Buzz

Related Posts

Cet article a été publié dans ForumPHP, Ma vie avec les mots-clefs : , . Bookmarker le permalien. Les commentaires et les trackbacks sont fermés.

2 trackbacks

  1. [...] Ce billet était mentionné sur Twitter par William DURAND et William DURAND, William DURAND. William DURAND a dit: New post : #forumPHP : résumé de ma première journée http://bit.ly/bUkh7K [...]

  2. [...] et passionné ! #symfony #Diem #Git #Nginx #WebPerfsAller au contenuCV – Curriculum Vitae« #forumPHP : résumé de ma première journée#forumPHP : résumé de ma seconde journéePar Will | Publié : 21 novembre 2010Second jour au [...]