Я пытаюсь понять параметры, которые у меня возникают при создании механизма проверки подлинности для приложений, которые могут запускаться на произвольном количестве веб-серверов. До сих пор у меня есть опыт работы с небольшими веб-сайтами, которые используют (web-) серверные сеансы для управления аспектами аутентификации. Но как только я хочу добавить больше веб-серверов (или «веб-экземпляров» в среде PaaS), этот подход, очевидно, становится проблемой; состояние аутентификации, привязанное к определенным машинам, из моего понимания не то, что вы хотите при использовании балансировки нагрузки (afaik sticky sessions/sticky load balancing - это то, чего следует избегать). Я ищу решение, позволяющее масштабировать количество веб-серверов/экземпляров вверх и вниз динамически, не заботясь о механизме аутентификации.Механизмы входа/аутентификации без учета состояния для масштабируемых веб-приложений?
Я думаю, что единственный способ достичь этого - принять состояние сеанса/аутентификации из моих веб-серверов. Это то, что я имел в виду, говоря «без гражданства». Конечно, это состояние должно быть временно сохранено где-то, поэтому должно быть что-то, что не является апатридом.
Я мог бы использовать сервер базы данных для управления всеми сеансами аутентификации. К серверу базы данных можно было получить доступ со всех моих веб-серверов в каждом HTTP-запросе, чтобы запросить состояние аутентификации пользователей. Но так как серверы баз данных еще сложнее масштабировать, чем веб-серверы (это было бы моим предположением, не имея никакого опыта с ним), я бы просто переместил проблему с веб-серверов на серверы баз данных. Кроме того, я не думаю, что это было бы лучшим решением с точки зрения производительности.
Вместо сервера базы данных я мог бы использовать сервер кеша, например memcached или redis, для управления сеансами для аутентификации. Я думаю, что это свести к минимуму проблемы с масштабируемостью, так как один сервер кеша мог бы управлять множеством сеансов по-своему (или я ошибаюсь на этом этапе?). Но я иногда читаю такие вещи, как «важный момент в кеше заключается в том, что он ведет себя точно так же, как кэш должен: данные, которые вы только что сохранили, могут просто исчезнуть». Ну, это будет проблемой. Я не хочу, чтобы пользователи приходили каждые два часа. Мой вопрос: почему данные в кеше пропадают, если в кеше хватает памяти? Не хватило бы 250 Мбайт памяти на кэш-сервере для управления более чем миллионом сеансов одновременно без необходимости избавляться от данных (при использовании простых пар ключ-значение, сопоставляющих идентификаторы сеанса с идентификаторами пользователя или наоборот)?
Третьим решением может быть сохранение состояния auth sesson в файлах cookie, которые подписываются сервером и не могут управляться клиентами. Но если я не ошибаюсь, нет никакого способа на стороне сервера для обеспечения выхода из системы определенного пользователя ...
Подводя итог моих требований:
Я хочу масштабирование веб-серверов за балансировки нагрузки вверх и вниз и система аутентификации должна иметь дело с этим
Пользователи должны иметь возможность войти в систему, по крайней мере, несколько дней
как, например, на stackoverflow.com- на стороне сервера должен иметь возможность отключить пользователя, если есть причина сделать так
я заинтересован в передовом опыте. Я думаю, что существует тонна сайтов , которые сталкиваются с теми же проблемами и нашли для нее решения.