ASP.NET é conhecido por desenvolver aplicações web de alto tráfego. Muitos desses aplicativos são implantados em várias localizações geográficas. Essa implantação em vários sites é feita para fins de recuperação de desastres ou para lidar com o tráfego regional com o aplicativo ASP.NET mais próximo do usuário final.
No caso de recuperação de desastres, geralmente há um site ativo e um site passivo. O site passivo torna-se ativo assim que o site ativo fica inativo por qualquer motivo. Em outros casos, dois ou mais sites podem estar todos ativos, mas controlando o tráfego mais próximo de sua região (por exemplo, Nova York, Londres e Tóquio).
NCache Adicionar ao carrinho NCache Docs Provedor de estado de sessão ASP.NET
ASP.NET mantém informações específicas do usuário em seu objeto Session State no servidor web. Quando o usuário acessa o aplicativo ASP.NET pela primeira vez, seu estado de sessão é criado e permanece lá enquanto o usuário estiver usando o aplicativo ativamente. Por padrão, após 20 minutos de inatividade do usuário, o ASP.NET expira esta sessão.
O objeto Estado de Sessão ASP.NET é armazenado na memória do servidor Web (InProc), em qualquer servidor (StateServer), em um banco de dados SQL Server ou em um armazenamento de terceiros usando a arquitetura SSP.
A opção de terceiros geralmente é um cache distribuído na memória, como NCache, é um ótimo lugar para armazenar o estado da sessão. Os motivos são desempenho mais rápido, maior escalabilidade e melhor confiabilidade do estado de sessão do ASP.NET devido à replicação de sessão. Abaixo está um exemplo de como você pode especificar uma opção de armazenamento de sessão personalizada no arquivo web.config, que resulta em NCache como armazenamento de estado de sessão ASP.NET:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<sessionState cookieless ="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"> <providers> <add name ="NCacheSessionProvider" type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider" sessionAppId="demoApp" cacheName="demoClusteredCache" writeExceptionsToEventLog="false" asyncSession="false" enableLogs="false"/> </providers> </sessionState> |
Implantação de vários sites ativo-passivo
Mas, se seu aplicativo estiver sendo executado em uma implantação de vários sites, a questão que você deve resolver é o que fazer sobre Sessão ASP.NET Armazenamento do estado. Se você implantou seu aplicativo ASP.NET em uma configuração multissite ativo-passivo, todos os seus Estados de Sessão ASP.NET estão sendo criados e armazenados no site ativo. O site passivo não possui dados de sessão. Portanto, se o site ativo cair e todo o tráfego for redirecionado para o site passivo, todos os usuários perderão repentinamente suas sessões e terão que começar de novo. Você pode evitar isso usando o NCache Topologia da Ponte.
Depois de criar um ponte entre os sites ativo e passivo, o site ativo começa a enviar todas as adições, atualizações e remoções de objetos ASP.NET Session State para o Bridge. A Bridge os replica de forma assíncrona na WAN para o site passivo. A arquitetura Bridge não bloqueia as operações do site ativo, portanto, você não vê nenhuma degradação de desempenho. O único problema que você deve ter em mente é que, como o Bridge replica de forma assíncrona, pode haver algumas sessões na “fila de replicação” que não chegarão ao site passivo se o site ativo for encerrado abruptamente. Mas este é geralmente um número insignificante. Leia mais sobre NCache Topologia da ponte e todas as situações em que é benéfico para você.
NCache Adicionar ao carrinho NCache Docs Propriedades do provedor de estado de sessão ASP.NET
Implantação de vários sites ativo-ativo
Se seu aplicativo ASP.NET for implantado em dois ou mais sites ativos simultaneamente, evite replicar Estado da Sessão ASP.NET a todos os sites para economizar no custo da largura de banda. No entanto, você provavelmente deseja a capacidade de rotear algum tráfego para outros sites para lidar com situações de estouro.
Como alternativa, pode ser necessário desativar um dos sites para manutenção sem interrupções para os usuários. Nesse caso, você pode usar o recurso de armazenamento de estado de sessão ASP.NET multi-site em NCache. O recurso permite que você lide com esses casos e especifique no web.config para gerar ids de sessão com um prefixo de local para o site “primário” desta sessão. Então, mesmo que essa solicitação de sessão roteie para outro site, esse site saberá onde encontrar essa sessão.
As sessões não são movidas de seu local principal, mesmo que o usuário solicite uma rota para o outro site. Mas o outro site pode acessar esta sessão de seu site “primário”. Cada site especifica seu “primário” e todos os outros como sites “secundários”. Abaixo estão as etapas que você deve seguir para atingir esse objetivo:
- Adicionar entrada em web.config. É necessário gerar o ID de sessão ASP.NET da mesma maneira em todos os servidores e sites. Você pode usar o utilitário genmackeys disponível com NCache instalação para gerar as chaves.
1<machineKey validationKey ="A01D6E0D1A5D2A22E0854CA612FE5C5EC4AECF24"decryptionKey ="ACD8EBF87C4C8937" validation ="SHA1"/> - Para habilitar a afinidade de local de um ID de sessão, adicione a configuração mencionada abaixo:
123456<configSections><section name="ncache" type="Alachisoft.NCache.Web.SessionStateManagement.NCacheSection,Alachisoft.NCache.SessionStateManagement, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/></configSections><ncache><sessionLocation><primaryCache id="London_Cache" sid-prefix="LDNC"/><secondaryCache id="NewYork_Cache" sid-prefix="NYKC"/><secondaryCache id="Tokyo_Cache" sid-prefix="TKYC"/></sessionLocation></ncache> - Especifique o gerenciador de ID de sessão personalizado usando o atributo sessionIDManagerType do elemento sessionState em web.config.
12345678910111213141516171819202122232425262728293031<<sessionStatecookieless ="false"regenerateExpiredSessionId="true"mode="Custom"customProvider="NCacheSessionProvider"timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"><providers><add name ="NCacheSessionProvider"type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider"sessionAppId="demoApp"cacheName="demoClusteredCache"writeExceptionsToEventLog="false"asyncSession="false"enableLogs="false"/></providers></sessionState>
Observe que no exemplo acima, a seção em cada site será diferente, o que significa que cada site terá seu próprio “primário” e considerará todos os outros sites como “secundários”.
NCache Adicionar ao carrinho NCache Docs ASP.NET Core Sessões
ASP.NET gera sid (id de sessão) em um formato específico para que o prefixo sid possa fazer parte do id de sessão. Este ID de sessão ajuda o ASP.NET a conhecer a origem do estado de sessão do ASP.NET para que o cache desse site seja acessado. Com essa configuração, se você rotear qualquer solicitação de um site para outro para estouro, o outro site buscará o Estado de Sessão ASP.NET de seu site “primário” original porque isso faz parte do ID da sessão como um prefixo de local. Ele minimiza o consumo de largura de banda da WAN e você paga apenas pelo tráfego de estouro.
A outra situação é quando você quer derrubar um site. Você pode redirecionar todo o tráfego do site para outros sites sem desligar os servidores de cache deste site; você pode desligar os servidores web. Em seguida, aguarde até que todos os objetos de estado de sessão ASP.NET existentes expirem depois que seus usuários pararam de usar o aplicativo. Depois que o tráfego for redirecionado, basta desligar os servidores de cache. Com isso, seus usuários não sentirão nenhum tempo de inatividade. Dê uma olhada em como NCache ajuda você a atingir esse objetivo. Baixe um teste de 60 dias totalmente funcional do NCache.