Descripción de la gestión de sesiones con el conductor en Amazon QLDB - Base de datos Amazon Quantum Ledger (AmazonQLDB)

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 conductor en Amazon QLDB

importante

Aviso de fin del soporte: los clientes actuales podrán utilizar Amazon QLDB hasta que finalice el soporte, el 31 de julio de 2025. Para obtener más información, consulte Migración de un Amazon QLDB Ledger a Amazon Aurora SQL Postgre.

Si tiene experiencia en el uso de un sistema de administración de bases de datos relacionales (RDBMS), es posible que esté familiarizado con las conexiones simultáneas. QLDBno tiene el mismo concepto de RDBMS conexión tradicional porque las transacciones se ejecutan con mensajes de HTTP solicitud y respuesta.

EnQLDB, el concepto análogo es una 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. QLDBadmite 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 en 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 mejores prácticas para configurar un grupo de sesiones en su aplicación mediante el QLDB controlador, consulte Configurar el QldbDriver objeto las recomendaciones de QLDB controladores de Amazon.

Ciclo de vida de la sesión

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

  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

QLDBcaduca 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 dañar por distintos motivos, como fallos de hardware, fallos de red o reinicio de las aplicaciones. QLDBimpone una vida útil máxima a las sesiones para garantizar que la aplicación cliente sea resistente a los errores de sesión.

Gestión de sesiones en el controlador QLDB

Si bien puedes usar una AWS SDK para interactuar directamente con la QLDBsesiónAPI, esto añade complejidad y requiere que calcules un resumen de confirmaciones. QLDButiliza este resumen de confirmaciones para garantizar la integridad de las transacciones. En lugar de interactuar directamente con estoAPI, recomendamos usar el QLDB controlador.

El controlador proporciona una capa de abstracción de alto nivel por encima de los datos transaccionales. API Simplifica el proceso de ejecución de declaraciones PartiQL en los datos del libro mayor mediante la gestión de las llamadas. SendCommandAPI Estas API llamadas requieren varios parámetros que el controlador gestiona por usted, como la gestión de las sesiones, las transacciones y la política de reintentos en caso de errores.

Información general de la agrupación de sesiones

En las versiones anteriores del QLDB controlador (por ejemplo, Java v1.1.0), proporcionábamos dos implementaciones del objeto controlador: una estándar, no agrupada y una. QldbDriver 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 característica 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 versión más reciente 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. Sin embargo, si la sesión detecta un error (InvalidSessionException), lo descarta internamente. QLDB 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. No tiene control directo sobre las sesiones y transacciones individuales (es decir, no hay API operaciones para iniciar manualmente una nueva sesión o transacción).

Agrupación de sesiones y lógica de transacciones

La versión más reciente 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 optimista de control de simultaneidad (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 (hace crecer y genera) 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. QLDBEn su lugar, descarta la sesión y el conductor obtiene otra sesión del grupo. En el resto de casos, el controlador devuelve la sesión al grupo.