Оптимизация 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. На сколько оправданно было отказываться от стандартного способа хранения сессий?
Для тупых можете поподробнее объяснить что вы и чем заменили? Что за сокет-сессии и зачем вы их перенесли из клиента на сервер? Что такое "стандартный способ хранения сессий"?
Не знаю насколько полезен мой комментарий, но все же напишу. Было приложение на Node c использованием сокетов (были еще молоды и зелены), возникала подобная проблема. Проблема решилась следующим образом - мы распределили нагрузку самого node-сервера на 4 ядра, что значительно увеличило стабильность (до этого работало на одном в силу архитектуры node). И исправили баги в коде.
Судя по вашему комментарию у меня сложилось представление, что вы не знаете, где в вашем приложении узком место, необходимо провести профилирование кода. Может быть падение никак не связаны с сокетами вообще.