ОК, поэтому у меня есть совершенно редкий уникальный сценарий веб-сайта PHP с балансировкой нагрузки. Облом - это не было балансировкой нагрузки. Теперь мы начинаем получать проблемы...
В настоящее время единственная проблема связана с сеансами PHP. Естественно, никто не думал об этой проблеме сначала, поэтому конфигурация сеанса PHP осталась по умолчанию. Таким образом, у обоих серверов есть своя небольшая таблица файлов сеансов, а горе - пользователь, который получает следующий запрос, брошенный на другой сервер, потому что у него нет сеанса, который он создал на первом.
Теперь я читал руководство PHP о том, как решить эту ситуацию. Там я нашел хорошую функцию session_set_save_handler()
. (И, по совпадению, этот раздел на SO). Кроме того, мне придется называть эту функцию на всех страницах веб-сайта. И разработчикам будущих страниц пришлось бы помнить, что все это время звонят. Чувствует себя неловко, не говоря уже о том, что, вероятно, нарушает десяток лучших методов кодирования. Было бы гораздо приятнее, если бы я мог просто перевернуть какую-то глобальную конфигурационную опцию, а Voilà - сеансы, которые все магически хранятся в БД или кеше памяти или что-то в этом роде.
Любые идеи о том, как это сделать?
Добавлено: Чтобы уточнить - я ожидаю, что это стандартная ситуация со стандартным решением. FYI. У меня есть MySQL DB. Наверняка должен быть какой-то готовый к использованию код, который решает это? Я могу, конечно, написать собственный материал для сохранения сеанса, а опция
auto_prepend
, указанная Грегом, кажется многообещающей - но это будет похоже на переосмысление колеса.:П
Добавлено 2: Балансировка нагрузки основана на DNS. Я не уверен, как это работает, но я думаю, что это должно быть что-то вроде this.
Добавлено 3: ОК, я вижу, что одним из решений является использование опции
auto_prepend
для вставки вызова в session_set_save_handler()
в каждом script и написания моего собственного БД-клиента, возможно, для вызова вызовов memcached
для лучшей производительности. Достаточно справедливо.
Есть ли способ, которым я мог бы вообще не кодировать все это? Как какой-то известный и проверенный PHP-плагин?
Добавлено много, намного позже: В конце концов я пошел: Как правильно реализовать пользовательский сеансовый persister в PHP + MySQL?
Кроме того, я просто включил обработчик сеанса вручную на всех страницах.