Optimisation des connexions client-pilote pour l'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.

Optimisation des connexions client-pilote pour l'environnement sans serveur

Pour communiquer avec Amazon Keyspaces, vous pouvez utiliser n'importe quel pilote client Apache Cassandra existant 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 le calcul du nombre de connexions requises par votre application, ainsi que la surveillance et le traitement 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é que la mauvaise configuration du pilote client Cassandra peut entraîner PerConnectionRequestExceeded des événements dans Amazon Keyspaces, il est nécessaire de configurer le nombre approprié de connexions dans la configuration du pilote client pour éviter ces erreurs de connexion et d'autres similaires.

Lors de la connexion à Amazon Keyspaces, le pilote a besoin d'un point de terminaison initial pour établir une connexion initiale. Amazon Keyspaces achemine la connexion initiale DNS vers l'un des nombreux points de terminaison disponibles. Les points de terminaison sont attachés à des équilibreurs de charge réseau qui établissent à leur tour une connexion avec l'un des gestionnaires de demandes du parc. Une fois la connexion initiale établie, le pilote client collecte 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 aux 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, établissent un pool de connexions avec Cassandra et équilibrent la charge des requêtes sur ce pool de connexions. Bien que plusieurs connexions puissent être établies vers le même point de terminaison, elles peuvent être connectées derrière l'équilibreur de charge réseau à de nombreux gestionnaires de demandes différents. Lorsque vous vous connectez 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 chauffeur atteint d'abord le point de terminaison du service Amazon Keyspaces, puis passe à un équilibreur de charge et, après authentification et autorisation, la CQL demande atteint la couche de stockage.

Comment configurer les connexions dans Amazon Keyspaces

Amazon Keyspaces prend en charge jusqu'à 3 000 CQL requêtes par TCP connexion et par seconde. Étant donné qu'il n'existe aucune limite quant au nombre de connexions qu'un conducteur peut établir, nous recommandons de ne cibler que 500 CQL demandes par seconde et par connexion afin de prendre en compte les surcharges, les pics de trafic et un meilleur équilibrage de charge. Suivez ces étapes pour vous assurer que la connexion de votre pilote est correctement configurée en fonction des 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 équilibrent 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 conducteurs. Ainsi, selon le comportement par défaut de la plupart des conducteurs, cela se traduit par 9 connexions. Amazon Keyspaces prend en charge jusqu'à 3 000 CQL requêtes par TCP connexion par seconde. Par conséquent, le débit de CQL requêtes maximal d'un pilote utilisant les paramètres par défaut est de 27 000 CQL requêtes 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 CQL requêtes supérieur au débit maximal de 3 000 CQL requêtes 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.

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

  • Cela signifie que pour une application de production qui doit prendre en charge environ 27 000 CQL requêtes par seconde réparties sur les neuf points de terminaison 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. Vous avez une application qui doit prendre en charge 20 000 CQL requêtes par seconde comprenant 10 000 INSERTSELECT, 5 000 et 5 000 DELETE opérations. L'application Java s'exécute sur trois instances sur Amazon Elastic Container Service (AmazonECS), où chaque instance établit 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 demandes par seconde que votre application doit prendre en charge.

  2. Le nombre d'instances disponibles, une étant 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 points de terminaison publics, vous disposez de neuf points de terminaison disponibles. Si vous utilisez des VPC points de terminaison, vous avez entre deux et cinq points de terminaison disponibles, selon la région.

  4. Utiliser 500 CQL requêtes par seconde et par connexion est une bonne pratique pour Amazon Keyspaces.

  5. Arrondissez le résultat.

Dans 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 point de terminaison.

Comment configurer la politique de nouvelles tentatives pour les connexions dans Amazon Keyspaces

Lorsque vous configurez la politique de nouvelles tentatives 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 conducteur. DefaultRetryPolicy

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

Un autre avantage est que la politique de réessai 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 nouvelles tentatives de demande à l'aide duAmazonKeyspacesExponentialRetryPolicy, nous vous recommandons de configurer un petit nombre de tentatives et de gérer les exceptions renvoyées dans le code de votre application.

Pour des exemples de code implémentant des politiques de nouvelle tentative, consultez les politiques de nouvelle tentative d'Amazon Keyspaces sur Github.

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

Lorsque vous vous connectez via des VPC points de terminaison privés, vous avez probablement 3 points de terminaison disponibles. Le nombre de VPC points de terminaison peut être différent par région, en fonction du nombre de zones de disponibilité et du nombre de sous-réseaux dans les zones attribuées. VPC 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) comporte deux zones de disponibilité et vous pouvez avoir jusqu'à deux points de terminaison Amazon Keyspaces. Le nombre de points de terminaison n'a aucun 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 CQL requêtes et s'exécute sur trois instances sur AmazonECS, chaque instance établissant une session unique avec Amazon Keyspaces. La seule différence réside dans le nombre de points de terminaison disponibles dans les différents Régions AWS.

Connexions requises dans la région USA Est (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 de l'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 VPC points de terminaison privés, des autorisations supplémentaires sont nécessaires 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 VPC terminaison privé en utilisant un autre point de terminaison Compte AWS, il est probable que vous ne voyiez qu'un seul point de terminaison Amazon Keyspaces. Encore une fois, cela n'a aucun impact 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 entre comptes à Amazon Keyspaces à l'aide d'un compte VPC partagé, consultez. Configurer l'accès entre comptes à Amazon Keyspaces à l'VPCaide de points de terminaison dans un environnement partagé VPC

Comment surveiller les connexions dans Amazon Keyspaces

Pour identifier le nombre de points de terminaison 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 CQL console ou la AWS console n'est pas déployée au sein d'un VPC et utilise 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 de celui-ci aboutit VPCE souvent à 9 pairs. Il peut également être utile d'imprimer les adresses IP de chaque homologue.

Vous pouvez également observer le nombre de pairs lorsque vous utilisez un VPC point de terminaison en configurant CloudWatch les métriques VPCE Amazon. Dans CloudWatch, vous pouvez voir le nombre de connexions établies avec le VPC point de terminaison. Les pilotes Cassandra établissent une connexion pour chaque point de terminaison afin d'envoyer CQL des requêtes et une connexion de contrôle pour recueillir les informations des tables système. L'image ci-dessous montre les CloudWatch statistiques du VPC point de terminaison 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 de terminaison dans les zones de disponibilité).

Capture d'écran qui montre les statistiques sur un tableau de bord Cloudwatch pour les connexions passant par un VPC point de terminaison. 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 AWS 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

Lorsque le quota de 3 000 demandes par connexion est dépassé, Amazon Keyspaces renvoie un PerConnectionRequestExceeded événement et le pilote Cassandra reçoit une WriteTimeout exception ou. ReadTimeout Vous devez réessayer cette exception avec un retard exponentiel dans votre politique de réessai de Cassandra ou dans votre application. Vous devez prévoir un délai de traitement exponentiel pour éviter d'envoyer des demandes supplémentaires.

La politique de nouvelles tentatives par défaut tente d'intégrer try next host le plan de requête. Comme Amazon Keyspaces peut avoir un à trois points de terminaison disponibles lors de la connexion au point de VPC terminaison, vous pouvez également voir les ReadTimeout exceptions NoHostAvailableException en plus WriteTimeout et dans les journaux de vos applications. Vous pouvez utiliser les politiques de réessai 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 de nouvelles tentatives exponentielles pour Java GitHub dans le référentiel d'exemples de code Java d'Amazon Keyspaces. Vous pouvez trouver des exemples de langage supplémentaires sur Github dans le référentiel d'exemples de code Amazon Keyspaces.