💬 Как Discord хранит триллионы сообщений?
Этап 1: Ламповый старт на MongoDB (2015 год)
В первой версии Discord всё крутилось на одной реплике MongoDB. На отметке в 100 миллионов сообщений оперативная память серверов просто закончилась. База больше не могла вмещать данные и индексы чатов, задержки взлетели, и инженеры экстренно начали искать замену.
Этап 2: Масштабирование на Cassandra (2017 – 2022 годы)
Для спасения выбрали распределенную БД Cassandra. Начинали с 12 узлов (nodes), а к началу 2022 года кластер разросся до 177 узлов с триллионами сообщений.
Но на таком объеме начался ад. Cassandra использует структуру LSM-дерева, где чтение данных стоит намного дороже записи, а на серверах с сотнями тысяч юзеров одновременное чтение приводит к перегрузкам (горячим точкам).
Добивали систему фоновые задачи (сжатие SSTables) и паузы сборщика мусора (Garbage Collection) — серверы тупо «замирали» на время, генерируя дикие скачки задержек.
Этап 3: Финал на ScyllaDB и Rust
Инженеры полностью переписали архитектуру. Вместо старой связки они внедрили монолитный API, промежуточный сервис данных на Rust (для объединения одинаковых запросов) и переехали на ScyllaDB.
ScyllaDB полностью совместима с Cassandra, но написана на C++. Нет Java — нет сборщика мусора и внезапных зависаний. При этом количество серверов базы данных удалось сократить со 177 до 72.
Результаты в цифрах:
Чтение (p99): Задержка упала до 15 мс (было 40–125 мс в Cassandra).
Запись (p99): Задержка снизилась до 5 мс (было 5–70 мс в Cassandra).
🔹 Курс «Математика для разработки AI-моделей»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🏃♀️ Азбука айтишника
#магиякода
Post #2611
324

- 👍 2