Некоторые Web — серверы позволяют отслеживать информацию о сеансе, используя непосредственно Hypertext Transfer Protocol (HTTP). Я говорю о технологии cookies, спрятанных метках в документе и о специальных строках в URL. Некоторую часть этой информации серверу приходится держать в памяти или на жестком диске компьютера. Что произойдет в системе с распределенной нагрузкой, если пользователь закачает одну страницу с одного сервера (предположим, что на этой странице сохранена некоторая статусная информация), а следующую — с другого сервера? Вторая система ничего не знает о сохраненной первым сервером информации. Произойдет ошибка, и сессия будет разрушена.
Существует несколько решений. Первое решение предоставляют некоторые системы распределения нагрузки. Распределитель должен отслеживать текущие сессии и не допускать запросы от одного и того же пользователя на разные серверы. Недостаток решения на уровне распределителя заключается в том, что один из серверов может быстро достигнуть предела своих ресурсов. Кроме того, всегда существует вероятность выхода из строя одного из серверов. Что в этом случае делать с сессиями, которые были привязаны к этой машине? Следующее решение заключается в перенаправлении только что зашедшего посетителя на один из серверов случайным образом (то есть посетитель обращается к Www. example. com и тут же перенаправляется на www5.example. com). Именно таким образом работает служба hotmail. com. Здесь мы видим те же недостатки, что и в предыдущем случае, так как пользователь во время всей сессии работает с одним и тем же сервером. Третье возможное решение подразумевает использование выделенной машины для хранения и синхронизации всей статусной информации со всех серверов. Единственным недостатком при этом будет то, что вы не сможете ограничить доступ к этой машине (со стороны Web-серверов) с привилегией «только чтение». Кроме того, вы можете заметить несущественное снижение производительности системы в целом.