Назад | Перейти на главную страницу

Сеансы PHP на серверах с автоматическим масштабированием

(Приносим извинения за перекрестную публикацию с SO. Я не был уверен, где это более уместно.)

Я работаю над веб-приложением PHP, развернутым в Amazon Web Services. У нас есть балансировщики нагрузки перед автоматически масштабируемыми серверами приложений.

Проблема, с которой мы сталкиваемся в данный момент, - это обработка сессий. Хотя липкие сеансы были бы разумным решением, мы хотели бы сохранять сеансы в течение довольно длительного времени (в идеале - недель). Это может со временем ухудшить производительность балансировщика нагрузки. Кроме того, использование автомасштабирования будет означать, что время от времени мы удаляем сервер и, таким образом, теряем на нем все активные сеансы. Конечно, мы могли бы просто использовать общую базу данных для хранения сессий, но меня немного беспокоит производительность, если каждый запрос требует еще одного обращения к БД.

Буду признателен, если вы предложите какие-либо решения, которые сработали для вас, или любые идеи, которые мы могли бы попробовать.

Заранее спасибо за помощь, Росс

PHP хранит сеанс в простых файлах. Вы пробовали хранить их в общем хранилище?

Аналогичный вопрос: Совместное использование сеансов PHP в облачной файловой системе

Вот статья об этой конкретной проблеме и различных подходах: http://kevin.vanzonneveld.net/techblog/article/enhance_php_session_management/

IME, есть небольшие накладные расходы между использованием сеансов на основе файлов и сеансов базы данных (в прошлый раз, когда я рассмотрел это более подробно, я использовал репликацию master / master на 3 узлах mysql), но последнее чаще влечет за собой дополнительное сетевое отключение по сравнению с первым ( при доступе к локальному экземпляру mysql разницу невозможно измерить по сравнению с локальной файловой системой). Также намного проще масштабировать хранилище на основе db для общих репозиториев, и, поскольку это простая методология ключ / значение, ее легко реализовать на базе данных nosql, которая масштабируется даже легче, чем реляционные базы данных.

Это уже упоминается в статьях, на которые ссылаются другие, но стоит повторить отдельно: Memcache - очень полезный вариант здесь. Он невероятно быстр, легко масштабируется на несколько серверов / экземпляров Memcache и очень прост в реализации без больших накладных расходов или нагрузки на базу данных. Я успешно реализовал это с минимальными усилиями на сайте с миллионами посещений в день, и это дало гораздо больше возможностей для роста на существующем оборудовании.

Это также позволяет использовать собственную политику устаревания Memcache, вместо того, чтобы запускать сборщик мусора сеанса PHP.