Масштабирование до миллионов пользователей с помощью инструмента Twitter

Как инструменты Twitter, такие как Buffer, могут распространяться на миллионы пользователей, когда им приходится писать тысячи твитов каждую секунду?

У меня есть подобный сервис, где я запускаю скрипт cron, но на прохождение 50 пользователей уходит около 10 секунд - поэтому мне интересно, как такой масштаб возможен.

1 ответ

Решение

Такие задачи, как то, что делает Buffer, легко распараллеливаются - вам не нужно ждать обработки сообщений одного человека, чтобы публиковать сообщения другого пользователя. Из-за этого горизонтальное масштабирование тривиально - несколько потоков и / или серверов обрабатывают несколько пользователей одновременно.

Вот некоторые основные приемы, которые они могут использовать:

  • Несколько серверов баз данных - содержимое публикации не обязательно должно быть доступно для всех серверов, только для тех, которые должны его обрабатывать. Таким образом, у вас может быть одна основная база данных, в которой хранится информация об учетной записи и имени входа, а также куча отдельных, в которые добавляются посты в очереди, чтобы распределить нагрузку между ними. Нет необходимости настраивать кластер базы данных или синхронизацию между серверами, поскольку данные не обязательно должны быть доступны на всех серверах.

  • Несколько серверов публикации - каждый сервер просматривает одну из баз данных на предмет готовности к публикации и работы с ними. Вероятно, с несколькими процессами / потоками и некоторым способом управления тем, какой поток обрабатывает какую запись базы данных, поэтому дубликаты не публикуются.

  • Оптимизация. Если вы обрабатываете тысячи сообщений в секунду, сокращение скорости на 1/100 секунды от времени публикации - это значительное увеличение скорости. Так много работы, вероятно, сделано для повышения производительности частей их кода, которые часто вызываются. Тщательное профилирование помогает определить, какие части кода необходимо оптимизировать, а какие вызывать недостаточно часто, чтобы это беспокоило.

По сути, вместо того, чтобы обрабатывать по одному посту от одного пользователя за раз, как, вероятно, делает ваш скрипт, обрабатывайте как можно больше их параллельно. Используя эти методы, вы можете просто добавлять больше серверов по мере роста. Вы также можете автоматизировать масштабирование облачного сервера - когда вы получаете слишком много невыполненных заданий, новый сервер автоматически запускается для обработки дополнительной нагрузки. Когда все стихает, дополнительные серверы тоже отключаются.

Другие вопросы по тегам