Redis Session State Provider управляет резервом
Я использую Redis в качестве поставщика состояния сеанса, но так как у меня много пользователей, иногда случается, что Redis выходит из строя. Поэтому я хотел бы иметь поставщика состояния сеанса по умолчанию для использования в случае отказа первого.
Это возможно? Любые другие решения?
Спасибо
2 ответа
Конвейер сеансов ASP.NET не поддерживает возврат к другому поставщику сеансов, поэтому резервная функциональность должна быть включена в поставщик состояний сеансов Redis. Но провайдер Redis общается только с Redis, поэтому вам придется делать это самостоятельно, либо в своем собственном форке проекта, либо создав собственный настраиваемый провайдер сеансов, который наследуется от SessionStateStoreProviderBase и обертывает доступ к RedisSessionStateProvider (вместе с любым резервным вариантом). логика хранения, которую вы хотели бы использовать, если ваш провайдер обнаруживает сбой Redis).
Но теперь вы ищите большой беспорядок: где вы должны временно хранить данные (внутрипроцессный кеш? Теперь вы говорите о липких сессиях. SQL Server? Еще один сервер для управления)... И, как только приходит Redis резервное копирование, как вы заполняете его активными сеансами из вашего временного хранилища? Есть много проблем для обдумывания, и неудивительно, что Microsoft не поддерживает это.
Поэтому, как упоминал @MatíasFidemraizer, лучше всего сосредоточить свои усилия на улучшении развертывания Redis, чтобы оно могло справиться с вашей нагрузкой, а также настроить репликацию Master-Slave с Redis Sentinel для автоматического переключения при сбое. Если это слишком много, то есть целый ряд коммерческих решений, которые возьмут на себя тяжелую работу по восстановлению после отказа (у компании, в которой я работаю, есть очень простой продукт под названием ScaleOut SessionServer)
так как у меня много пользователей, иногда случается так, что Redis выходит из строя
Я сомневаюсь, что это должно быть причиной за кадром. Достаточно ли у вас оперативной памяти? Причин может быть много, но я сомневаюсь, что проблема заключается в "многих пользователях", если только вы не Google, Twitter или какой-то сайт с чрезмерно высоким трафиком, и, в конце концов, Redis также предназначен для этого варианта использования...
Поэтому я пропущу часть того, как вы бы поменяли государственных провайдеров, и я перейду к:
Любые другие решения?
Ответ Redis Sentinel (перейдите по этой ссылке, чтобы узнать больше об этом).
Из официальных документов:
Redis Sentinel обеспечивает высокую доступность Redis. С практической точки зрения это означает, что с помощью Sentinel вы можете создать развертывание Redis, которое будет защищено без вмешательства человека до определенных сбоев.