У мессенджера Discord больше 150 млн активных пользователей и 19 млн серверов, где эти люди общаются и генерируют миллиарды сообщений.
💬 Как компания хранит такой огромный массив данных?
Об этом команда Discord рассказала в блоге проекта. Приводим оттуда самое любопытное.
🔵 Сообщения пользователей хранились в БД Cassandra. В 2017 году было 12 нодов с миллиардами сообщений. В 2022 — 177 с триллионами.
🔵 Сообщения из одного канала хранились в одной партиции и реплицировались на три нода. Такой подход не вызывал проблем с небольшими каналами, зато активные сообщества на сотни юзеров создавали большую нагрузку. В Dicsord это называли «hot partition» — не оригинально, но понятно.
🔵 Ситуацию усугубляло то, что в Cassandra чтение файлов «дороже» для системы, чем запись. Из-за этого «hot partition» могло спровоцировать сообщение, отправленное на всех юзеров в большом канале. Когда они все разом открывали приложение, начинали оставлять ответы и реакции, это приводило к серьезным лагам.
💬 Проблемы из-за «горящих партиций» возникали слишком часто, и команда решила переехать на другую базу — ScyllaDB. Но очевидно, что простая смена базы не решила бы проблему.
🔵 В Discord разработали сервисы, через которые данные просеивались прежде, чем попасть в базу. Если поступало одновременно много запросов к одной и той же строке в базе, сервис аккумулировал и только после этого отправлял в ScyllaDB.
🔵 В итоге она оказалась намного более стабильной и эффективной базой. Данные, которые в Cassandra хранились в 177 нодах, в ScyllaDB уместились на 72.
🔵 ScyllaDB с поддержкой дата-сервисов не уронил даже Чемпионат Мира по футболу. Забавно, что на графиках Discord было хорошо видно ключевые моменты матчей — нагрузка резко возрастала в ответ на каждый гол Месси.
У Discord ситуация не уникальная, но не частая — не так много компаний, которые ворочают такими массивами данных. И все же надеемся, что вы почерпнули из их опыта что-то полезное для себя.
А вы пользуетесь Discord?
❤️ — Конечно!
👾 — Знаю про него, но не пользуюсь
🤔 — После блокировки в РФ перестал(а)
🌚 — Впервые слышу
