Construire un réseau social avec Symfony Xavier Lacot Clever Age
Plan de présentation 1. Qu'est-ce qu'un réseau social? 2. Pourquoi Symfony pour un réseau social? 3. Architecture et protocoles 4. Mise en oeuvre basique 5. Utilisez les plugins! 6. Déploiement : pensez «Cloud» 2
Qu'est-ce qu'un réseausocial social?? Qu'est-ce qu'un réseau 0,50cm http://www.flickr.com/photos/marmotte73/2485775993/ 3
Qu'est-ce qu'un réseau social? 9 millions d utilisateurs français 160 millions d utilisateurs (Monde) 100 millions d utilisateurs connectés par jour (Monde) 0,50cm 1,5 millions de Tweets par jour (Monde) Un nouveau membre par seconde En 6 ans, 10 millions d Européens (1/4 du total) 4
Sur le Web... 0,50cm 5
Besoin de nouveaux réseaux sociaux? Besoin de nouveaux réseaux sociaux? Oui : Réseaux professionnels et/ou spécialisés Pousser la standardisation des APIs / des supports Ou pas : Déjà trop de réseaux La plupart des domaines sont couverts (général, photos, vidéos, musique, écriture, voyages, etc.) Difficile pour les utilisateurs de maintenir une activité décente sur chaque réseau 6
Typologie d'un réseau social Réseau : Noeuds du réseau : Individus, Organisations 0,50cm Arcs du réseau : les «relations» unidirectionnelles, bi-directionnelles, conditionnelles, modérées? 7
Sur le Web... Plusieurs niveaux de points de vue : L'individu Ses groupes Son réseau 0,50cm Son réseau étendu («les amis de mes amis») Le réseau social dans son ensemble 8
Fonctionnalités générales Le coeur : les fonctions de réseau Membre Lien Monde extérieur («tribu») Le bonus mais essentiel : Une API Expliciter clairement la propriété des données Permettre le contrôle de la diffusion Offrir des outils d'export / de sauvegarde 9
Fonctions de «membres» Gestion du profil Observation de l'activité du réseau Mur / Lifestream Notification mail Messagerie Ensemble d'interactions Statut / Micro-Blogging / Textes Photos / médias Chat Calendriers / Évènements Applications éventuellement externes 10
Fonctions de «liens» Gestion des demandes d'amis Relais des demandes (suggestions) Notation / Scoring / Témoignagnes Fonctions virales Suggestions de membres / applications Jeux viraux Remontée d'une savoir collectif Nuages de tags Bookmarking social 11
Fonctions de «groupes» Administration des groupes Fonctions disponibles Visibilité des données Co-production de contenus Wikis Forums Rebond sur les ressources publiées Suivi d'événements (liste de participants) Ajout de médias Animation / Dynamisation : Quizz, sondages, etc. 12
ajout de contacts Relations symétriques Relations asymétriques 13
Page de profil 0,50cm 14
En résumé... Nécessité de bien définir le projet Typologie du réseau Types d'interactions possibles Éléments caractéristiques une page de profil par individu un outil permettant de créer des relations la liste des relations un ensemble d'interactions possibles (modules) 15
Pourquoi Symfony? 1. 2. 3. 4. 5. 6. Qu'est-ce qu'un réseau social? Pourquoi Symfony pour un réseau social? Architecture, protocoles, solutions Mise en oeuvre basique Utilisez les plugins! Déploiement : pensez «Cloud» 16
Pourquoi un framework? Framework de développement : Gain de temps, productivité accrue Homogénéisation du code Favorise la séparation du code métier Facilite la maintenance Assurance qualité Marché naissant, peu de produits offrant de la visibilité Coller au mieux à «votre» réseau social? 17
Pourquoi Symfony? Un framework «toutes options» cli mvc ajax crud cache events routing +500 plugins performance documentation générateur d'admin internationalization ORMs (Propel et Doctrine) tests unitaires et fonctionnels 18
...et pourquoi pas? Compromis à faire : Montée en charge (compensée par le cache) Montée en compétences (variable mais rapidement amortie) Disponibilité des compétences (moindres que PHP en général) Flexibilité (variable) Risques liés à un développement spécifique vs. l'intégration d'un produit Un bon choix évite beaucoup de déconvenues 19
Comment choisir un framework? Objectif : se faciliter la vie! Privilégier : les projets maintenus et fortement adoptés les projets fortement documentés les architectures ouvertes (plugins, modules etc.) Éviter : Le manque de spécifications La non-utilisation du cache (sauvez vos machines!) Les outils inadaptés (i18n, version de PHP, ORM etc.) Les choix à court terme 20
Architecture, Protocoles, solutions 1. 2. 3. 4. 5. 6. Qu'est-ce qu'un réseau social? Pourquoi Symfony pour un réseau social? Architecture, protocoles, solutions Mise en oeuvre basique Utilisez les plugins! Déploiement : pensez «Cloud» 21
Objectifs de l'architecture Permettre de nombreuses contributions Rapidité, instantanéité Permettre des évolutions fonctionnelles rapides Supporter de Être tolérant à la panne Ne pas perdre de données, jamais! GROS volumes (ma.gnolia inside) 22
Protocoles et solutions Évidemment : HTTP (/Ajax) Authentification : OpenId / Oauth / autre? XML / REST XMPP (messagerie, distribution de messages) Tâches asynchrones («tasks» Symfony) Files de messages (lifestreams) : dropr, beanstalkd 23
Authentification OpenId, Oauth (#fail), Facebook Connect, etc.? OpenId Oauth identifiant mot de passe Utilisez et étendez sfguard / sfdoctrineguard 24
Mise en oeuvre basique 1. 2. 3. 4. 5. 6. Qu'est-ce qu'un réseau social? Pourquoi Symfony pour un réseau social? Architecture, protocoles, solutions Mise en oeuvre basique Utilisez les plugins! Déploiement : pensez «Cloud» 25
Mise en oeuvre XMPP HTTP HTTP lifestream auth delegation diffusion / réception de messages Bus de messages Application externe membre - membre membre - app Monitoring d'activité app - app 26
Mise en oeuvre Utilisation des mécanismes du coeur du réseau lifestream Application interne notation, tagging, commentaire, micro-actions Applications installées sf_guard_user application id username... id name stripped_name... Sous forme de plugin : cycle de vie indépendant déléguer le développement 27
Utilisez les plugins! 1. 2. 3. 4. 5. 6. Qu'est-ce qu'un réseau social? Pourquoi Symfony pour un réseau social? Architecture, protocoles, solutions Mise en oeuvre basique Utilisez les plugins! Déploiement : pensez «Cloud» 28
Plugins Symfony propose de très nombreux plugins Gestion des utilisateurs et authentification Performance (minifying, cache) Sécurité (ssl, filtres, etc.) Fonctionnalités (cms, blog, forum, commentaires, etc.) Gestion de médias Widgets Recherche Divers 29
Plugins État des lieux : Qualité variable. De l'excellent à l'anecdotique ~ 600 plugins, classés et évalués 30
sfpropelactastaggablebehaviorplugin (ouf!) Attachement de tags à des objets Recherche par tag(s) Recherche des tags liés Génération de nuages de tags Support des triple-tags Passe à l'échelle 31
sfpropelactastaggablebehaviorplugin (ouf!) gettaggedwith() duration 0,0200 0,0180 0,0160 0,0140 0,0120 0,0100 0,0080 0,0060 0,0040 0,0020 0,0000 4300 12300 20300 28300 36300 44300 52300 60300 68300 76300 84300 92300 100300 108300 116300 124300 132300 140300 148300 156300 164300 172300 180300 188300 196300 300 8300 16300 24300 32300 40300 48300 56300 64300 72300 80300 88300 96300 104300 112300 120300 128300 136300 144300 152300 160300 168300 176300 184300 192300 nombre d'objets 32
sfpropelactastaggablebehaviorplugin (ouf!) getpopulars() duration 1,2000 1,0000 0,8000 0,6000 0,4000 0,2000 0,0000 3900 11100 18300 25500 32700 39900 47100 54300 61500 68700 75900 83100 90300 97500 104700 111900 119100 126300 133500 140700 147900 155100 162300 300 7500 14700 21900 29100 36300 43500 50700 57900 65100 72300 79500 86700 93900 101100 108300 115500 122700 129900 137100 144300 151500 158700 165900 33
sfpropelactastaggablebehaviorplugin (ouf!) getrelatedtags() duration 0,1400 0,1200 0,1000 0,0800 0,0600 0,0400 0,0200 0,0000 4300 12300 20300 28300 36300 44300 52300 60300 68300 76300 84300 92300 100300 108300 116300 124300 132300 140300 148300 156300 164300 172300 180300 188300 196300 300 8300 16300 24300 32300 40300 48300 56300 64300 72300 80300 88300 96300 104300 112300 120300 128300 136300 144300 152300 160300 168300 176300 184300 192300 34
http://www.flickr.com/photos/kky/704056791/ Déploiement : pensez «Cloud» 35
Déploiement : pensez «Cloud» Besoin d'une infrastructure extensible Faire face au succès Réagir en cas de pic d'affluence Plusieurs solutions envisageables : Plusieurs frontaux physiques non spécialisés Plusieurs frontaux spécialisés Une solution à base de virtualisation 36
Déploiement : pensez «Cloud» Les avantages du Cloud Capacité à étendre son infrastructure de manière très rapide (quelques appels à l'api d'amazon, par exemple) Automatiser l'ajout de nouvelles machines en cas de pic détecté Pouvoir mettre à jour plus simplement (installation sur un seul frontal, puis duplication de la VM) 37
Déploiement : pensez «Cloud» 1 <img src="http://media.clever-age.com/images/logo.png" alt="" /> 2 3 DNS TTL 60s = CDN 38
Dernières optimisations envisageables serveurs memcache sur chaque frontal Réplication (ou MySQL cluster) tmpfs si aucune autre solution Travaillez sur le cache! Certains éléments peuvent être externalisés (contenu javascript, etc.). ex. autocomplete non ajax 39
En résumé... 40
En résumé... bétonnez la définition du projet Typologie du réseau Droits d'accès aux informations Pensez aux fonctions d'export et d'extension du réseau. Cherchez dans les standards existants. choisissez les bons outils Symfony seul ne suffit pas utilisez la modularité de Symfony abusez des plugins, mais testez-les utilisez une architecture «scalable» 41
Questions 42
Comment évaluer un framework? Livre blanc «frameworks php pour l entreprise» Disponible gratuitement sur http://www.clever-age.com/ Explication détaillée des critères de choix Comparaison de quatre frameworks PHP majeurs : Cake PHP Code Igniter Symfony Zend framework 43
Nous contacter Clever Age : Agences : Téléphone : 37, boulevard des Capucines 75002 Paris Lyon, Bordeaux +33 1 53 34 66 10 Web : http://www.clever-age.com/ Contact commercial : commercial@clever-age.com Contact technique : technique@clever-age.com 44