Оптимизация Socket.io. Оправдано ли хранить сессии в redis?

Исходные данные:

Ubuntu TLS 14.04. 1GB RAM, 1core CPU. SSD 30GB. (дроплет за 10$ на digitalocean).

Приложение MEAN + socket.io
На главной странице динамически обновляемые таблицы с рейтингами игроков. Возможность регистрации, авторизации, голосования.

Обязательное требование - реал-тайм обновление данных и для анонимных и для авторизованных пользователей.

Хранение сокет-сессий было реализовано стандартными методами т.е. в js.

Проблема:
При одновременном заходе на страницу более 3000 пользователей, сервер перестал справляться и умер.

Наши действия:

1. Оптимизировали код, разделили функционал на несколько частей:
- Функциональную (для авторизованных): лайки, работа с профилем пользователя.
- Информационную (для всех):
обновление рейтингов.

2. В качестве адаптера для socket-а использовали Redis.

Вопросы:

1. Целесообразно ли применение Redis в данной ситуации? Какие способы оптимизации стоило применять в первую очередь?

2. Ощутим ли для пользователей выигрыш по скорости чтения из ОЗУ за счет применения Redis или на столь малых объемах данных прирост неощутим?

3. Можно ли было использовать в качестве хранилища сессий MongoDB, чтобы не разводить "зоопарк" хранилищ?

4. На сколько оправданно было отказываться от стандартного способа хранения сессий?
  • Вопрос задан
  • 1182 просмотра
Пригласить эксперта
Ответы на вопрос 1
Не знаю насколько полезен мой комментарий, но все же напишу. Было приложение на Node c использованием сокетов (были еще молоды и зелены), возникала подобная проблема. Проблема решилась следующим образом - мы распределили нагрузку самого node-сервера на 4 ядра, что значительно увеличило стабильность (до этого работало на одном в силу архитектуры node). И исправили баги в коде.
Судя по вашему комментарию у меня сложилось представление, что вы не знаете, где в вашем приложении узком место, необходимо провести профилирование кода. Может быть падение никак не связаны с сокетами вообще.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы