Compression de données pour un crawler web à grande échelle

Alors que la quantité de données générées croît de façon exponentielle, les systèmes de crawling web jouent un rôle crucial dans le domaine du SEO (Search Engine Optimization). Ces systèmes conçus pour explorer et analyser des pages web doivent ingérer, traiter et stocker des volumes considérables de données pour offrir des informations pertinentes et exploitables pour nos clients.

L’architecture technique de Babbar, optimisée pour le SEO, doit gérer des informations variées : des métadonnées (souvent textuelles), des métriques de graphe pour synthétiser le Babbar Authority Score (BAS), des représentations vectorielles indispensables pour calculer la Semantic Value et des informations agrégées définies par nos experts métier pour déterminer (ou prévoir !) la Force Induite des liens.

Ces éléments sont stockés dans un ensemble de bases de données distribuées conçues pour répondre aux exigences d’un traitement en temps réel et d’une analyse en continue. Le défi technique se situe essentiellement dans les volumes traités : un système de cette envergure peut ingérer et analyser plusieurs dizaine de milliers de pages et des millions de liens chaque seconde.

L’optimisation du traitement, du stockage et de la transmission de ces données est donc essentielle pour garantir le passage à l’échelle tout en conservant une bonne performance à des coûts supportables. 
Dans cet article je vais parler des défis et des solutions adoptées chez Babbar pour compresser efficacement les données dans un contexte exigeant.

Les données et leur complexité

Pour comprendre l’ampleur des défis, il est essentiel de s’attarder sur la structure des données traitées. Une page web contient son URL, des métadonnée, des métriques de graphe, une représentation vectorielle (embedding) de son contenu ainsi qu’une liste de liens sortants (forelinks) qui peuvent être internes au site ou non. Chaque lien sortant est décrit par son URL cible, une ancre textuelle et des métadonnées. Ces liens sortants deviennent des liens entrant (backlinks) du point de vue de la cible et doivent embarquer des informations représentatives de la source pour contribuer à des calculs complexes sur des données évoluant dynamiquement.

Les URLs, les métriques et les vecteurs sémantiques, éléments centraux de cette architecture, doivent être gérées pour chaque page, forelink et backlink. Cette granularité, bien qu’indispensable pour la qualité des analyses, génère un volume de données considérable, amplifié par la nécessité de distribuer ces informations via les liens entre pages.

Le besoin de compression

La compression des données dans un tel système répond à une double nécessité : réduire la taille des données stockées sur disque et limiter le volume des transferts réseau. L’objectif principal est de permettre au système de s’adapter à la montée en charge tout en maintenant des performances élevées et des coûts de stockage maîtrisés.

Les URLs, vecteurs sémantiques et métriques de graphe représentent chacun des défis spécifiques. Les URLs, extrêmement nombreuses, doivent être compressées pour limiter leur empreinte mémoire et optimiser leur transmission. Les vecteurs sémantiques, bien qu’essentiels pour les analyses de contenu, sont gourmands en espace, nécessitant une réduction de leur précision sans compromettre leur pertinence. Enfin, les métriques de graphe doivent être compressées tout en préservant la précision nécessaire à des calculs fiables.

Les solutions techniques

Pour répondre aux défis posés par le volume et l’hétérogénéité des données à traiter, plusieurs techniques de compression ont été mises en œuvre, chacune adaptée à la nature des données concernées.

– Les URLs

Les URLs sont évidemment nécessaires mais elles occupent une part significative de l’espace mémoire de par leur omniprésence. Pour les compresser efficacement, nous avons développé un algorithme de compression de type Huffman, spécialement adapté aux schémas des adresses web. Huffman est une méthode de codage qui attribue des codes plus courts aux éléments fréquents et des codes plus longs aux éléments rares, en fonction de leur distribution statistique.

Dans le contexte des URLs, l’optimisation des codes de Huffman repose sur l’analyse d’un large ensemble d’URLs pour identifier les motifs les plus communs. Cette approche permet de réduire la taille moyenne d’une URL d’un facteur 3 environ. De plus, les informations redondantes dans les liens internes sont éliminées en ne stockant que les parties différentielles des URLs au sein d’un même site.

– Les vecteurs sémantiques

Les vecteurs sémantiques représentent le contenu textuel sous forme de coordonnées dans un espace multidimensionnel. Ces représentations sont essentielles pour analyser le contexte (Semantic Focus) et les relations entre pages web (Semantic Value), mais elles occupent une quantité significative d’espace disque.

Pour réduire leur taille, une technique de quantification (quantization) a été utilisée, consistant à diminuer le nombre de bits nécessaires pour représenter chaque dimension d’un vecteur. Deux niveaux de précision ont été définis : une précision standard utilisée pour les pages elles-mêmes afin de préserver une qualité maximale d’analyse, et une précision réduite appliquée aux backlinks où une représentation approximative est suffisante, autorisant leur diffusion par les liens sortants. Concrètement, cela peut impliquer de passer d’une représentation en 32 bits par dimension à 8 bits, voire moins. Cette réduction diminue l’espace de stockage requis tout en maintenant une précision acceptable pour les calculs sémantiques.

– Les métriques de graphe

Les métriques de graphe, telles que le Babbar Authority Score, jouent un rôle clé dans l’évaluation de l’importance relative des sites web. Ces métriques doivent être régulièrement mises à jour et échangées entre les nœuds du système.

Pour conserver une précision suffisante tout en réduisant leur taille, une approche basée sur une linéarisation logarithmique a été adoptée. Cette transformation permet de représenter des valeurs très dispersées (comme celles des métriques de graphe) sur une plage plus réduite tout en limitant la perte de précision sur les petites valeurs, souvent critiques pour les calculs. Un cas particulier a même été appliqué sur les valeurs les plus faibles pour améliorer encore la précision. Les valeurs compressées sont ensuite quantifiées pour optimiser davantage leur stockage.

– Sérialisation automatique versus manuelle

La sérialisation des données joue un rôle essentiel dans un système de crawling web à grande échelle, facilitant la conversion de structures complexes en formats simples adaptés au stockage ou à la transmission. Dans la majorité des cas, Protobuf (Protocol Buffers) a été privilégié. Ce format binaire performant offre une grande généricité pour traiter divers types de données, une évolutivité permettant des mises à jour transparentes des schémas, et une productivité accrue grâce à la génération automatique de code.

Mais pour des cas spécifiques, comme la gestion des clés primaires ou l’optimisation poussée de la compression, une sérialisation manuelle a été mise en œuvre. Bien que plus complexe, cette approche améliore légèrement les performances et réduit la taille des données les plus critiques en ajustant précisément leur structure et leur encodage. Ce choix garantit une optimisation fine adaptée à chaque type de donnée et aux besoins métier.

– Algorithmes de compression

Les données sont ensuite compressées par des algorithmes largement diffusés. Plusieurs ont été testés dans ce contexte, notamment Snappy, GZip, LZ4, et ZSTD. Après de nombreux essais comparatifs, ZSTD a été choisi pour son excellent compromis entre vitesse et taux de compression. En effet, Snappy offrait une vitesse de compression élevée mais un taux de compression insuffisant pour nos besoins. LZ4 offre un bien meilleur taux de compression tout en étant très rapide mais ZSTD fait encore mieux en terme de compression et n’est que légèrement plus lent, ce qui correspond le mieux à notre besoin. GZip n’est pas adapté pour ce type de charge.

Il convient de souligner que les techniques décrites précédemment influencent significativement les performances des algorithmes de compression appliqués ultérieurement, notamment en diminuant l’entropie intrinsèque des données de par la réduction de leur variabilité et de leur complexité, ce qui facilite leur traitement.

– Bases de données optimisées

Toutes ces données sont ingérées par RocksDB, une base de données clé-valeur hautement performante qui fera sans doute l’objet d’un article dédié. Un élément important à noter à ce stade concerne le choix crucial qui a été fait concernant le mode de compaction : Level versus Universal. Bien que le mode Level soit généralement conseillé pour son efficacité en termes de gestion de l’espace disque, nous avons opté pour le mode Universal. Cette décision a été motivée par deux avantages majeurs : il permet de mieux anticiper la charge CPU en évitant les compactages parallèles et il réduit sensiblement l’amplification en écriture (write amplification), ce qui augmente significativement la durée de vie des disques flash (SSD). Ces caractéristiques sont particulièrement adaptées à notre contexte de haute fréquence d’écriture et de forte contrainte sur les ressources CPU.

Pour un système de crawling et d’analyse du web à large échelle, la compression des données représente bien plus qu’une simple optimisation technique : elle constitue une pierre angulaire de sa viabilité. Les solutions techniques présentées, depuis les algorithmes de compression avancés jusqu’aux choix d’architecture adaptés au métier, permettent de traiter des volumes massifs tout en maintenant des coûts maîtrisés.

Ces techniques et innovations, intégrées au cœur de l’architecture de Babbar, témoignent de l’engagement de l’équipe à fournir une infrastructure performante et robuste. Elles démontrent l’importance d’une approche sur mesure, où l’ optimisation technique se traduit directement en bénéfices pour nos clients, renforçant ainsi leur compétitivité et la pérennité de leurs stratégies SEO.