Descripción de la gestión de sesiones con el controlador en Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Descripción de la gestión de sesiones con el controlador en Amazon QLDB

Si tiene experiencia en el uso de un sistema de administración de base de datos relacional (RDBMS), puede que esté familiarizado con las conexiones simultáneas. QLDB no tiene el mismo concepto de conexión RDBMS tradicional, ya que las transacciones se ejecutan con mensajes de solicitud y respuesta HTTP.

El concepto análogo en QLDB es el de sesión activa. Conceptualmente, una sesión es similar al inicio de sesión de un usuario: gestiona la información sobre sus solicitudes de transacción de datos a un libro mayor. Una sesión activa es aquella en la que se ejecuta una transacción de forma activa. También puede tratarse de una sesión en la que se ha finalizado recientemente una transacción, y el servicio prevé iniciar otra transacción de forma inmediata. QLDB admite una transacción en ejecución activa por sesión.

El límite de sesiones activas simultáneas por libro mayor se define en Cuotas y límites de Amazon QLDB. Una vez alcanzado este límite, cualquier sesión que intente iniciar una transacción dará como resultado un error (LimitExceededException).

Para conocer las prácticas recomendadas para configurar un grupo de sesiones en su aplicación mediante el controlador QLDB, consulte Configuración del objeto QLDBDriver en las Recomendaciones de controlador Amazon QLDB.

Ciclo de vida de la sesión

La siguiente secuencia de operaciones de la API de sesión de QLDB representa el ciclo de vida típico de una sesión de QLDB:

  1. StartSession

  2. StartTransaction

  3. ExecuteStatement

  4. CommitTransaction

  5. Repita los pasos 2 a 4 para iniciar más transacciones (una transacción a la vez).

  6. EndSession

Vencimiento de la sesión

QLDB finaliza y descarta una sesión tras una duración total de 13 a 17 minutos, independientemente de si se está ejecutando una transacción de forma activa. Las sesiones se pueden perder o invalidar por distintos motivos, como fallos de hardware, fallos de red o reinicio de las aplicaciones. QLDB impone una duración máxima a las sesiones para garantizar que la aplicación cliente sea resiliente a fallos de sesión.

Gestión de sesiones en el controlador QLDB

Si bien puede usar un SDK de AWS para interactuar directamente con la API de sesión de QLDB, este paso añade complejidad y requiere el cálculo de un resumen de confirmación. QLDB emplea este resumen de confirmación para garantizar la integridad de la transacción. En lugar de interactuar directamente con esta API, recomendamos usar el controlador QLDB.

El controlador proporciona una capa de abstracción de alto nivel sobre la API de datos transaccionales. Simplifica el proceso de ejecución de instrucciones PartiQL en los datos del libro mayor gestionando las llamadas a la API SendCommand. Estas llamadas a la API necesitan de varios parámetros que el controlador gestiona automáticamente, administrando las sesiones, transacciones y política de reintentos en caso de errores.

Información general de la agrupación de sesiones

En versiones anteriores del controlador QLDB (como Java v1.1.0), proporcionábamos dos implementaciones del objeto controlador: un QldbDriver estándar no agrupado y un PooledQldbDriver. Como su nombre indica, PooledQldbDriver mantiene un conjunto de sesiones que se reutilizan en las transacciones.

A tenor de los comentarios de los usuarios, los desarrolladores prefieren usar la función de agrupación y sus ventajas de forma predeterminada en lugar de usar el controlador estándar. Por tanto, eliminamos PooledQldbDriver y trasladamos la funcionalidad de agrupación de sesiones a QldbDriver. Este cambio se incluye en la última versión de cada controlador (por ejemplo, Java v2.0.0).

El controlador proporciona tres niveles de abstracciones:

  • Controlador (implementación de controlador agrupado): abstracción de nivel superior. El controlador mantiene y gestiona un conjunto de sesiones. Cuando solicita la ejecución de una transacción al controlador, este elige una sesión del grupo y la usa para ejecutar la transacción. Si la transacción falla debido a un error de sesión (InvalidSessionException), el controlador elige otra sesión para reintentar la transacción. Básicamente, el controlador ofrece una experiencia de sesión totalmente gestionada.

  • Sesión: un nivel por debajo de la abstracción del controlador. La sesión está incluida en un grupo, y el controlador gestiona el ciclo de vida de la sesión. Si se produce un error en una transacción, el controlador lleva a cabo un número específico de reintentos en la misma sesión. Si la sesión devuelve un error (InvalidSessionException), QLDB la descarta internamente. A continuación, el controlador asigna otra sesión del grupo para reintentar la transacción.

  • Transacción: el nivel más bajo de abstracción. Una transacción está contenida en una sesión, y la sesión gestiona el ciclo de vida de la transacción. La sesión reintenta la transacción en caso de error. La sesión también garantiza que no se filtre una transacción abierta que no se haya confirmado o cancelado.

En la versión más reciente de cada controlador, solo es posible realizar operaciones en el nivel de abstracción de controlador. El usuario no tiene control directo sobre las sesiones y transacciones individuales (es decir, no hay operaciones de API que permitan iniciar manualmente una nueva sesión o transacción).

Agrupación de sesiones y lógica de transacciones

La última versión de cada controlador ya no proporciona una implementación no agrupada del objeto de controlador. De forma predeterminada, el objeto QldbDriver administra el grupo de sesiones. Al realizar una llamada para ejecutar una transacción, el controlador sigue estos pasos:

  1. El controlador comprueba si se ha alcanzado el límite de sesiones acumuladas. Si es así, el controlador lanza de inmediato una excepción NoSessionAvailable. De lo contrario, continúa con el próximo paso.

  2. El controlador comprueba si el grupo tiene una sesión disponible.

    • Si hay una sesión disponible en el grupo, el controlador la usa para ejecutar una transacción.

    • Si no hay una sesión disponible en el grupo, el controlador crea una nueva sesión y la usa para ejecutar una transacción.

  3. Cuando el controlador asigna una sesión en el paso 2, realiza una llamada a la operación execute en la instancia de sesión.

  4. En la operación execute de la sesión, el controlador intenta iniciar una transacción mediante una llamada startTransaction.

    • Si la sesión no es válida, la llamada startTransaction falla y el controlador regresa al paso 1.

    • Si la llamada startTransaction se realiza correctamente, el controlador continúa con el siguiente paso.

  5. El controlador ejecuta la expresión lambda. Esta expresión lambda puede contener una o más llamadas para ejecutar instrucciones PartiQL. Cuando la expresión lambda finaliza su ejecución sin errores, el controlador procede a confirmar la transacción.

  6. La confirmación de la transacción puede devolver uno de estos dos resultados:

    • La confirmación se realiza correctamente y el controlador devuelve el control al código de la aplicación.

    • La confirmación falla debido a un conflicto de control de concurrencia optimista (OCC). En este caso, el controlador reintenta los pasos 4 a 6 usando la misma sesión. Puede configurar el número máximo de reintentos en el código de su aplicación. El límite predeterminado es 4.

nota

Si se devuelve InvalidSessionException durante los pasos 4 a 6, el controlador marca la sesión como cerrada y vuelve al paso 1 para reintentar la transacción.

Si se produce alguna otra excepción durante los pasos 4 a 6, el controlador comprueba si se puede reintentar la excepción. Si es así, reintenta la transacción hasta el número especificado de reintentos. De lo contrario, propaga la excepción al código de la aplicación.

Devolución de las sesiones al grupo

Si la transacción activa devuelve InvalidSessionException en cualquier momento, el controlador no devuelve la sesión al grupo. En su lugar, QLDB descarta la sesión y el controlador asigna otra sesión del grupo. En el resto de casos, el controlador devuelve la sesión al grupo.