Entendendo o gerenciamento de sessões com o motorista na Amazon QLDB - Banco de dados Amazon Quantum Ledger (AmazonQLDB)

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Entendendo o gerenciamento de sessões com o motorista na Amazon QLDB

Importante

Aviso de fim do suporte: os clientes existentes poderão usar a Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte Migrar um Amazon QLDB Ledger para o Amazon Aurora Postgre. SQL

Se você tiver experiência no uso de um sistema de gerenciamento de banco de dados relacional (RDBMS), talvez esteja familiarizado com conexões simultâneas. QLDBnão tem o mesmo conceito de RDBMS conexão tradicional porque as transações são executadas com mensagens de HTTP solicitação e resposta.

EmQLDB, o conceito análogo é uma sessão ativa. Uma sessão é conceitualmente semelhante a um login de usuário — ela gerencia as informações sobre suas solicitações de transação de dados em um ledger. Uma sessão ativa é aquela que está executando ativamente uma transação. Também pode ser uma sessão que concluiu recentemente uma transação em que o serviço prevê que iniciará outra transação imediatamente. QLDBsuporta uma transação em execução ativa por sessão.

O limite de sessões ativas simultâneas por ledger é definido em Cotas e limites na Amazon QLDB. Depois que esse limite for atingido, qualquer sessão que tente iniciar uma transação resultará em um erro (LimitExceededException).

Para obter as melhores práticas para configurar um pool de sessões em seu aplicativo usando o QLDB driver, consulte as recomendações Configurando o objeto QldbDriver de QLDB drivers da Amazon.

Ciclo de vida da sessão

A sequência de API operações de QLDBsessão a seguir representa o ciclo de vida típico de uma QLDB sessão:

  1. StartSession

  2. StartTransaction

  3. ExecuteStatement

  4. CommitTransaction

  5. Repita as etapas 2 a 4 para iniciar mais transações (uma transação por vez).

  6. EndSession

Expiração da sessão

QLDBexpira e descarta uma sessão após uma vida útil total de 13 a 17 minutos, independentemente de estar executando ativamente uma transação. As sessões podem ser perdidas ou prejudicadas por vários motivos, como falha de hardware, falha de rede ou reinicialização de aplicativos. QLDBimpõe uma vida útil máxima nas sessões para garantir que o aplicativo cliente seja resiliente a falhas de sessão.

Tratamento da sessão no QLDB driver

Embora você possa usar um AWS SDK para interagir diretamente com a QLDBsessãoAPI, isso aumenta a complexidade e exige que você calcule um resumo de confirmação. QLDBusa esse resumo de confirmação para garantir a integridade da transação. Em vez de interagir diretamente com issoAPI, recomendamos usar o QLDB driver.

O driver fornece uma camada de abstração de alto nível acima dos dados transacionais. API Ele simplifica o processo de execução de instruções partiQL em dados contábeis por meio do gerenciamento de chamadas. SendCommandAPI Essas API chamadas exigem vários parâmetros que o driver manipula para você, incluindo o gerenciamento de sessões, transações e política de repetição em caso de erros.

Visão geral do agrupamento de sessões

Nas versões mais antigas do QLDB driver (por exemplo, Java v1.1.0), fornecemos duas implementações do objeto driver: uma padrão, não QldbDriver agrupada e uma. PooledQldbDriver Como o nome sugere, o PooledQldbDriver mantém um pool de sessões que são reutilizadas em todas as transações.

Com base no feedback do usuário, os desenvolvedores preferem usar o atributo de agrupamento e seus benefícios por padrão, em vez de usar o driver padrão. Então, removemos PooledQldbDriver e movemos a funcionalidade de agrupamento de sessões para QldbDriver. Essa alteração está incluída na versão mais recente de cada driver (por exemplo, Java v2.0.0).

O driver fornece três níveis de abstrações:

  • Driver (implementação de driver agrupado): a abstração de nível superior. O driver mantém e gerencia um conjunto de sessões. Quando você solicita que o driver execute uma transação, ele escolhe uma sessão do pool e a usa para executar a transação. Se a transação falhar devido a um erro de sessão (InvalidSessionException), o driver usa outra sessão para repetir a transação. Essencialmente, o driver oferece uma experiência de sessão totalmente gerenciada.

  • Sessão: um nível abaixo da abstração do driver. Uma sessão está contida em um pool e o driver gerencia o ciclo de vida da sessão. Se uma transação falhar, o driver a repetirá até um número especificado de tentativas usando a mesma sessão. Mas se a sessão encontrar um erro (InvalidSessionException), QLDB descarte-o internamente. O driver é então responsável por obter outra sessão do pool para repetir a transação.

  • Transação: o nível mais baixo de abstração. Uma sessão está contida em uma sessão e a sessão gerencia o ciclo de vida da transação. A sessão é responsável por repetir a transação em caso de erro. A sessão também garante que não vaze uma transação aberta que não tenha sido confirmada ou cancelada.

Na versão mais recente de cada driver, você pode realizar operações somente no nível de abstração do driver. Você não tem controle direto sobre sessões e transações individuais (ou seja, não há API operações para iniciar manualmente uma nova sessão ou transação).

Pool de sessões e lógica de transação

A versão mais recente de cada driver não fornece mais uma implementação não agrupada do objeto driver. Por padrão, o objeto QldbDriver gerencia o pool de sessões. Quando você faz uma chamada para executar uma transação, o driver executa as seguintes etapas:

  1. O driver verifica se atingiu o limite do pool de sessões. Nesse caso, o driver imediatamente lança uma exceção NoSessionAvailable. Caso contrário, segue para a próxima etapa.

  2. O driver verifica se o pool tem uma sessão disponível.

    • Se uma sessão estiver disponível no pool, o driver a usará para executar uma transação.

    • Se nenhuma sessão estiver disponível no pool, o driver criará uma nova sessão para executar uma transação.

  3. Depois que o driver obtém uma sessão na etapa 2, ele chama a operação execute na instância da sessão.

  4. Na operação execute da sessão, o driver tenta iniciar uma transação chamando startTransaction.

    • Se a sessão não for válida, a startTransaction chamada falhará e o driver retornará à etapa 1.

    • Se a startTransaction chamada for bem-sucedida, o driver prossegue para a próxima etapa.

  5. O driver executa sua expressão lambda. Essa expressão lambda pode conter uma ou mais chamadas para executar instruções partiQL. Depois que a expressão lambda termina de ser executada sem erros, o driver continua confirmando a transação.

  6. A confirmação da transação pode ter um dos dois resultados:

    • A confirmação é bem-sucedida e o driver retorna o controle ao código do seu aplicativo.

    • A confirmação falha devido a um conflito otimista de controle de concorrência (OCC). Nesse caso, o driver repete as etapas 4 a 6 usando a mesma sessão. O número máximo de tentativas de repetição é configurável no código do aplicativo. O limite padrão é 4.

nota

Se um InvalidSessionException for lançado durante as etapas de 4 a 6, o driver marcará a sessão como encerrada e retornará à etapa 1 para repetir a transação.

Se alguma outra exceção for lançada durante as etapas de 4 a 6, o driver verificará se a exceção pode ser repetida. Nesse caso, ele repete a transação até o número especificado de tentativas de repetição. Caso contrário, ele propaga (emite bolhas e lança) a exceção no código do seu aplicativo.

Retornar as sessões ao pool

Se um InvalidSessionException ocorrer a qualquer momento durante o curso de uma transação ativa, o driver não retornará a sessão ao pool. QLDBEm vez disso, descarta a sessão e o driver recebe outra sessão do pool. Em todos os outros casos, o driver retorna a sessão para o pool.