Решение проблем с производительностью.
Исходные данные.
Мы транслируем футбольные матчи через Интернет. Посетителей: в обычные дни 5 000 – 10 000, в дни матчей 100 000 – 150 000. В дата-центре
- 5 веб-серверов с Apache и PHP, размещенных снаружи через аппаратный балансировщик нагрузки
- 2 пула кэша памяти: для сессий и данных веб-сервисов
Решения
- Расширение сети до 1Гбит после окончания серии матчей
- Увеличение времени хранения кэша (как временная мера)
- Использование технологии смарт-сессии
В чем суть технологии
- Мы не создаем сеанс, если он действительно не нужен.
- Мы не обновляем сеанс в репозитории, если он не изменился.
Посетители распределяются примерно следующим образом:
- 70% - Зрители.
Мы открыли главную страницу, поняли, что это не то, что нам нужно, и закрыли ее.
То есть СЕО поработало хорошо, но разъясните нам это.
- 28% - Болельщики.
Денег нет, но они используют наш сайт, чтобы отслеживать информацию во время матча (голы, замены).
Обычно их не регистрируют, поскольку информация и так доступна.
- 2% — Они действительно смотрят матчи после регистрации и оплаты.
Выполнение
Поскольку мы используем кэш памяти, у нас уже есть объект Session, который перегружает стандартный функционал сеанса и позволяет хранить последний в кэше памяти.Дополнительно мы делаем следующее:
- Мы помещаем глобальную функцию session_start() в if, чтобы сеанс не создавался, когда его не запрашивают.
if(!empty($_COOKIE[ini_get('session.name')])) session_start();
- В место входа пользователя добавьте начало сессии, потому что здесь уже нужно:
if(empty($_COOKIE[ini_get('session.name')])) session_start();
- И наконец, в нашем объекте мы создаём дополнительную статическую переменную, в которой сохраняем содержимое сессии при чтении, а при записи делаем в самом начале следующую проверку:
if(self::$data !== null && self::$data == $currentData) return strlen($currentData);
Комментарии приветствуются.
УПД : Смысл поста не в том, чтобы показать, какой я крутой, а в том, что в PCP есть мелочи, которые настолько обыденны, что мы перестаём обращать на них внимание, но иногда они не продуманы и влияют на производительность.
Теги: #memcache #оптимизация #сессии #php
-
Языки Кечуа
19 Oct, 24 -
Чем Ты Пишешь Демонов?
19 Oct, 24 -
Капитал 2.0, Или То, Чего Не Заметил Маркс.
19 Oct, 24 -
Плакат Silverlight 2 Для Разработчиков
19 Oct, 24 -
Тайная Жизнь Директора Chronopay
19 Oct, 24