Requisitos: Use o Nginx para construir um proxy reverso, responsável por agendar todas as requisições, o backend é desenvolvido pela ASP.NET MVC e implantado em múltiplos servidores diferentes, formando um cluster backendInformações de sessão não podem ser compartilhadas, resultando em algumas solicitações não sendo processadas corretamente。 Os seguintes problemas surgirão:
ASP.NET O site pode ser referido da seguinte forma:
As soluções mais comuns são as seguintes:
Use o banco de dados para armazenar a SESSION
Como cada servidor precisa usar a mesma sessão, podemos armazenar a sessão no mesmo banco de dados, toda vez que acessamos, vamos ao banco de dados para verificar se existe essa sessão ou se ela expirou, e então podemos sincronizar a sessão de vários servidores;
Mérito:Usar esse método é simples, conveniente e fácil de começar;
Deficiência:Usar o banco de dados para sincronizar sessões aumentará a IO do banco de dados e aumentará a carga sobre o banco de informações. Ao mesmo tempo, cada acesso precisa interceptar requisições e consultar o banco de dados, resultando em uma camada adicional de acesso e tempo desperdiçado de sessão de banco de dados.
Use um mecanismo de cache como Memcache ou Redis para armazenar a SESSION
O uso de mecanismos de cache distribuído, como memcache ou redis, para armazenar dados de sessão é uma solução popular para balanceamento de carga e sessões síncronas em muitos projetos de grande porte. Seu princípio é que o projeto usa o cache memcache ou redis no mesmo lugar; quando o usuário faz login, a sessão será armazenada no cache, e então, independentemente de qual servidor do projeto seja acessado, o cache da sessão será obtido do mesmo lugar, facilitando a sincronização da sessão;
Mérito:Usar cache para sincronizar sessões não aumentará a carga sobre o banco de dados, nem você precisará julgar manualmente se a sessão existe ou expira, eliminando alguma lógica de negócio.
Deficiência:Memcache ou Redis divide a memória em várias especificações de blocos de armazenamento, e existem blocos com tamanhos, o que também determina que Memcache ou Redis não conseguem utilizar totalmente a memória, o que causará fragmentação de memória, e se os blocos de armazenamento forem insuficientes, ocorrerá também um transbordamento de memória.
Aproveite o padrão ip_hash no Nginx
Essa técnica, também conhecida como sessão de conservação, é a ip_hash tecnologia no nginx que permiteSolicitações de um determinado endereço IP são fixadas no mesmo servidor de aplicação backend, para que um cliente e um backend sob esse IP possam estabelecer uma sessão estável.
(Mas também há uma desvantagem, se a rede do operador for mais volátil e instável,A propriedade intelectual de saída é dinâmicaSim, haverá problemas com esse método. )
O método de teste é abrir dois sites baseados no docker,Você precisa criar um novo arquivo index.html nos diretórios /data/testsite/a e /data/testsite/b, respectivamente, o comando é o seguinte:
Acesso por meio de um navegador, conforme mostrado abaixo:
Se você criar um novo container nginx baseado no Docker, sem usar ip_hash tecnologia, a solicitação pode ser enviada para diferentes servidores backend, como mostrado na figura abaixo:
Usando ip_hash tecnologia, crie um novo arquivo /data/testsite/nginx.conf com a seguinte configuração:
O comando de inicialização do Docker é o seguinte:
(A manutenção de sessões baseada em cookies, que pode ser consultada no módulo fixo, foi omitida)
Configuração do Nginx:O login do hiperlink está visível.
(Fim)
|