View a markdown version of this page

Optimisez les connexions du pilote client pour un environnement sans serveur - Amazon Keyspaces (pour Apache Cassandra)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Optimisez les connexions du pilote client pour un environnement sans serveur

Pour communiquer avec Amazon Keyspaces, vous pouvez utiliser l'un des pilotes clients Apache Cassandra existants de votre choix. Amazon Keyspaces étant un service sans serveur, nous vous recommandons d'optimiser la configuration de connexion de votre pilote client en fonction des besoins de débit de votre application. Cette rubrique présente les meilleures pratiques, notamment comment calculer le nombre de connexions requises par votre application, ainsi que la surveillance et la gestion des erreurs des connexions.

Comment fonctionnent les connexions dans Amazon Keyspaces

Cette section donne un aperçu du fonctionnement des connexions client-pilote dans Amazon Keyspaces. Étant donné qu'une mauvaise configuration du pilote client Cassandra peut entraîner PerConnectionRequestExceeded des événements dans Amazon Keyspaces, il est nécessaire de configurer le bon nombre de connexions dans la configuration du pilote client pour éviter ces erreurs de connexion et d'autres erreurs similaires.

Lors de la connexion à Amazon Keyspaces, le conducteur a besoin d'un point de terminaison initial pour établir une connexion initiale. Amazon Keyspaces utilise le DNS pour acheminer la connexion initiale vers l'un des nombreux points de terminaison disponibles. Les terminaux sont rattachés à des équilibreurs de charge réseau qui établissent à leur tour une connexion avec l'un des gestionnaires de demandes de la flotte. Une fois la connexion initiale établie, le pilote client rassemble des informations sur tous les points de terminaison disponibles dans le system.peers tableau. Grâce à ces informations, le pilote client peut créer des connexions supplémentaires vers les points de terminaison répertoriés. Le nombre de connexions que le pilote client peut créer est limité par le nombre de connexions locales spécifié dans les paramètres du pilote client. Par défaut, la plupart des pilotes clients établissent une connexion par point de terminaison et établissent un pool de connexions avec Cassandra et des requêtes d'équilibrage de charge sur ce pool de connexions. Bien que plusieurs connexions puissent être établies vers le même point de terminaison, elles peuvent être connectées à de nombreux gestionnaires de requêtes différents derrière l'équilibreur de charge réseau. Lors de la connexion via le point de terminaison public, l'établissement d'une connexion à chacun des neuf points de terminaison répertoriés dans le system.peers tableau entraîne neuf connexions à différents gestionnaires de demandes.

Schéma montrant comment une connexion établie par un pilote atteint d'abord le point de terminaison du service Amazon Keyspaces, puis continue vers un équilibreur de charge. Après authentification et autorisation, la demande CQL atteint la couche de stockage.

Comment configurer les connexions dans Amazon Keyspaces

Amazon Keyspaces prend en charge jusqu'à 3 000 requêtes CQL par connexion TCP et par seconde. Comme le nombre de connexions qu'un pilote peut établir n'est pas limité, nous vous recommandons de ne cibler que 500 requêtes CQL par seconde et par connexion afin de tenir compte des frais généraux, des rafales de trafic et d'un meilleur équilibrage de charge. Suivez ces étapes pour vous assurer que la connexion de votre chauffeur est correctement configurée pour répondre aux besoins de votre application.

Augmentez le nombre de connexions par adresse IP que votre pilote gère dans son pool de connexions.

  • La plupart des pilotes Cassandra établissent un pool de connexions avec Cassandra et répartissent la charge des requêtes sur ce pool de connexions. Le comportement par défaut de la plupart des pilotes consiste à établir une connexion unique avec chaque point de terminaison. Amazon Keyspaces expose neuf adresses IP homologues aux pilotes. Sur la base du comportement par défaut de la plupart des pilotes, cela se traduit par 9 connexions. Amazon Keyspaces prend en charge jusqu'à 3 000 requêtes CQL par connexion TCP et par seconde. Par conséquent, le débit de requêtes CQL maximal d'un pilote utilisant les paramètres par défaut est de 27 000 requêtes CQL par seconde. Si vous utilisez les paramètres par défaut du pilote, il se peut qu'une seule connexion doive traiter un débit de requêtes CQL supérieur au débit maximal de 3 000 requêtes CQL par seconde. Cela pourrait entraîner des PerConnectionRequestExceeded événements.

  • Pour éviter les PerConnectionRequestExceeded événements, vous devez configurer le pilote pour créer des connexions supplémentaires par point de terminaison afin de distribuer le débit.

  • Dans Amazon Keyspaces, il est recommandé de partir du principe que chaque connexion peut prendre en charge 500 requêtes CQL par seconde.

  • Cela signifie que pour une application de production devant prendre en charge environ 27 000 requêtes CQL par seconde réparties sur les neuf terminaux disponibles, vous devez configurer six connexions par point de terminaison. Cela garantit que chaque connexion ne traite pas plus de 500 demandes par seconde.

Calculez le nombre de connexions par adresse IP que vous devez configurer pour votre pilote en fonction des besoins de votre application.

Pour déterminer le nombre de connexions que vous devez configurer par point de terminaison pour votre application, considérez l'exemple suivant. Votre application doit prendre en charge 20 000 requêtes CQL par seconde, soit 10 000 INSERTSELECT, 5 000 et 5 000 DELETE opérations. L'application Java s'exécute sur trois instances d'Amazon Elastic Container Service (Amazon ECS), chaque instance établissant une session unique avec Amazon Keyspaces. Le calcul que vous pouvez utiliser pour estimer le nombre de connexions que vous devez configurer pour votre pilote utilise l'entrée suivante.

  1. Le nombre de requêtes par seconde que votre application doit prendre en charge.

  2. Nombre d'instances disponibles dont une seule a été soustraite pour tenir compte de la maintenance ou de la panne.

  3. Le nombre de points de terminaison disponibles. Si vous vous connectez via des terminaux publics, neuf terminaux sont disponibles. Si vous utilisez des points de terminaison VPC, vous disposez de deux à cinq points de terminaison disponibles, selon la région.

  4. Utilisez 500 requêtes CQL par seconde et par connexion comme meilleure pratique pour Amazon Keyspaces.

  5. Arrondissez le résultat.

Pour cet exemple, la formule ressemble à ceci.

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

Sur la base de ce calcul, vous devez spécifier trois connexions locales par point de terminaison dans la configuration du pilote. Pour les connexions à distance, configurez une seule connexion par terminal.

Comment configurer la politique de nouvelle tentative pour les connexions dans Amazon Keyspaces

Lorsque vous configurez la politique de nouvelle tentative pour une connexion à Amazon Keyspaces, nous vous recommandons de mettre en œuvre la politique de nouvelle tentative d'Amazon Keyspaces. AmazonKeyspacesExponentialRetryPolicy Cette politique de nouvelle tentative est mieux adaptée pour réessayer sur différentes connexions à Amazon Keyspaces que celle du pilote. DefaultRetryPolicy

Avec leAmazonKeyspacesExponentialRetryPolicy, vous pouvez configurer le nombre de nouvelles tentatives de connexion qui répond à vos besoins. Par défaut, le nombre de nouvelles tentatives pour le AmazonKeyspacesExponentialRetryPolicy est défini sur 3.

Autre avantage : la politique de nouvelle tentative d'Amazon Keyspaces renvoie l'exception initiale renvoyée par le service, qui indique pourquoi la tentative de demande a échoué. La politique de nouvelle tentative par défaut renvoie uniquement le génériqueNoHostAvailableException, ce qui peut masquer des informations sur l'échec de la demande.

Pour configurer la politique de nouvelle tentative de demande à l'aide deAmazonKeyspacesExponentialRetryPolicy, nous vous recommandons de configurer un petit nombre de nouvelles tentatives et de gérer toutes les exceptions renvoyées dans le code de votre application.

Pour des exemples de code mettant en œuvre des politiques de nouvelle tentative, consultez les politiques de relance d'Amazon Keyspaces sur Github.

Comment configurer les connexions via les points de terminaison VPC dans Amazon Keyspaces

Lorsque vous vous connectez via des points de terminaison VPC privés, vous disposez probablement de 3 points de terminaison disponibles. Le nombre de points de terminaison VPC peut être différent par région, en fonction du nombre de zones de disponibilité et du nombre de sous-réseaux dans le VPC attribué. La région USA Est (Virginie du Nord) compte cinq zones de disponibilité et vous pouvez avoir jusqu'à cinq points de terminaison Amazon Keyspaces. La région USA Ouest (Californie du Nord) possède deux zones de disponibilité et vous pouvez avoir jusqu'à deux points de terminaison Amazon Keyspaces. Le nombre de points de terminaison n'a pas d'impact sur l'échelle, mais il augmente le nombre de connexions que vous devez établir dans la configuration du pilote. Prenez l’exemple de code suivant. Votre application doit prendre en charge 20 000 requêtes CQL et s'exécute sur trois instances d'Amazon ECS, chaque instance établissant une session unique vers Amazon Keyspaces. La seule différence est le nombre de points de terminaison disponibles dans les différents Régions AWS.

Connexions requises dans la région de l'est des États-Unis (Virginie du Nord) :

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

Connexions requises dans la région ouest des États-Unis (Californie du Nord) :

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

Lorsque vous utilisez des points de terminaison VPC privés, des autorisations supplémentaires sont requises pour qu'Amazon Keyspaces découvre les points de terminaison VPC disponibles de manière dynamique et remplisse le tableau. system.peers Pour de plus amples informations, veuillez consulter Remplissage des entrées de system.peers table avec les informations de point de terminaison VPC de l'interface.

Lorsque vous accédez à Amazon Keyspaces via un point de terminaison VPC privé en utilisant un autre terminal Compte AWS, il est probable que vous ne voyiez qu'un seul point de terminaison Amazon Keyspaces. Encore une fois, cela n'a aucune incidence sur l'ampleur du débit possible vers Amazon Keyspaces, mais cela peut vous obliger à augmenter le nombre de connexions dans la configuration de votre pilote. Cet exemple montre le même calcul pour un seul point de terminaison disponible.

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

Pour en savoir plus sur l'accès multicompte à Amazon Keyspaces à l'aide d'un VPC partagé, consultez. Configurer l'accès entre comptes à Amazon Keyspaces à l'aide de points de terminaison VPC dans un VPC partagé

Comment surveiller les connexions dans Amazon Keyspaces

Pour vous aider à identifier le nombre de terminaux auxquels votre application est connectée, vous pouvez enregistrer le nombre de pairs découverts dans le system.peers tableau. L'exemple suivant est un exemple de code Java qui affiche le nombre de pairs une fois la connexion établie.

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

La console ou AWS la console CQL ne sont pas déployées dans un VPC et utilisent donc le point de terminaison public. Par conséquent, l'exécution de la system.peers requête à partir d'applications situées en dehors du VPCE aboutit souvent à 9 pairs. Il peut également être utile d'imprimer les adresses IP de chaque pair.

Vous pouvez également observer le nombre de pairs lorsque vous utilisez un point de terminaison VPC en configurant les métriques Amazon CloudWatch VPCE. Dans CloudWatch, vous pouvez voir le nombre de connexions établies au point de terminaison du VPC. Les pilotes Cassandra établissent une connexion pour chaque point de terminaison afin d'envoyer des requêtes CQL et une connexion de contrôle pour recueillir les informations de la table système. L'image ci-dessous montre les CloudWatch mesures relatives aux terminaux VPC après la connexion à Amazon Keyspaces avec une connexion configurée dans les paramètres du pilote. La métrique indique six connexions actives, dont une connexion de contrôle et cinq connexions (une par point final dans les zones de disponibilité).

Une capture d'écran qui montre les statistiques d'un tableau de bord Cloudwatch pour les connexions passant par un point de terminaison VPC. Les métriques utilisées sont ActiveConnections et BytesProcessed.

Pour commencer à surveiller le nombre de connexions à l'aide d'un CloudWatch graphique, vous pouvez déployer ce CloudFormation modèle disponible GitHub dans le référentiel de modèles Amazon Keyspaces.

Comment gérer les erreurs de connexion dans Amazon Keyspaces

En cas de dépassement du quota de 3 000 demandes par connexion, Amazon Keyspaces renvoie un PerConnectionRequestExceeded événement et le pilote Cassandra reçoit une exception WriteTimeout ouReadTimeout. Vous devez réessayer cette exception avec un délai d'attente exponentiel dans votre politique de relance Cassandra ou dans votre application. Vous devez prévoir un délai exponentiel pour éviter d'envoyer des demandes supplémentaires.

La politique de nouvelle tentative par défaut tente d'intégrer try next host le plan de requête. Étant donné qu'Amazon Keyspaces peut disposer d'un à trois points de terminaison disponibles lors de la connexion au point de terminaison VPC, vous pouvez également voir les ReadTimeout exceptions NoHostAvailableException en plus du WriteTimeout et dans les journaux de votre application. Vous pouvez utiliser les politiques de relance fournies par Amazon Keyspaces, qui permettent de réessayer sur le même point de terminaison mais sur des connexions différentes.

Vous trouverez des exemples de politiques relatives aux nouvelles tentatives exponentielles pour Java GitHub dans le référentiel d'exemples de code Java d'Amazon Keyspaces. Vous trouverez d'autres exemples de langage sur Github dans le référentiel d'exemples de code Amazon Keyspaces.