Compartilhando dados da sessão HTTP no Passenger / Rack - Qual é a melhor prática atual?

3

Minha empresa tem um aplicativo da Web voltado para o cliente, distribuído em vários servidores para fins de balanceamento de carga e tolerância a falhas. O aplicativo é escrito em Ruby (Rack, em execução no Passenger) e a autenticação no aplicativo é feita por meio de cookies de sessão HTTP.

Atualmente, usamos um banco de dados SQL para armazenar os dados da sessão (replicando-os como parte de nossa replicação de banco de dados padrão), mas essa solução não é ideal, pois o banco de dados SQL é Postgres e não suporta operações multi-mestre (durante interrupção de manutenção no banco de dados principal usuários conectados podem verificar suas sessões em relação a um escravo, mas novos usuários não podem efetuar login. A sobrecarga de consultas SQL para cada acerto de página também não é ideal.

Gostaria de saber quais soluções práticas as pessoas estão usando atualmente na produção.
O ideal é que procuremos:

  • Um armazenamento de sessão compartilhada
    Os usuários que efetuaram login no Server A devem poder mover-se com transparência para Server B sem precisar fazer login novamente.

  • Boa redundância
    Perder um único servidor não deve perder nenhum estado de sessão.

  • Baixa sobrecarga
    No mínimo, "menos intensivo do que uma consulta SQL para cada hit de página".

por voretaq7 09.07.2014 / 22:16

1 resposta

0

Até agora, a solução mais promissora que encontramos é rack-session-mongo . Isso, combinado com a replicação do MongoDB, deve atender aos requisitos de armazenamento de sessão compartilhada e de redundância / failover.

Estamos começando a testar para ver se ele atende ao requisito de "baixa sobrecarga", mas parece promissor nesse aspecto também.

    
por 09.07.2014 / 22:16