Стоит ли хранить список объектов в сеансе, когда тысячи пользователей одновременно получают доступ к сайту? - PullRequest
0 голосов
/ 24 мая 2019

Я занимаюсь разработкой системы erp для школ, в которой также есть функция онлайн-экзамена.

Мой вопрос

  1. Является ли хорошей идеей хранить вопросы с несколькими вариантами ответов (около 50 вопросов на одного учащегося и 4 ответа на каждый вопрос, когда более 1000 студентов сдают экзамен за один раз) в сеансе и когда студент нажимает на следующий вопрос или предыдущий вопрос Я возьму следующий вопрос из сессии и вернусь на страницу, не вызовет ли это проблемы с нехваткой памяти при увеличении числа учеников?

  2. Во всех случаях использования в erp, где бы мы ни отображали список, предположим, что мы показываем список студентов для определенного класса, мы помещаем этот список в сессию и показываем список, когда администратор нажимает на кнопку Изменить студента, мы передаем индексировать запись из таблицы и получать ту же запись из сеанса на основе индекса и передавать ее на страницу редактирования редактирования. Это плохая идея?

И всякий раз, когда пользователь переходит к другому варианту использования, такому как сценарий использования списка студентов, чтобы пометить сценарий использования, мы очищаем данные в сеансе от предыдущего варианта использования.

Каковы лучшие практики или решения для обоих случаев?

Спасибо

1 Ответ

0 голосов
/ 24 мая 2019

Http-запрос не имеет статуса. Каждый http-запрос отделяется. Внутренний сервер не может различать разных пользователей по запросу http. Так внутренний сервер отправляет cookie с именем JSESSIONID в браузер, его можно использовать для пометки пользователя, когда браузер отправляет запрос на сервер с этим cookie.

Сессия имеет ограниченную жизнь. В Tomcat по умолчанию время ожидания сеанса составляет 30 минут. Вы можете найти эту конфигурацию в $CATALINA_BASE/conf/web.xml.

<!-- ==================== Default Session Configuration ================= -->
<!-- You can set the default session timeout (in minutes) for all newly   -->
<!-- created sessions by modifying the value below.                       -->

<session-config>
  <session-timeout>30</session-timeout>
</session-config>

Если пользователь получил доступ к вашему веб-серверу в 09:00, а до 09:31 запросов больше не было, сеанс этого пользователя будет уничтожен. Но в вашем случае вы можете просто установить время ожидания сеанса больше, чем время экзамена. Я думаю, что это маленькая хитрость.

Еще один вопрос, сессия связана с браузером. Если ученик закроет и снова откроет браузер или откроет другой браузер, его вопросы будут восстановлены, и то, что он уже сделал в исходном окне браузера, исчезнет навсегда. Я не знаю, что система erp могла бы принять это.

И сеанс поддерживает только один внутренний сервер. Если вы развернете несколько серверов для системы erp и будете использовать nginx для пересылки запросов и балансировки нагрузки, это приведет к проблемам.

Если вы развертываете только один экземпляр для системы erp, вы можете просто сохранить карту в памяти, ключ - это идентификатор студента, а значение - идентификатор вопроса.

Если система erp является распределенной системой, вы должны хранить данные в Redis, используя хеш.

Кстати, вы можете просто вернуть все вопросы во внешний интерфейс и использовать js для их обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...