Отслеживание пользователя на разных серверах сложно для истинной стороны сервера без сохранения состояния. В большинстве случаев это сервер без сохранения состояния, где логины являются исключением. Однако проблема с серверами без сохранения состояния заключается в том, что кластеризация становится очень простой, поэтому вы можете масштабировать горизонтально.
В Java вы можете сделать его без сохранения состояния, используя куки для хранения учетных данных или используя распределенные хэши. Обычно люди соглашаются использовать что-то вроде memcache и говорят, что они не имеют состояния, потому что состояние хранится вне веб-сервера. Это позволяет пользователю использовать любой веб-сервер в ферме и при этом безопасно проходить проверку подлинности. В Java у нас есть много распределенных реализаций хеша, которые вы можете использовать с Spring, поэтому вам не нужно использовать memcache для этого.
Другой вариант - использовать куки для хранения криптографического безопасного хэшированного билета, называемого HMAC. Использование файлов cookie позволяет избежать использования сеанса, поэтому веб-сервер не имеет состояния. С HMAC вы можете подписать блок данных, который не может быть подделан или создан третьей стороной и гарантированно будет получен от вас. Это не требует ресурсов внешнего сервера (кеша) для аутентификации пользователя, поэтому он может масштабироваться лучше, но есть некоторые проблемы безопасности, о которых вы должны знать. К вашему сведению, Google использует эту технику для горизонтального масштабирования. Один HMAC не похож на SHA1 или другие кирпохеши. Им требуется секретный ключ, который должен находиться на каждом сервере в ферме. Это также должно быть защищено симметричным ключом шифрования, чтобы убедиться, что он надежно хранится на сервере, если кто-то завладеет файлом. Кроме того, информация HMAC хранится в открытом виде, так что, хотя вы можете поместить имя пользователя или адрес электронной почты в файл cookie, реальный крипто-хеш доступен для всех. Если кто-то завладеет этим файлом cookie, он может маскироваться под этого пользователя. Вот почему HMAC, как правило, действительны только в течение определенного периода времени. После этого срок действия истекает, поэтому, если кто-то завладеет им, он не сможет получить доступ к этой учетной записи навсегда.
Таким образом, HMAC имеют этот недостаток, и вы должны быть осторожны с тем, в каких приложениях вы их используете. Для Paypal было бы очень плохой идеей использовать эту схему, потому что все, что мне нужно сделать, это получить ваш безопасный cookie, а затем перевести все ваши средства мне. Большой плюс в том, что ваше приложение действительно без сохранения состояния.
Последний вариант - хранить ваши Java-сессии в распределенном хеше. Php и другие платформы будут выгружать свои сеансы в базу данных, распределенный кеш бедного человека или сбрасывать их в memcache. С Java вы можете сделать то же самое. Вы также можете помещать свои сеансовые объекты в распределенный кеш. Этот вариант потерял популярность, потому что люди думают: «Круто, теперь я могу добавить все, что захочу, в свою сессию, и это будет без сохранения состояния». Однако, как и для всех распределенных кэшей, существуют ограничения по скорости передачи, времени репликации и размеру полезной нагрузки. Это верно для Java или Memcache. Держите ваши сессии небольшими, и это работает хорошо. Добавьте все в сеанс, и вы вернетесь к проблемам масштабирования, которые у вас возникают с одним сервером. И на самом деле это, вероятно, хуже, чем если бы вы только что сделали свой сервер состоящим из состояния, потому что иногда грид-вычисления хуже, чем один сервер.
Обновление: вот список библиотек распределенного кэширования Java, которые вы можете использовать для этого:
http://www.manageability.org/blog/stuff/distributed-cache-java