Java

Eliminação de sessões fixas em Java | Couchbase Spring Session

Sessões fixas refere-se à necessidade de redirecionar as solicitações de um determinado usuário para o mesmo servidor em que sua sessão reside. Isso é considerado um antipadrão, pois, em caso de falha do servidor, todos os usuários conectados a ele perderão suas sessões.

A associação entre o usuário e o servidor geralmente é configurada por meio do balanceador de carga, e estratégias simples de balanceamento de carga, como Redondo-robin muitas vezes não são suficientes para garantir uma distribuição uniforme das solicitações, pois os usuários pesados podem acabar todos no mesmo nó. Há muitas maneiras de evitar as sessões fixas, mas se o seu aplicativo armazena os dados do usuário na sessão HTTPS, as opções sem a necessidade de uma refatoração substancial são um pouco limitadas.

Uma solução rápida para esse problema é armazenar a sessão no banco de dados em vez de usar a memória do servidor. Nesse cenário, não importa qual nó receba a solicitação, ele carregará a sessão do usuário diretamente do armazenamento de dados. Essa abordagem é mais simples do que as soluções específicas para contêineres e também permite que você consulte as sessões como qualquer outra coisa no seu banco de dados.

O Couchbase se encaixa particularmente bem nesse cenário: ele usa o mecanismo interno de valor-chave e também aproveita a camada de cache interna para manter na memória as sessões usadas recentemente. Na prática, isso significa que essa é uma solução que terá um bom desempenho mesmo em escala. É por isso que estamos adicionando o suporte da comunidade Sessão de primavera:

Sessão do Couchbase Spring torna trivial o suporte a sessões em cluster, armazenando-o no banco de dados e, do ponto de vista do desenvolvedor, é totalmente transparente. Tudo o que você precisa fazer é adicionar a seguinte dependência:

e, em seguida, em sua classe principal, adicione a tag @EnableCouchbaseHttpSession anotação:

e pronto! De agora em diante, o Spring salvará automaticamente a HTTPSession no Couchbase:

Por padrão, a sessão será armazenada no banco de dados em um documento com um tipo igual a "sessões“:

Mas você pode alterar o nome do atributo de tipo, o valor do tipo e a duração da sessão:

 

Consultar a sessão do usuário

Observe que todos os dados da sessão são armazenados de forma binária em um atributo chamado _attr:

O Spring não sabe quais tipos de objetos estão na sessão, portanto, não há uma maneira fácil de convertê-lo em um formato legível por humanos. Você pode superar essa limitação definindo o atributo manterStringAsLiteral como verdadeiro no EnableCouchbaseHttpSession anotação:

manterStringAsLiteral dirá Sessão do Couchbase Spring para armazenar todos os atributos String da sessão como propriedades de nível superior no documento. Por exemplo, em vez de adicionar uma instância diretamente à sessão, poderíamos converter o objeto em um formato String codificado em JSON usando a função Mapeador de objetos:

E então, quando você precisar ler o carrinho de sessão, converta-o novamente em um objeto:

Isso exigirá um pouco mais de esforço quando você precisar adicionar/remover/atualizar dados da sessão, mas, por outro lado, você poderá consultar as sessões. Esta é a aparência do documento no banco de dados:

Observe que ainda temos o _att para objetos que não sejam uma String. No entanto, agora também temos um atributo chamado chave, que é exatamente o objeto que adicionamos à sessão no exemplo anterior.

Agora, se você quiser consultar sua sessão, N1QL tem uma função chamada DECODE_JSONque pode transformar uma string codificada em JSON em um objeto:

Observação: Em um ambiente de produção, recomendamos que você crie um índice com o objeto decodificado em vez de decodificá-lo no momento da consulta.

Se você quiser saber mais sobre o Couchbase Spring Session, confira este tutorial

Se tiver alguma dúvida, sinta-se à vontade para entrar em contato comigo pelo e-mail @deniswrosa

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Author

Posted by Denis Rosa, defensor dos desenvolvedores, Couchbase

Denis Rosa é um Developer Advocate do Couchbase e mora em Munique, na Alemanha. Ele tem uma sólida experiência como engenheiro de software e fala fluentemente Java, Python, Scala e Javascript. Denis gosta de escrever sobre pesquisa, Big Data, IA, microsserviços e tudo o mais que possa ajudar os desenvolvedores a criar um aplicativo bonito, mais rápido, estável e escalável.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.