HeadlinesBriefing HeadlinesBriefing.com

Faire évoluer un bus de messages par l'indexation

Hacker News •
×

Aria est le cadre de messagerie interne de l'entreprise, un système hébergé qui traite plusieurs téraoctets de données par jour. Les clients s'abonnent à Aria pour recevoir un flux de messages en direct. Comme l'utilisation a fortement augmenté, l'équipe d'Aria a dû repenser le système pour suivre le rythme de la hausse du volume de données et du débit. Cet été, le stagiaire Theodor Totev s'est concentré sur un cas d'usage précis : rendre moins coûteuse la lecture par les clients d'un sous-ensemble de messages. Ses travaux d'indexation et de découpage d'arbres ont entraîné une baisse de 30 % de l'utilisation du CPU sur les charges de production, tout en conservant le haut niveau de fiabilité qu'exige un système aussi critique.

Lorsque Aria transmet des messages via TCP, il conserve les messages récents, appelés la pointe du flux, dans un tampon circulaire en mémoire. Les clients en retard peuvent demander les messages récents à ce tampon pour rattraper leur retard, un processus appelé récupération de la pointe. Le défi tient au fait qu'Aria stocke l'intégralité du flux de messages, alors que les clients n'ont souvent besoin que d'une petite partie. Aria filtre le flux par sujet, et les clients peuvent s'abonner à des sujets individuels ou à des sous-arborescences entières. L'approche initiale consistait en un simple parcours linéaire du flux. Peu efficace sur le plan algorithmique, elle restait rapide grâce à sa compatibilité avec le cache du processeur. Avec l'augmentation du nombre de clients effectuant une récupération de la pointe, certains serveurs ont atteint 100 % d'utilisation du CPU, ce qui faisait décrocher les clients de la pointe, les empêchant de rattraper leur retard.

Un index par sujet a été écarté, car les instances d'Aria peuvent compter près d'un million de sujets. Theodor a donc créé un index par partition de sujets, regroupant tous les sujets partageant le même préfixe à deux segments. L'index de chaque partition enregistre l'emplacement de ses messages dans le flux. Lorsqu'un client demande des messages, Aria effectue une fusion à n voies des index concernés à l'aide d'un tas-min, reconstituant le flux ordonné pour les seules partitions demandées.

Le benchmarking a été au cœur de ce travail. Theodor a développé un outil de profilage pour tester des variables telles que le nombre de partitions de sujets, le degré d'entrelacement et le nombre de lecteurs. Le profilage de la première implémentation a révélé que le tas-min était le principal goulot d'étranglement.

Source: Hacker News · Résumé par HeadlinesBriefing