Эти данные хранятся в базе данных или Redis. Из-за большого количества пользователей даже поиск в Redis может быть довольно дорогостоящим. Если все эти данные будут сохранены в Session, то во время активности группы (предположим, что любое действие, связанное с текущим чатом, например, сообщение в группе, считается активностью группы; если в течение 20 минут не было никаких действий, группа считается неактивной), операции, требующие использования этих данных, могут быть напрямую извлечены из памяти текущего сервиса Session без удалённого запроса к Redis. Это значительно сократит время отклика и существенно снизит стоимость обработки, а сокращение времени обработки и снижение стоимости обслуживания приведут к значительному повышению качества каждого запроса на обслуживание и увеличению параллелизма на одном сервере.
Предварительным условием для сокращения запросов к хранилищу и сохранения данных, связанных с группой, в Session является обеспечение целостности данных в Session. Как обеспечить целостность данных в Session здесь подробно не рассматривается, но можно дать две подсказки:
Группа легко создаёт параллелизм. Когда два члена неактивной группы случайно отправляют сообщения или проверяют информацию о группе одновременно, и оба запроса случайно направляются к одному и тому же узлу службы, текущий узел не имеет соответствующего Session для этой группы. В этом случае многократная загрузка Session может привести к снижению производительности. Многократная загрузка данных Session не является разумной и противоречит принципу проектирования Session. Поскольку служба на основе Nebula полностью асинхронная, нет необходимости блокировать другие запросы и ждать завершения загрузки данных одного запроса, что снижает параллелизм. Кроме того, поскольку запросы «одновременно» достигают цели, на самом деле существует определённый порядок следования между запросами, и между ними могут быть микросекундные или даже более мелкие временные различия. Вот где используются четыре метода защиты членов Session: IsReady(), SetReady(), IsLoading() и SetLoading():
В этих шагах есть только один запрос на загрузку данных, отправленный в систему хранения. После получения ответа от системы хранения фреймворк вызывает обратный вызов для каждого ожидающего одного и того же набора данных Step, одновременно заполняя данные Session группы. Последующие запросы могут напрямую получать данные из Session группы без необходимости отправлять дополнительные запросы в систему хранения.
Диаграмма процесса или временная диаграмма, иллюстрирующая сценарий применения Session для групп, была бы более понятной, но она не предоставлена.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )