Sessões PHP em servidores com escalonamento automático

1

(Desculpas por postagens cruzadas com o SO. Eu não tinha certeza de onde era mais apropriado.)

Estou trabalhando em um aplicativo da Web PHP implantado no Amazon Web Services. Temos balanceadores de carga na frente de servidores de aplicativos em escala automática.

O problema que estamos enfrentando no momento é lidar com as sessões. Embora as sessões persistentes sejam uma solução razoável, gostaríamos de persistir nas sessões por um bom tempo (semanas idealmente). Isso provavelmente prejudicará o desempenho do balanceador de carga ao longo do tempo. Além disso, usar escalonamento automático significa que, de tempos em tempos, removeremos um servidor e, assim, perderemos todas as sessões ativas nele. É claro, poderíamos apenas usar um banco de dados comum para armazenar sessões, mas estou um pouco preocupado com o desempenho se cada solicitação exigir outra viagem de ida e volta ao banco de dados.

Ficaria muito grato se você pudesse sugerir quaisquer soluções que funcionaram para você ou quaisquer ideias que pudéssemos tentar.

Agradecemos antecipadamente por sua ajuda Ross

    
por Ross McFarlane 23.02.2011 / 11:53

3 respostas

4

PHP armazena sua sessão em arquivos simples. Você já tentou armazená-los em um armazenamento comum?

Pergunta semelhante: Compartilhar sessões PHP no sistema de arquivos em nuvem

Aqui está um artigo sobre essa questão específica e diferentes abordagens: link

    
por 23.02.2011 / 12:08
1

IME, há pouca sobrecarga entre o uso de sessões baseadas em arquivo e sessões de banco de dados (da última vez eu observei isso em detalhes usando a replicação master / master em 3 nós mysql) - mas o último mais frequentemente envolve uma viagem de rede o primeiro (acessando uma instância local do mysql, a diferença não é mensurável em comparação com um sistema de arquivos local). Também é muito mais simples dimensionar o armazenamento baseado em db para repositórios compartilhados e, como é uma metodologia de chave / valor simples, é simples implementar no nosql dbs - que escala com mais facilidade do que os bancos de dados relacionais.

    
por 23.02.2011 / 12:16
0

Já foi mencionado nos artigos vinculados por outros, mas vale a pena repetir separadamente: o Memcache é uma opção muito útil aqui. É incrivelmente rápido, escalável para múltiplos servidores / instâncias Memcache, fácil e muito fácil de implementar sem muita sobrecarga ou carregamento no banco de dados. Eu implementei isso com o mínimo de esforço em um site com milhões de acessos por dia e ele deu muito mais espaço para crescimento no hardware existente.

Isso também permite o uso da própria política de envelhecimento do Memcache, em vez de executar o coletor de lixo de sessão do PHP.

    
por 23.02.2011 / 12:34