Я был однажды в проекте веб-приложения, разработанного на ASP.NET. Для каждого пользователя входа в систему существует объект (назовем его UserSessionObject ), созданный и сохраненный в ОЗУ. Для каждого HTTP-запроса данного пользователя соответствующий экземпляр UserSessoinObject используется для просмотра информации о состоянии пользователя и подключения к базе данных. Итак, этот UserSessionObject очень важен.
Этот дизайн приносит несколько проблем, обнаруженных позже:
1) Поскольку этот UserSessionObject кэшируется в пространстве памяти ASP.NET, нам необходимо настроить балансировщик нагрузки на липкое соединение . То есть HTTP-запрос в одном сеансе всегда будет отправляться на один веб-сервер позади. Это ограничение масштабируемости и ремонтопригодности.
2) Этот UserSessionObject доступен в каждом HTTP-запросе. Для обеспечения согласованности предусмотрена эксклюзивная блокировка для UserSessionObject . Только один HTTP-запрос может быть обработан в любой момент времени, потому что он должен сначала получить блокировку. Это влияет на производительность и время отклика.
Теперь мне интересно, есть ли лучший дизайн для такого случая входа в систему.
Кажется, помогает Sharing-Nothing-Architecture. Это означает, что длинная пользовательская информация извлекается из базы данных каждый раз. Боюсь, это повредит производительности.
Есть ли шаблон дизайна для длинного пользовательского веб-приложения?
Спасибо.