Coulisses techniques : chez Quora, de l'open source à tous les étages

Le site de questions-réponses a fait, dès son origine, des choix techniques forts. Dont certains hérités de Facebook d'où sont issus ses deux fondateurs.

Depuis avril dernier, Quora parle français. Le célèbre réseau social américain de questions-réponses permet de savoir dans la langue de Molière "Quelle est la meilleure recette de soufflé au fromage ?" ou "Quels sont les Mooc gratuits pour apprendre Python ?". Si ce type de sujet se déniche aussi sur les forums de discussions, la force de Quora repose sur l'expertise de ses contributeurs, inscrits sous leur vraie identité, et la pertinence des réponses qu'ils apportent. "Humaines", argumentées et issues de sources variées, ces réponses dépassent souvent en qualité celles délivrées par les moteurs de recherche.

Fondé en 2009 par deux anciens de Facebook (Adam d'Angelo et Charlie Cheever) et valorisé 1,8 milliard de dollars, Quora a atteint une audience de 200 millions de visiteurs uniques mensuels. Pour amortir cette croissance exponentielle, la licorne californienne a dû fait des choix forts en matière d'infrastructure technique. Comme d'autres stars du web, elle a opté dès le début pour le cloud plutôt qu'une ferme de serveurs internes. En l'occurrence, celui d'Amazon Web Services (AWS). Amazon EC2, EBS, S3, RDS, Cloudfront... Quora utilise un grand nombre de services d'AWS, des machines virtuelles au stockage en passant par le réseau de diffusion de contenu (CDN). "Avec seulement 80 ingénieurs, notre équipe technique est réduite", plaide Nikhil Garg, responsable de l'ingénierie du réseau social. "S'appuyer sur AWS nous permet de tirer parti de ses outils et infrastructures tout en concentrant nos forces en interne sur des problèmes métier spécifiques."

Linux et MySQL comme socle

Dès l'origine, Quora a aussi fait le pari de l'open source. En choisissant notamment Linux. "C'est un système d'exploitation éprouvé avec des déploiements à grande échelle. Il possède aussi un excellent support et des bibliothèques très riches avec une communauté puissante autour de lui", argue Nikhil Garg.

Nikhil Garg est responsable de l'ingénierie de Quora. © Quora

Côté base de données, Adam D'Angelo, PDG de Quora, a retenu MySQL. Un serveur open source qu'il avait pu expérimenter à grande échelle quand il était directeur technique de Facebook. Dans un billet de blog, il explique pourquoi il utilise ce système relationnel plutôt que des bases NoSQL, pourtant populaires, comme Cassandra, MongoDB ou CouchDB. A ses yeux, MySQL a fait ses preuves en production alors que les bases NoSQL ne sont pas suffisamment évolutives et stables. Elles seraient aussi plus difficiles à appréhender. Quora commence toutefois à utiliser HBase.

D'après Adam D'Angelo, le modèle de données relationnel se prête bien aux plateformes telles que Quora qui proposent des contenus créés par les utilisateurs. Quant à la rigidité d'une base relationnelle, "elle peut être atténuée par différentes techniques d'optimisation comme le partitionnement au niveau de l'application ou la mise en mémoire cache", rappelle le CEO.

Pour cette mise en cache, Quora fait appel à la solution open source Memcached pour presque toutes les requêtes. Le cache en question est d'ailleurs orchestré au niveau de la requête et non des données. "Cela signifie que nous pouvons avoir les mêmes données présentes dans plusieurs clés de cache en fonction des requêtes", précise Nikhil Garg. Pour optimiser son utilisation de Memcached, Quora a développé un outil open source, appelé MCInspector. En plus de Memcached, Quora utilise Redis pour la mise en cache de longues listes et autres structures de données complexes.

Python pour accroître la productivité

En termes de langages de programmation, Quora a retenu Python plutôt que Java, Scala ou Ruby. "Editer en Python se révèle très simple, ce qui contribue à accroitre la productivité des développeurs", se réjouit Nikhil Garg. "Et si Python est certainement plus lent, il demeure suffisamment rapide dans la plupart de nos cas d'usage. Quand nous cherchons la performance, nous utilisons C ++ qui interagit bien avec l'écosystème Python." Quant au manque de sécurité dont pâtirait Python, Quora y palie en multipliant les tests.

Côté gestion de contenu, Quora fait appel au couple WebNode / LiveNode

Face à Python et C ++, la start-up utilise JavaScript pour le frontend de son site web, ainsi que Java pour certains systèmes de backend. Pour gérer les communications entre ces différentes technologies et créer un environnement agnostique, elle se sert de Apache Thrift, le langage de définition d'interface (IDL) développé par Facebook.

Pour la gestion de contenu - un volet essentiel de sa plateforme -, Quora fait appel au couple WebNode / LiveNode. Ecrit en Python, WebNode est un éditeur de site qui permet de représenter les différentes parties d'une page web sous forme de composants autonomes. Une architecture qui facilite l'extraction de données, l'instanciation du code JavaScript correspondant ou encore la gestion des requêtes Ajax. "Ces composants sont des classes Python régulières", fait observer à Nikhil Garg. "Par conséquent, ils supportent les héritages, les paramétrages. Cela rend très facile d'écrire le code frontend puis de le réutiliser dans d'autres endroits sur le site."

Associé à WebNode, LiveNode est un framework qui maintient les pages web réactives. "Il détecte automatiquement quelles données ont été utilisées lors de la création d'une page web. A mesure que les données sous-jacentes changent, il décrit comment apporter le nouveau contenu à l'utilisateur et envoie automatiquement la mise à jour. Sans effort à faire du côté des développeurs", détaille Nikhil Garg.

25 modèles de machine learning

Quora doit son succès à sa capacité à personnaliser son contenu en fonction du profil des utilisateurs. Pour relever ce défi, le réseau social a mis en production quelque 25 modèles de machine learning (modèles linéaires, arbres de décision, réseaux neuronaux...). "Nous utilisons diverses bibliothèques open source, dont certaines écrites en interne, pour former ces composants", explique Nikhil Garg. "En matière d'algorithmes, nous cherchons le meilleur compromis entre la précision du modèle, ses performances, la durée d'apprentissage ou le temps de prédiction."

De nombreux services proposés par Quora reposent sur le machine learning. A commencer, bien sûr, par les recommandations de questions affichées sur la page d'accueil, mais aussi le "Ask to Answer" - la fonctionnalité permettant de demander à d'autres utilisateurs de répondre à une question particulière. C'est aussi le cas du système de classement des réponses ou " Answer Ranking" - qui tient compte à la fois du nombre de vues et de votes positifs/négatifs, de la "fraicheur" du contenu, de la longueur de la réponse, de l'ancienneté du contributeur, etc. Dans une série de posts, Quora détaille son utilisation du machine learning, de façon générique ou appliquée à Ask to Answer et Answer Ranking.

Force est de constater que Quora est adepte des solutions open source à tous les étages de son infrastructure informatique. La société a aussi beaucoup reversé de logiciels à la communauté du libre. Aux côtés de MCInspector, la start-up a également développé le framework asynq pour gérer la programmation asynchrone en Python, une bibliothèque d'algorithmes de machine learning (basés sur la factorisation matricielle), ou encore un outil pour analyser et manipuler les feuilles de style CSS.

A lire aussi