technologies @pearltrees

février 21st, 2011 · 4 Comments ·

Que cela soit sur ce blogue ou sur participation@pearltrees.com, vous avez été nombreux à vouloir en savoir un peu plus sur les technologies utilisées pour fabriquer toutes ces perles. Le web, internet et l’informatique en générale étant une succession de technologies empilées les unes sur les autres, je vais essayer de lister quelques technos essentielles ainsi que représenter de manière simplifiée notre architecture de production.

Interface utilisateur

Flex
Flex
est un Framework ActionScript (Flash) qui nous permet de développer l’interface utilisateur de la version web. Il nous a permit de développer très rapidement une interface riche et de la déployer sur un très grand nombre de terminaux. Aujourd’hui notre challenge principal est la maitrise de la taille de l’application générée.

HTML
Utilisé principalement pour nourrir les moteurs de recherche et proposer une version alternative aux terminaux ne supportant pas flash. L’ensemble du contenu de pearltrees est disponible au format HTML. Nous avons également beaucoup travaillé sur HTML lors du développement de l’embed pearltrees, avec des problématiques d’intégration dans des milieux non maitrisés, voir même hostile :) Nous y utilisons des propriétés HTML5.

Javascript
Nous utilisons javascript dans un très grand nombre de cas, animations du browser pearltrees, embed, addons… Nous utilisons JQuery pour les manipulations du DOM.

RDF
Le RDF est un format du web sémantique que nous utilisons pour l’export des données de pearltrees. Plutôt que de créer encore un schéma XML de plus, RDF est un format plus adapté pour le partage de données liées. Et nos perles sont à la fois liées entre elles et liées à des URLs.

XUL
XUL
est le langage de présentation utilisé par mozilla. Nous l’utilisons dans l’addon Firefox de pearltrees.

C++
L’addon IE est entièrement développé en C++. Ayant des addons sur Firefox, Chrome et Safari, IE est très clairement la plateforme la plus pénible pour y développer des addons.

Objective-C
Objective-C
, pour ce que vous imaginez, mais je ne peux pas en dire plus ;)

Côté serveur

Java
Nous utilisons Java 6 et Tomcat pour faire tourner l’application pearltrees (nom de code : “oyster”), ainsi que notre algorithme de proximité: “Tree Rank”. Grâce à sa “secret sauce” Tree Rank nous permet de calculer la proximité des pearltrees les uns par rapport aux autres et de faciliter la découverte de contenus proches. Historiquement en PHP, depuis septembre 2009 Java est aujourd’hui utilisé dans la majorité de nos programmes serveurs. Nous utilisons Lucene comme base de notre moteur de recherche.

PHP
Notre backend utilise toujours PHP. Historiquement sur Zend Framework et Apache, la majeure partie du code serveur est maintenant en Java. Nous avions des problèmes de performance avec le framework Zend et en même temps de l’expertise en Java, le choix de migrer c’est vite imposé. Ceci-dit nous avons encore des applications en Zend Framework puisque que nous utilisons Piwik comme outil de stats.

MySQL
Comme base de données principale, nous utilisons MySQL 5.1 sur 2 gros bébés (48Go Ram, 32 CPU) en réplication master-slave. La base contient 35 tables et plus de 60 millions de lignes.

NFS
Notre serveur de fichier utilise NFS v3 pour partager logos, avatars et thumbshots. Notre serveur NFS est loin d’être configuré de manière optimale et il est souvent source de lenteur dans la livraison de nos fichiers. Un passage sur une solution de cloud computing semble inévitable à moyen terme. Nos 160Go de fichiers sont également répliqués à travers  le monde via CDN (level3).

Xen
Xen
permet la virtualisation de notre programme “Fetch” qui tourne sur 16 machines virtuelles. Fetch gère entre autre la génération des thumbshots et la préparation du pré-chargement des pages lors de la navigation dans pearltrees. Nous sommes aujourd’hui capable de traiter 10.000 URLs / h. Nous sommes donc capables de reprocesser la totalité de notre base de thumbshots en 15 jours.

Bash, Python
L’administration des machines se fait principalement à l’aide de scripts. Ces derniers sont logiquement en bash et en python. Nous utilisons également python dans un programme permettant de detecter les URLs n’acceptant pas d’être vues dans une iFrame.

Backend

Bugzilla
Nous utilisons Bugzilla pour définir la priorité des bugs et suivre leur évolution. Aujourd’hui l’état de notre bugzilla est le suivant:

Subversion
Tout notre code est versionné et découpé en branches grâce à SVN. Nous en sommes aujourd’hui à plus de 23.000 commits !

Architecture de production

Ci-dessous la version simplifiée de l’archi actuelle. Nous avons également une architecture de pré-production semblable à l’archi de production et également une architecture de développement avec des mécanismes de déploiement vers la “prod” ou la “preprod”.

Tags: Uncategorized


4 responses so far ↓

  • [...] Ce billet était mentionné sur Twitter par Pierre-E. Daviet, Nicolas Cynober, Tristan, François-Alb. Gandon, Othman Nasrou et des autres. Othman Nasrou a dit: RT @Pedaviet: Génial ce post !!!! RT @cyno: technologies @pearltrees : http://bit.ly/giAmC1 - Découvrez les entrailles de la bête [...]

  • Pierre-Antoine // fév 21, 2011 at 2:24

    Hyper intéressant ! Merci pour toutes ces infos.
    Combien de lignes de codes pour l’application ? :)

  • Très bien cet article!
    Quelques questions/remarques:
    - “48Go Ram, 32 CPU” : 32 CPU ça fait un peu trop pour un serveur, tu parles de 32 cores (avec 4 CPUs 8 cores par exemple) ou bien c’est une typo?
    - Utilisation de virtulisation XEN : pourquoi? sur quelle base? RedHat? Avez-vous envisagé Vmware? ou KVM qui est maintenant mainline dans le kernel Linux?
    - Tu opposes NFS à Cloud, ce n’est selon moi pas antinomique, même si tes données sur gérés par des serveurs (probablement des VMs) “dans le Cloud”, elles résideront probablement sur un systeme de stockage partagé dans l’infrastructure interne du fournisseur de Cloud (en NAS avec NFS, iSCSI, etc..ou en SAN FiberChannel ou FCoE). Tu parles de “serveur NFS” posant des poblemes de perfs, c’est un serveur générique avec des disques durs locaux et un daemon NFS ou bien est-ce une véritable baie de stockage avec des têtes NFS?
    - Objective-C….’est pour quand? :)

  • @Pierre-Antoine

    Ce qui serait intéressant c’est le nombre de ligne de codes effectifs (sans les commentaires), le nombre de classes, etc… Ca existe en Java mais j’ai pas encore trouvé d’outil qui ferait ça sur mon Flash Builder. De mémoire je crois que Flash/Flex c’est plus de 150.000 lignes.

    @Laurent

    - Ouai j’ai pas mal vulgarisé ;) Intel quadri-Xéon 4 x E7520
    - Xen sur debian. J’ai pas participé au choix de la techno mais je sais qu’on avait prototypé avec différentes solutions. Xen était plus proche de nos besoins.
    - Je me suis mal exprimé. Je n’oppose pas NFS à Cloud. Je dis “on a des soucis avec notre NFS qui est mal configuré et qui commence à se remplir” => “On va faire du tunning à court terme et du cloud à moyen terme”. C’est une machine physique avec 4 disques de 500Go en RAID5 et un NFS v3 dessus.
    - Indice: chemise à fleurs :)

Leave a Comment