Retour sur le de veloppement d'un site a gros volume de donneés



Documents pareils
e-obs : Conception et utilisation Rémy Decoupes Ether // ums3365

Nouveautés joomla 3 1/14

Informatique & Systèmes de Communication. Stages de 12 à 16 semaines aux Etats-Unis

Vous pouvez trouver un échantillon de mon travail sur

Découvrir le CMS. et l utiliser dans une approche pro!

Echosgraphik. Ce document sert uniquement à vous donner une vision sur ma manière de travailler et d appréhender un projet

Gestion d identités PSL Exploitation IdP Authentic

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Les bonnes pratiques. de l hébergement d un CMS

les techniques d'extraction, les formulaires et intégration dans un site WEB

Jean-Pierre VINCENT Consultant indépendant

Nouveautés de Drupal 8. Léon

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

Performance Front-End

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

L art d ordonnancer. avec JobScheduler. François BAYART

Serveur mail sécurisé

Hébergement de site web Damien Nouvel

Windows Azure. Principales fonctions

Joomla! Création et administration d'un site web - Version numérique

Technologies du Web. Ludovic DENOYER - ludovic.denoyer@lip6.fr. Février 2014 UPMC

Notre processus d embauche

GOOGLE ANALYTICS. Ajout du code de suivi sur PowerBoutique. Ajout du code de suivi Google Analytics. Page 1 / 7 TUTO / GOOGLE ANALYTICS

AngularJS pour une application d'entreprise

FTP : File TRansfer Protocol => permets d envoyer des gros fichiers sur un serveur (ou de télécharger depuis le serveur)

Devenez un véritable développeur web en 3 mois!

WordPress : principes et fonctionnement

Formation Découverte du Web

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É PHP. 27 ans - 6 ans d'expérience

2 Formation utilisateur

Vue d ensemble technique

Loïc Rossignol Ingénieur Consultant

Stéphane DERACO, DSI CNRS l Argos Devops : de l hyperviseur aux conteneurs l 11/12/2014 DOCKER

Par KENFACK Patrick MIF30 19 Mai 2009

Technologies Web avancées. ING1 SIGL Technologies Web avancées

SOA : une brique de la 4 ième génération de l architecture informatique? Hervé Crespel Président du club urba-ea

Rapport de stage. Création d un site web. Stage du 20/01/2013 au 21/02/2013

Connexions à un projet CVS via Eclipse en accès local et distant. 15 Mai 2007

Documentation de conception

Notre Catalogue des Formations IT / 2015

Savoir- Faire Offres mé1ers Offres technologiques

Catalogue Formations Jalios

Intégration du Web 2.0 dans les solutions IBM

Drupal, pour quel usage? Comment se positionne Drupal? Les fonctionnalités de Drupal et de son écosystème. L'architecture technique et logicielle Le

10. Base de données et Web. OlivierCuré

Module BD et sites WEB

SPIP. Gestion de la performance dans SPIP. Préoccupa)on historique

RESUME DE CARRIERE. Alice JULIENNE. 23 ans Nationalité Française Développeur Web Front-End. Compétences

Thème : Création, Hébergement et référencement d un site Web

Module de livraison DPD Magento

Le Cloud: Mythe ou Réalité?

MANUEL D INSTALLATION du module Chronopost pour. version 1.0.5

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Performance web. Mesurer. Analyser. Optimiser. Benjamin Lampérier - Benoît Goyheneche. RMLL Beauvais. 8 Juillet 2015

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Jahia. Guillaume Monnette École Ingénieurs 2000 Marne-La-Vallée IR3

1 Introduction à Emerginov

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

Joomla e édition. et VirtueMart 2 Réussir sa boutique en ligne. Préface de Max Milbers. Valérie Isaksen. Thierry Tardif

Présentation de la solution Open Source «Vulture» Version 2.0


Outils de développement collaboratif

Gestion centralisée d un réseau de sites discrets. Nicolas JEAN

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

MANUEL D INSTALLATION. du module Chronopost pour. version 1.0.0

Hands on Openstack : Introduction

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Programmation Web. Madalina Croitoru IUT Montpellier

Le Cloud Open-Mind! Emilien Macchi

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Document d architecture

RÉALISATION D UN SITE DE RENCONTRE

Pierre Racine Professionnel de recherche Centre d étude de la forêt Département des sciences du bois et de la forêt, Université Laval, Québec

SYSTÈMES D INFORMATIONS

ZADS - Liste des fonctionnalités 1 / 7 ZADS VERSION : 4.97

Initiation ++ pour le

JAB, une backdoor pour réseau Win32 inconnu

Google Tag Manager. «Vous ne verrez plus l'analytics de la même manière» par Ronan CHARDONNEAU

Calendrier. Accèder à nos filières. Inter-entreprises. Informatique Technique. Bureautique. * 0,15 cts la minute

Petite définition : Présentation :

Vulnérabilités et sécurisation des applications Web

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Construire un réseau social avec Symfony Xavier Lacot Clever Age. Symfony Live 11 et 12 juin 2009 Clever Age Xavier Lacot

WordPress, thèmes et plugins : mode d'emploi

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Paris JUG. Spring Batch. Mardi 14 Mai Olivier Bazoud Julien Jakubowski

RAPPORT DE STAGE. Terrasse Hugo 1/12

Architectures d'intégration de données

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

Drupal Développeur. Theming et développement pour Drupal. Une formation Formateur : Fabien Crépin. Drupal Développeur.

Introduction au développement SharePoint. Version 1.0

Serveur de travail collaboratif Michaël Hoste -

Hébergement WeboCube. Un système performant et sécurisé. Hébergement géré par une équipe de techniciens

Visual Paradigm Contraintes inter-associations

MatchPoint SNOW pour SharePoint 2013

Galaxy est une plateforme de traitements (bio)informatiques accessible depuis l'url : (en précisant votre login et mot de passe LDAP «genotoul»).

Exonet : sauvegarde automatisée d une base de données

Transcription:

Retour sur le de veloppement d'un site a gros volume de donneés Par Stéphane «Twidi» Angel Djangocong 2012

Intro : me, my & myself Dev web depuis 14 ans Perl (trop longtemps) Php (malheureusement) Python (c'est un serpent) + frontend + admin site (vite fait) @twidi sur Twitter (et un peu partout sur internet en fait)

Intro : me, my & myself Passé notamment par : Gandi Libération + nombreux projets perso dont...

REPOS.IO «Search and manage code repositories» Recherche sur plusieurs plateformes (providers) : github, bitbucket, google code... Organise tout ce qui est favori / follow / watch Pour chaque utilisateur : Flags (favoris, «check later») Tags (simple, «places» & «projects») Notes descriptives Flux/notifications (plus tard)

Besoins Recherche rapide (car à la base du fonctionnement du site) Tagging automatique (aide à la recherche) Nombre croissant de providers Mise à jour (très) fréquente des données Automatisation (workers, scaling...)

Problématique(s) Multiple providers Beaucoup de données Github : 2.000.000 projets Bitbucket : 90.000 Google code : 260.000 Sourceforge : 450.000 Pypi : 20.000 Certains objets mis à jour très souvent Différentes API (voire pas du tout, cf Google)

Résolution Mes solutions (ou tentatives) pour : Stockage Récupération des données Recherche Optimisations frontend

Stockage 2 modèles principaux : Repository & Account Un modèle abstrait commun PostgreSQL Backends à la «django-social-auth» Base commune (interface, pour normaliser les appels) + un par provider Identifiants de projets «user/repository» sur Github «repository» sur Google code Résolution Pas de «unique» au niveau de la DB Mais au niveau du code : backend + «identifiers» Identifiers => tuple en fonction du backend (sert aussi pour les urls) Redis (compteurs «xx a yy followers»)

Récupération des données Asynchrone (of course) Pas de celery (machinerie trop lourde) Redis (listes bloquantes) Un script (python) par type de worker : Chaque worker lié à une liste Redis (ou plusieurs pour gérer la priorité) Récupération chez le provider Mise à jour moteur de recherche Mise à jour des compteurs (dénormalisation, stockés dans redis) + un worker «management» qui gère le nombre de workers en fonction des besoins (et le nombre de serveurs si vraiment besoin) Le tout via supervisor

Workflow Un utilisateur se connecte pour la première fois => On récupère ses «objets» : repositories, followers... récursivement sur 3 niveaux Il revient, pas de mise à jour depuis 2 jours => On recommence, sur 2 niveaux Un objet est accédé sur le front, sans mise à jour depuis un certain temps (calculé via date de dernière mise à jour chez le provider, et plus globalement un «score» interne) => On le met à jour Possibilité de demander une mise à jour depuis le front Le tout de façon asynchrone bien évidement, et avec gestion de priorité (les objets d'un nouvel arrivant seront récupérés en priorité par rapport à une demande sur le front, elle même devant une simple mise à jour automatique)

La recherche Recherche «full text» Solr + haystack Gestion manuelle (via worker) de la mise à jour des entrées dans Solr lors de la modification d'un objet Récupération des IDs uniquement Le template de chaque objet est caché via django-advcache-tag et retrouvé via l'id Problème pour filtrer parmi, par exemple, les repositories d'un user (pas encore de solution, sauf l'équivalent d'un «in», lourd)

Optimisations frontend Cache ORM johnny-cache non pertinent (écritures permanentes) django-cache-machine... ou rien, trop de requêtes différentes, mais simples Templates Gros fan de «extends» et «include» Moteur de django très lent (clairement le bottleneck) django-template-preprocessor django-adv-cache-tag django-include-strip-tag (pour s'en sortir avec les newlines)

A propos de Repos.io Nouvelle version alpha en ligne depuis quelques jours Design «responsive» via css (à l'origine composé de tableaux et de twitter bootstrap) Side project depuis Août (SO LONG!) Hébergé sur dotcloud Code source dispo sur github.com/twidi/repos.io À venir : Flux/notification de mise à jour des projets «more like this» «explore» (et plein de choses super intéressantes a dire sur le frontend, vraiment : html5, history API, css3 à fond, js-or-not...) PS : si quelqu'un est intéressé par l'aventure...

Des questions?