Optimice las conexiones de los controladores del cliente para el entorno sin servidor - Amazon Keyspaces (para Apache Cassandra)

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.

Optimice las conexiones de los controladores del cliente para el entorno sin servidor

Para comunicar con Amazon Keyspaces, puede utilizar cualquiera de los controladores de cliente de Apache Cassandra existentes de su elección. Dado que Amazon Keyspaces es un servicio sin servidor, le recomendamos que optimice la configuración de conexión de su controlador de cliente para las necesidades de rendimiento de su aplicación. En este tema se presentan prácticas recomendadas, incluso de cómo calcular cuántas conexiones necesita su aplicación, así como la monitorización y gestión de errores de las conexiones.

Funcionamiento de las conexiones en Amazon Keyspaces

En esta sección se ofrece información general del funcionamiento de las conexiones del controlador de cliente en Amazon Keyspaces. Dado que una configuración incorrecta del controlador de cliente de Cassandra podría causar eventos PerConnectionRequestExceeded en Amazon Keyspaces, es necesario configurar la cantidad correcta de conexiones en la configuración del controlador de cliente para evitar estos errores de conexión y otros similares.

Al conectarse a Amazon Keyspaces, el controlador requiere un punto de conexión inicial para establecer una conexión inicial. Amazon Keyspaces se utiliza DNS para enrutar la conexión inicial a uno de los muchos puntos de enlace disponibles. Los puntos de conexión están vinculados a equilibradores de carga de red que, a su vez, establecen una conexión con uno de los controladores de solicitudes de la flota. Una vez establecida la conexión inicial, el controlador de cliente recopila información sobre todos los puntos de conexión disponibles en la tabla system.peers. Con esta información, el controlador de cliente puede crear conexiones adicionales a los puntos de conexión de la lista. El número de conexiones que puede crear el controlador de cliente está limitado por el número de conexiones locales especificado en la configuración del controlador cliente. De forma predeterminada, la mayoría de los controladores de cliente establecen una conexión por punto de conexión y crean un grupo de conexiones a Cassandra y equilibran la carga de consultas sobre ese grupo de conexiones. Si bien se pueden establecer múltiples conexiones al mismo punto de conexión, detrás del equilibrador de carga de red podrían conectarse a muchos controladores de solicitudes diferentes. Al conectarse a través del punto de conexión público, el establecimiento de una conexión a cada uno de los nueve puntos de conexión enumerados en la tabla system.peers da como resultado nueve conexiones a diferentes controladores de solicitudes.

Un diagrama que muestra cómo una conexión establecida por un controlador llega primero al punto final del servicio Amazon Keyspaces, luego continúa hasta un balanceador de carga y, tras la autenticación y la autorización, la CQL solicitud llega a la capa de almacenamiento.

Configuración de conexiones en Amazon Keyspaces

Amazon Keyspaces admite hasta 3000 CQL consultas por TCP conexión por segundo. Como no hay límite en el número de conexiones que un conductor puede establecer, le recomendamos que se dirija únicamente a 500 CQL solicitudes por segundo por conexión para evitar sobrecargas, ráfagas de tráfico y mejorar el equilibrio de carga. Siga estos pasos para asegurarse de que la conexión de su controlador esté correctamente configurada para las necesidades de su aplicación.

Aumente el número de conexiones por dirección IP que su controlador mantiene en su grupo de conexiones.

  • La mayoría de los controladores de Cassandra establecen un grupo de conexiones a Cassandra y equilibran la carga de consultas sobre ese grupo de conexiones. El comportamiento predeterminado de la mayoría de los controladores es establecer una única conexión con cada punto de conexión. Amazon Keyspaces expone nueve direcciones IP homólogas a los controladores, por lo que, en función del comportamiento predeterminado de la mayoría de los controladores, esto se traduce en 9 conexiones. Amazon Keyspaces admite hasta 3000 CQL consultas por TCP conexión por segundo, por lo que el rendimiento máximo de consultas de un controlador que utilice la configuración predeterminada es de 27 000 CQL CQL consultas por segundo. Si utiliza la configuración predeterminada del controlador, es posible que una sola conexión tenga que procesar más consultas que el rendimiento máximo de 3000 CQL CQL consultas por segundo. Esto podría dar lugar a eventos PerConnectionRequestExceeded.

  • Para evitar los eventos PerConnectionRequestExceeded, debe configurar el controlador para crear conexiones adicionales por punto de conexión para distribuir el rendimiento.

  • Como práctica recomendada en Amazon Keyspaces, suponga que cada conexión puede admitir 500 CQL consultas por segundo.

  • Esto significa que, para una aplicación de producción que necesita admitir aproximadamente 27 000 CQL consultas por segundo distribuidas en los nueve puntos de enlace disponibles, debe configurar seis conexiones por punto de enlace. Esto garantiza que cada conexión no procese más de 500 solicitudes por segundo.

Calcule el número de conexiones por dirección IP que necesita configurar para su controlador en función de las necesidades de su aplicación.

Para determinar el número de conexiones que necesita configurar por punto de conexión para su aplicación, considere el siguiente ejemplo. Tiene una aplicación que debe admitir 20 000 CQL consultas por segundo, que consisten en 10 000 INSERTSELECT, 5000 y 5000 DELETE operaciones. La aplicación Java se ejecuta en tres instancias en Amazon Elastic Container Service (AmazonECS), donde cada instancia establece una sesión única en Amazon Keyspaces. El cálculo que puede utilizar para estimar cuántas conexiones necesita configurar para su controlador utiliza la siguiente entrada.

  1. El número de solicitudes por segundo que debe admitir su aplicación.

  2. El número de instancias disponibles, menos una a fin de tener en cuenta mantenimiento o fallos.

  3. El número de puntos de conexión disponibles. Si se conecta a través de puntos de conexión públicos, cuenta con nueve puntos de conexión disponibles. Si utiliza VPC puntos de enlace, tiene entre dos y cinco puntos de enlace disponibles, según la región.

  4. Utilice 500 CQL consultas por segundo por conexión como práctica recomendada para Amazon Keyspaces.

  5. Redondee el resultado.

En este ejemplo, la fórmula tiene este aspecto.

20,000 CQL queries / (3 instances - 1 failure) / 9 public endpoints / 500 CQL queries per second = ROUND(2.22) = 3

En función de este cálculo, debe especificar tres conexiones locales por punto de conexión en la configuración del controlador. Para las conexiones remotas, configure solo una conexión por punto de conexión.

Cómo configurar las conexiones a través de VPC puntos de enlace en Amazon Keyspaces

Al conectarse a través de VPC puntos de conexión privados, lo más probable es que tenga 3 puntos de conexión disponibles. El número de VPC puntos de conexión puede variar según la región, en función del número de zonas de disponibilidad y del número de subredes asignadas. VPC La región Este de EE. UU. (Norte de Virginia) tiene cinco zonas de disponibilidad y puede tener hasta cinco puntos de conexión de Amazon Keyspaces. La región Oeste de EE. UU. (Norte de California) tiene dos zonas de disponibilidad y puede tener hasta dos puntos de conexión de Amazon Keyspaces. El número de puntos de conexión no afecta a la escala, pero sí aumenta el número de conexiones que necesita establecer en la configuración del controlador. Considere el siguiente ejemplo. La aplicación debe admitir 20 000 CQL consultas y se ejecuta en tres instancias en Amazon, cada una de las ECS cuales establece una sesión única en Amazon Keyspaces. La única diferencia es el número de puntos de enlace disponibles en las distintas. Regiones de AWS

Conexiones necesarias en la región Este de EE. UU. (Norte de Virginia):

20,000 CQL queries / (3 instances - 1 failure) / 5 private VPC endpoints / 500 CQL queries per second = 4 local connections

Conexiones necesarias en la región Oeste de EE. UU. (Norte de California):

20,000 CQL queries / (3 instances - 1 failure) / 2 private VPC endpoints / 500 CQL queries per second = 10 local connections
importante

Cuando se utilizan VPC puntos de enlace privados, se requieren permisos adicionales para que Amazon Keyspaces descubra los puntos de enlace VPC disponibles de forma dinámica y rellene la tabla. system.peers Para obtener más información, consulte Relleno de entradas de la tabla system.peers con información del punto de conexión de VPC de interfaz.

Al acceder a Amazon Keyspaces a través de un VPC punto de enlace privado utilizando otro Cuenta de AWS, es probable que solo vea un punto de enlace de Amazon Keyspaces. Una vez más, esto no repercute en la escala del posible rendimiento de Amazon Keyspaces, pero es posible que tenga que aumentar el número de conexiones en la configuración de su controlador. En este ejemplo se muestra el mismo cálculo para un único punto de conexión disponible.

20,000 CQL queries / (3 instances - 1 failure) / 1 private VPC endpoints / 500 CQL queries per second = 20 local connections

Para obtener más información sobre el acceso multicuenta a Amazon Keyspaces mediante un acceso VPC compartido, consulte. Configurar el acceso entre cuentas mediante puntos de conexión de VPC en una VPC compartida

Monitoreo de conexiones en Amazon Keyspaces

Con el fin de identificar el número de puntos de conexión a los que está conectada su aplicación, puede registrar el número de pares descubiertos en la tabla system.peers. En el siguiente ejemplo, un ejemplo de código Java imprime el número de pares una vez establecida la conexión.

ResultSet result = session.execute(new SimpleStatement("SELECT * FROM system.peers")); logger.info("number of Amazon Keyspaces endpoints:" + result.all().stream().count());
nota

La CQL consola o AWS la consola no están implementadas en un punto final público VPC y, por lo tanto, utilizan un punto final público. Como resultado, al ejecutar la system.peers consulta desde aplicaciones ubicadas fuera de ellas, VPCE normalmente se obtienen 9 pares. También podría ser útil imprimir las direcciones IP de cada par.

También puedes observar el número de pares cuando utilizas un VPC punto de conexión configurando CloudWatch las métricas de VPCE Amazon. En CloudWatch, puede ver la cantidad de conexiones establecidas con el VPC punto final. Los controladores de Cassandra establecen una conexión para cada punto final para enviar CQL consultas y una conexión de control para recopilar información de la tabla del sistema. La siguiente imagen muestra CloudWatch las métricas de VPC los puntos de conexión después de conectarse a Amazon Keyspaces con 1 conexión configurada en la configuración del controlador. La métrica muestra seis conexiones activas consistentes en una conexión de control y cinco conexiones (1 por punto de conexión en todas las zonas de disponibilidad).

Captura de pantalla que muestra las métricas de las conexiones que pasan por un punto final en un VPC panel de Cloudwatch. Las métricas utilizadas son ActiveConnections y. BytesProcessed

Para empezar a monitorizar el número de conexiones mediante un CloudWatch gráfico, puede implementar esta AWS CloudFormation plantilla disponible GitHub en el repositorio de plantillas de Amazon Keyspaces.

Gestión de errores de conexión en Amazon Keyspaces

Cuando se supera la cuota de 3000 solicitudes por conexión, Amazon Keyspaces devuelve un evento PerConnectionRequestExceeded y el controlador de Cassandra recibe una excepción WriteTimeout o ReadTimeout. Debería reintentar esta excepción con un retroceso exponencial en su política de reintentos de Cassandra o en su aplicación. Debería proporcionar un retroceso exponencial para evitar el envío de solicitudes adicionales.

La política de reintento predeterminada intenta try next host en el plan de consultas. Dado que Amazon Keyspaces puede tener de uno a tres puntos de enlace disponibles al conectarse al VPC punto de enlace, es posible que también vea la adición de las ReadTimeout excepciones WriteTimeout y las excepciones NoHostAvailableException en los registros de su aplicación. Puede utilizar las políticas de reintento proporcionadas por Amazon Keyspaces, que reintentan en el mismo punto de conexión pero a través de conexiones diferentes.

Puede encontrar ejemplos de políticas de reintentos exponenciales para Java GitHub en el repositorio de ejemplos de código Java de Amazon Keyspaces. Puede encontrar ejemplos adicionales de lenguaje en Github en el repositorio Ejemplos de código de Amazon Keyspaces.