26 points par xguru 2023-07-04 | 3 commentaires | Partager sur WhatsApp
  • En grandissant, Discord a continuellement remplacé sa base de données de stockage des messages
  • Au départ, il utilisait un MongoDB unique. En novembre 2015, lorsque le nombre de messages a atteint 100 millions, les limites de MongoDB sont apparues
  • En 2017, Discord est passé à Cassandra avec un cluster de 12 nœuds pour stocker des milliards de messages
  • En 2022, le nombre de messages a explosé jusqu’à des milliers de milliards, l’infrastructure est montée à 177 nœuds, la latence est devenue imprévisible et les coûts de maintenance ont fortement augmenté
  • Le problème de Discord avec Cassandra venait des hot partitions. Certaines parties de la base étaient surchargées, ce qui dégradait les performances de toute l’application
    • Comme la structure de données interne de Cassandra repose sur des arbres LSM, le coût de lecture est plus élevé que celui d’écriture, et les lectures simultanées de plusieurs utilisateurs sur un même serveur créaient des hotspots entraînant une baisse des performances
    • Les opérations de maintenance comme la compression des SSTables affectaient les performances globales et aggravaient le problème
  • Discord a donc entrepris une refonte de son architecture en intégrant différents composants
    • Utilisation d’une API monolithique, d’un service de données implémenté en Rust et d’un système de stockage basé sur ScyllaDB (base compatible Cassandra développée en C++)
  • L’adoption de ScyllaDB a apporté des améliorations significatives
    • La latence de lecture p99 est tombée à 15 ms, contre 40 à 125 ms avec Cassandra
    • La latence d’écriture p99 est tombée à 5 ms, contre 5 à 70 ms avec Cassandra
  • Les ingénieurs de Discord ont écrit le service de données en Rust
    • Ils ont utilisé la fonctionnalité de fearless concurrency de Rust pour contrôler le trafic concurrent sur les hot partitions
    • Les bibliothèques et les fonctionnalités de concurrence de Rust correspondaient très bien aux exigences de Discord
    • Le service de données joue le rôle d’intermédiaire entre le monolithe API et le cluster de base de données

3 commentaires

 
pmc7777 2023-07-05

Justement, j’étais en train de me renseigner sur la stack technique de Discord, merci !

 
secret3056 2023-07-04

Comment Discord stocke des milliards de messages

Le GC de Go a un surcoût assez important, ce qui explique l’ajout continu de méthodes de tuning et l’introduction d’arenas mémoire, entre autres.