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

Vista: 11633|Resposta: 0

Balanceamento de carga, manutenção de sessão, sincronização de sessões

[Copiar link]
Publicado em 14/05/2015 00:16:44 | | |


1. O que é balanceamento de carga
Um site novo não deve ser balanceado em carga, porque o volume de tráfego não é grande, então não há necessidade de se envolver nessas coisas. No entanto, com o rápido crescimento do tráfego e do tráfego do site, um único servidor é limitado por suas próprias condições de hardware, tornando-se difícil suportar um número tão grande de visitas. Neste caso, há duas opções para escolher:
1. Atualizar o hardware de um único servidor, de dual-core para quad-core, aumentar a memória, etc.
2. Aumentar o número de servidores para compartilhar o peso dos servidores. Alcançar o objetivo de aumentar a largura de banda da rede e o poder de processamento do servidor.
O primeiro método pode ser entendido como desenvolvimento vertical, que é sempre limitado. O segundo método é a escolha certa para resolver o problema
Os métodos de balanceamento de carga podem ser divididos em duas direções: uma é usar software para alcançar balanceamento de carga, e a outra é implementar balanceamento de carga de hardware (incluindo a combinação de hardware e software)
Use software para alcançar balanceamento de carga, e o processo de alcançar o balanceamento também consome alguns recursos do sistema e aumenta o tempo de resposta. Por exemplo, LVS, nginx, haproxy, apache, etc., esses softwares de balanceamento de carga baseados em aplicações são adequados para sites que não têm um número particularmente grande de visitas. Se você tem um site com um grande número de visitas, como Sina e 163, usar hardware para implementar balanceamento de carga é a escolha mais óbvia.
Existem muitos algoritmos de balanceamento de carga, incluindo balanceamento de carga baseado no número de requisições, endereços IP raiz e algoritmos baseados em tráfego. Existem dois algoritmos que uso com frequência.
Uma é baseada no número de solicitações
R, ele pode perceber que cada servidor pode compartilhar o pedido do cliente de forma igual, e se um dos servidores cair, isso não causará um impacto negativo.
b. O estado entre servidores deve ser sincronizado, como a sessão, e outros meios são necessários para sincronizar esses estados.
Uma é de acordo com o IP
R, ip_hash algoritmo pode mapear um IP para um servidor, o que pode resolver o problema da sincronização de sessões
b. O lado ruim de ip_hash é que, se um dos servidores cair, os usuários mapeados nesse servidor ficarão deprimidos.
c, ip_hash pode facilmente levar a uma carga desequilibrada, agora o governo do caranguejo do rio filtra as palavras-chave de busca do Google, você frequentemente verá que o Google não consegue abrir, mas depois de um tempo vai ficar bem. Isso deixou esses entusiastas do Google deprimidos, e muitos usuários foram para o exterior em busca de agentes. Se isso acontecer, esses proxies serão atribuídos ao mesmo servidor, causando carga desbalanceada e até falhas.

Segundo, o que é a realização de uma sessão e qual é sua função
Session hold refere-se a um mecanismo no balanceador de carga que garante que as requisições de acesso associadas ao mesmo usuário sejam distribuídas para o mesmo servidor durante o balanceamento de carga.
O que faz o session hold, dê um exemplo
Se uma solicitação de acesso de usuário for atribuída ao servidor A e fizer login no servidor A, e em um curto período de tempo esse usuário enviar outra solicitação, se não houver função de retenção de sessão, a solicitação desse usuário provavelmente será atribuída ao servidor B, neste momento não há login no servidor B, então você precisa fazer login novamente, mas o usuário não sabe onde sua solicitação está atribuída, a sensação do usuário é que está logado, por que precisa fazer login novamente? A experiência do usuário é muito ruim.
E se você comprar algo no Taobao, a partir de login = "Shoot something=" add address = "to pay", essa é uma série de processos, que também pode ser entendida como um processo operacional, toda essa série de processos operacionais deve ser concluída por um servidor e não pode ser atribuída a servidores diferentes pelo balanceador de carga.
O tempo de espera de sessão tem um limite de tempo (exceto para servidores que são mapeados para um fixo, como ip_hash), e várias ferramentas de balanceamento de carga fornecem essa configuração de tempo de espera de sessão, LVS, apache, etc. Até mesmo a linguagem PHP oferece uma session.gc_maxlifetime para definir o tempo de espera da sessão
O tempo de espera da sessão deve ser definido mais do que o tempo de sobrevivência da sessão, o que pode reduzir a necessidade de sincronizar sessões, mas não pode ser eliminado. Portanto, as sessões de sincronização ainda precisam ser feitas.

Terceiro, sincronização de sessões
Por que sincronização de sessões? Isso já foi mencionado ao falar sobre manutenção de sessões. Para mais informações, veja Três Métodos de Sincronização de Sessão em um Cluster Web

Existem três métodos de sincronização de sessões em um cluster web

Depois de fazer um cluster web, você definitivamente vai considerar a sincronização de sessão primeiro, porque após o balanceamento de carga, o mesmo acesso IP à mesma página será atribuído a servidores diferentes. Então, este artigo apresenta três maneiras diferentes de resolver esse problema de acordo com essa situação:
Primeiro, use o banco de dados para sincronizar a sessão
Eu não usei esse método ao fazer sincronização de sessões entre múltiplos servidores, mas se precisasse usar esse método, pensei em dois métodos:
1. Usar um computador de baixo desempenho para construir um banco de dados que armazene a sessão do servidor web, ou construir esse banco de dados especial no servidor de arquivos; quando o usuário acessar o servidor web, ele irá a esse banco de dados especial para verificar a situação da sessão e alcançar o propósito da sincronização da sessão.
2. Esse método consiste em colocar a tabela onde a sessão está armazenada junto com outras tabelas de banco de dados; se o mysql também for clusterizado, cada nó mysql deve ter essa tabela, e a tabela de dados dessa tabela de sessão deve ser sincronizada em tempo real.
Explicação: Usar o banco de dados para sincronizar sessões aumentará a carga sobre o banco de dados, que é inerentemente propenso a gargalos. O primeiro dos dois métodos acima é melhor, pois separa a tabela onde a sessão é colocada de forma independente, reduzindo a carga sobre o banco de dados real
2. Use cookies para sincronizar sessões
Sessão é a situação do arquivo armazenada no lado do servidor, e o cookie é a situação do arquivo no cliente, como conseguir sincronização? O método é muito simples, ou seja, colocar a sessão gerada pela página de visita do usuário no cookie, ou seja, usar o cookie como uma estação de retransmissão. Você visita o servidor web A, gera uma sessão e a coloca no cookie, seu acesso é atribuído ao servidor web B, neste momento, o servidor web B primeiro julga se o servidor tem essa sessão, se não, vá ver se existe essa sessão no cookie do cliente, se não, significa que a sessão realmente não está salva, se houver uma no cookie, Sincronize o sessoin do cookie com o servidor web B, para que a sessão possa ser sincronizada.
Nota: Este método é simples e conveniente de implementar, e não aumentará a carga sobre o banco de dados, mas se o cliente desativar cookies, a sessão não poderá ser sincronizada, o que trará prejuízos para o site; Cookies não são altamente seguros e, embora tenham sido criptografados, ainda podem ser falsificados.

3. Use o memcache para sincronizar sessões
O Memcache pode ser distribuído e, sem essa função, não pode ser usado para sincronização de sessões. Ele pode combinar a memória do servidor web para formar um "mempool", não importa qual servidor gere sessoin, ele pode ser colocado nesse "mempool", e todo o resto pode ser usado.
Vantagens: sincronizar sessões dessa forma não aumenta a carga sobre o banco de dados, e a segurança é muito melhor em comparação ao uso de cookies, e colocar sessões na memória é muito mais rápido do que ler arquivos.
Desvantagens: o memcache divide a memória em várias especificações de blocos de armazenamento, existem blocos e tamanhos, dessa forma também determina, o memcache não pode utilizar totalmente a memória, produzirá fragmentação de memória; se o bloco de armazenamento for insuficiente, também gerará transbordamento de memória.

Quarto, resumo
Todos os três métodos acima são viáveis
O primeiro método, aquele que mais afeta a velocidade do sistema, não é recomendado;
O segundo método tem bons resultados, mas os riscos de segurança são os mesmos;
O terceiro método, eu pessoalmente acho o terceiro método o melhor, recomendo que todos usem;




Anterior:Nossa escola é realmente rica
Próximo:Temporada de Formatura Mostre suas fotos de formatura e fotos de turma!
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