Pergunta

O PHP armazena as informações de sua sessão no sistema de arquivos do host do servidor que estabelece essa sessão.Em um ambiente PHP de vários hosts, onde a carga é distribuída de forma não inteligente entre cada host, as variáveis ​​de sessão PHP não estão disponíveis para cada solicitação (a menos que por acaso a solicitação seja atribuída ao mesmo host - suponha que não tenhamos controle sobre o balanceador de carga) .

Este site, apelidado de "O Guia do Mochileiro para Balanceamento de Carga PHP" sugere substituir o manipulador de sessão do PHP e armazenar informações da sessão no banco de dados compartilhado.

Qual é, na sua humilde opinião, o melhor maneira de manter as informações da sessão em um ambiente de vários hosts PHP?

ATUALIZAR: Obrigado pelo ótimo feedback.Para quem procura um código de exemplo, encontramos um tutorial útil sobre como escrever uma classe Session Manager para MySQL que eu recomendo conferir.

Foi útil?

Solução

Banco de dados ou Banco de dados + Memcache.De modo geral, as sessões não devem ser escritas com muita frequência.Comece com uma solução de banco de dados que só grave no banco de dados quando os dados da sessão forem mudado.O Memcache deverá ser adicionado posteriormente como um aprimoramento de desempenho.Uma solução de banco de dados será muito rápida porque você só procura chaves primárias.Certifique-se de que o banco de dados tenha bloqueio de linha, não bloqueio de tabela (myISAM).MemCache apenas é uma má ideia ...Se transbordar, travar ou for reiniciado, os usuários serão desconectados.

Outras dicas

Faça o que fizer, não armazene-o no próprio servidor (mesmo se estiver usando apenas um servidor ou em um cenário de failover 1+1).Isso o colocará em um beco sem saída.

Eu diria, use Database + Memcache para armazenamento/recuperação, isso o manterá fora do alcance do Zend (e acredite, as coisas quebram em algum momento com o Zend).Como você poderá particionar facilmente por UserID ou SessionID, mesmo usar o MySQL deixará as coisas bastante escaláveis.

(Editar:além disso, usar DB + Memcache não o vincula a uma parte comercial, nem ao PHP - algo que você pode ficar feliz no futuro)

Armazenar os dados da sessão em um banco de dados compartilhado funciona, mas pode ser lento.Se for um site realmente grande, cache de memória é provavelmente uma opção melhor.

Dependendo do orçamento do seu projeto, você também pode considerar a plataforma Zend para suas máquinas de produção, que além de vários outros recursos excelentes, inclui clustering de sessão configurável, que funciona como um CDN.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top