Конференция разработчиков
высоконагруженных систем
Хочу быть в курсе событий!
Главная → 2013 → Архитектуры
Опыт переезда соцсети Livestreet с PHP/MySQL на NodeJS/Redis/Lua
Мы взяли типичное веб-приложение на базе PHP/MySQL (движок социальной сети Livestreet) и убрали из него все медленное и плохое:
- постоянный маршаллинг данных PHP - MySQL - Memcached;
- процессы инициализации фреймворка при каждом вызове;
- кэши и механизмы их инвалидации;
- нормализованную структуру данных и множество операций JOIN таблиц;
- обращения к ФС, в том числе со стороны БД;
- кривые, опостылевшие и плохо поддающиеся JIT-компиляции языки программирования.
Получилось такое решение:
- NodeJS, Redis и вся логика на Lua внутри Redis (как хранимые процедуры).
- NodeJS получает JSON из Redis и без преобразований отправляет его на клиента, где он попадает в MVC фреймворк типа Ember.JS.
- Скорость выдачи страниц выросла в 30-100 раз.
- Появилась возможность push-уведомлений клиента через pub/sub в Redis.
Наш опыт
- Мы сделали это для проекта на Livestreet с 3k топиков, 20k регистраций и 10k комментариев.
- Библиотека Lua-скриптов для работы со связанными объектами в Redis будет выложена в свободный доступ на GitHub до начала конференции.
Проблемы, возможные решения, тема для дальнейшего исследования
- Redis исполняет Lua-скрипты сторого последовательно, соответственно, не масштабируется на несколько процессоров.
- При репликации Redis реплицирует полностью все скрипты, и нативная репликация бессмысленна.
- Необходим механизм репликации на программном уровне. Неплохо подходит для приложений, где преобладают операции чтения.