How Discord Stores Trillions of Messages

Discord migrerade initialt från MongoDB till Cassandra för att hantera miljarder meddelanden, men Cassandra-klustret stötte på allvarliga prestandaproblem och krävde omfattande underhåll när meddelandevolymen växte till biljoner. Problemen med Cassandra inkluderade 'heta partitioner' som orsakade latens över hela databasen, svårigheter med underhållsuppgifter som komprimeringar, och prestandaförsämringar på grund av JVM:s skräpsamlare (garbage collector). Discord beslutade att migrera till ScyllaDB, en Cassandra-kompatibel databas skriven i C++, som erbjöd bättre prestanda, snabbare reparationer och ingen skräpsamlare, vilket löste många av de tidigare problemen. Migreringen av det stora 'Cassandra-messages'-klustret var en omfattande process som krävde att ScyllaDB-teamet implementerade förbättringar, såsom effektiva omvända frågor, för att möta Discords behov. För att ytterligare förbättra databasprestandan och hantera 'heta partitioner' introducerade Discord mellanliggande 'data services' skrivna i Rust, vilka kontrollerar samtidig trafik till databasen och skyddar den från överbelastning.