Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 2945|Resposta: 0

O balanceamento de carga Nginx resolve o problema de ponto único do backend SESSION

[Copiar link]
Publicado em 10/01/2023 20:38:39 | | | |
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:

asp.net compartilhamento de sessões (via StateServer)
https://www.itsvse.com/thread-6613-1-1.html

. Arquitetura distribuída net: Compartilhamento de sessões baseado no Redis
https://www.itsvse.com/thread-5189-1-1.html

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)




Anterior:【Ação Prática】Use o Docker para construir um repositório privado do Gitlab
Próximo:Reescrita de URL IIS Limpeza de Regras do Módulo
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com