Chez Skyeng, nous utilisons Amazon Redshift, y compris la mise à l'échelle parallèle, donc l'article de Stefan Gromall, le fondateur de dotgo.com, pour intermix.io, nous a semblé intéressant. Après le transfert - un peu de notre expérience de l'ingénieur selon Daniyar Belkhodzhaev.L'architecture Amazon Redshift permet la mise à l'échelle en ajoutant de nouveaux nœuds au cluster. Devoir faire face au nombre maximal de demandes peut entraîner un surapprovisionnement des nœuds. La mise à l'échelle de la concurrence, contrairement à l'ajout de nouveaux nœuds, augmente la puissance de calcul selon les besoins.
La mise à l'échelle parallèle d'Amazon Redshift donne aux clusters Redshift une puissance supplémentaire pour gérer les demandes de pointe. Il fonctionne en transférant les requêtes vers de nouveaux clusters «parallèles» en arrière-plan. Les demandes sont acheminées en fonction de la configuration et des règles WLM.
La tarification pour une mise à l'échelle parallèle est basée sur un modèle de crédit gratuit. Au-dessus de la norme des prêts gratuits, le paiement est basé sur le moment où le cluster de mise à l'échelle parallèle traite les demandes.
L'auteur a testé la mise à l'échelle parallèle sur l'un des clusters internes. Dans cet article, il parlera des résultats du test et donnera des conseils sur la façon de commencer.
Exigences du cluster
Pour utiliser la mise à l'échelle parallèle, un cluster Amazon Redshift doit répondre aux exigences suivantes:
- plate - forme: EC2-VPC;
- type de noeud: dc2.8xlarge, ds2.8xlarge, dc2.large ou ds2.xlarge;
- nombre de nœuds: de 2 à 32 (les clusters avec un nœud ne sont pas pris en charge).
Types de demande valides
La mise à l'échelle parallèle ne convient pas à tous les types de requêtes. Dans la première version, il ne traite que les requêtes de lecture qui remplissent trois conditions:
- Requêtes SELECT en lecture seule (bien que d'autres types soient prévus);
- la requête ne fait pas référence à une table avec le classement INTERLEAVED;
- la requête n'utilise pas Amazon Redshift Spectrum pour référencer les tables externes.
Pour acheminer vers un cluster de mise à l'échelle parallèle, la demande doit être mise en file d'attente. De plus, les requêtes adaptées à la file d'attente
SQA (Short Query Acceleration) ne seront pas exécutées dans des clusters de mise à l'échelle parallèles.
Les files d'attente et les SQA nécessitent la configuration correcte de
Redshift Workload Management (WLM) . Nous vous recommandons d'optimiser d'abord votre WLM - cela réduira le besoin de mise à l'échelle parallèle. Et cela est important car la mise à l'échelle parallèle n'est gratuite que pendant un certain nombre d'heures. AWS affirme que la mise à l'échelle parallèle sera gratuite pour 97% des clients, ce qui nous amène à la question de la tarification.
Coût de mise à l'échelle parallèle
Pour la mise à l'échelle parallèle, AWS propose un modèle de crédit. Chaque cluster
Amazon Redshift actif accumule des prêts toutes les heures, jusqu'à une heure de prêts de mise à l'échelle parallèle gratuits par jour.
Vous ne payez que lorsque l'utilisation de clusters de mise à l'échelle parallèles dépasse le montant des prêts que vous avez reçus.
Le coût est calculé au taux de demande par seconde pour un cluster parallèle utilisé en plus du taux gratuit. Le paiement est effectué uniquement lors de l'exécution de vos demandes, avec un paiement minimum d'une minute, chaque fois que vous activez un cluster de mise à l'échelle parallèle. Le taux à la demande par seconde est calculé sur la base des principes généraux de la tarification
Amazon Redshift , c'est-à-dire qu'il dépend du type de nœud et du nombre de nœuds de votre cluster.
Exécution d'une mise à l'échelle parallèle
La mise à l'échelle parallèle démarre pour chaque file d'attente WLM. Accédez à la console AWS Redshift et sélectionnez «Workload Management» dans le menu de navigation de gauche. Sélectionnez le groupe WLM de votre cluster dans le menu déroulant suivant.
Vous verrez une nouvelle colonne intitulée «Mode de mise à l'échelle simultanée» à côté de chaque file d'attente. La valeur par défaut est «Off». Cliquez sur "Modifier" et vous pouvez modifier les paramètres de chaque file d'attente.

La configuration
La mise à l'échelle parallèle fonctionne en transmettant les requêtes pertinentes aux nouveaux clusters dédiés. Les nouveaux clusters ont la même taille (type et nombre de nœuds) que le cluster principal.
Le nombre par défaut de clusters utilisés pour la mise à l'échelle parallèle est de un (1) avec la possibilité de configurer un total de dix (10) clusters au total.
Le nombre total de clusters pour une mise à l'échelle parallèle peut être défini par le paramètre max_concurrency_scaling_clusters. L'augmentation de ce paramètre fournit des clusters redondants supplémentaires.

Suivi
La console AWS Redshift possède plusieurs graphiques supplémentaires. Le graphique Max Configured Concurrency Scaling Clusters affiche la valeur de max_concurrency_scaling_clusters au fil du temps.

Le nombre de clusters de mise à l'échelle actifs est affiché dans la section "Activité de mise à l'échelle des accès concurrents" de l'interface utilisateur:

Dans l'onglet «Demandes», il y a une colonne indiquant si la demande a été exécutée dans le cluster principal ou dans le cluster de mise à l'échelle parallèle:

Peu importe si une demande particulière a été exécutée dans le cluster principal ou via un cluster de mise à l'échelle parallèle, elle est stockée dans stl_query.concurrency_scaling_status.

Une valeur de 1 indique que la demande s'exécutait dans un cluster de mise à l'échelle parallèle, tandis que d'autres valeurs indiquent qu'elle s'exécutait dans le cluster principal.
Un exemple:

Les informations sur la mise à l'échelle parallèle sont également stockées dans d'autres tables et vues, par exemple, SVCS_CONCURRENCY_SCALING_USAGE. En outre, il existe un certain nombre de tables de catalogue qui stockent des informations sur la mise à l'échelle parallèle.
Résultats
Les auteurs ont lancé la mise à l'échelle parallèle pour une file d'attente dans le cluster interne vers 18 h 30 GMT le 29/03/2019. Nous avons changé le paramètre max_concurrency_scaling_clusters en 3 vers 20 h 30 le 29 mars 2019.
Pour simuler la file d'attente des demandes, et réduit le nombre d'emplacements pour cette file d'attente de 15 à 5.
Vous trouverez ci-dessous le diagramme du tableau de bord intermix.io montrant le nombre de demandes en cours d'exécution et mises en file d'attente après avoir diminué le nombre d'emplacements.

Nous voyons que le temps d'attente pour les demandes dans la file d'attente a augmenté, tandis que le temps maximum est supérieur à 5 minutes.

Voici les informations pertinentes de la console AWS sur ce qui s'est passé pendant cette période:

Redshift a lancé trois (3) clusters de mise à l'échelle parallèle tels que configurés. Il semble que ces clusters n'aient pas été pleinement utilisés, même si de nombreuses demandes de notre cluster étaient en file d'attente.
Le graphique d'utilisation est en corrélation avec le graphique d'activité de mise à l'échelle:

Après quelques heures, les auteurs ont vérifié la file d'attente, et il semble que 6 requêtes ont été exécutées avec une mise à l'échelle parallèle. Nous avons également vérifié de manière sélective deux demandes via l'interface utilisateur. Ils n'ont pas vérifié comment utiliser ces valeurs lorsque plusieurs clusters parallèles sont actifs à la fois.

Conclusions
La mise à l'échelle parallèle peut réduire le temps d'attente des demandes lors des pics de charge.
Selon les résultats du test de base, il s'est avéré que la situation des demandes de chargement s'est partiellement améliorée. Cependant, la mise à l'échelle parallèle à elle seule n'a pas résolu tous les problèmes de concurrence.
Cela est dû aux restrictions sur les types de requêtes qui peuvent utiliser la mise à l'échelle parallèle. Par exemple, les auteurs ont de nombreuses tables avec des clés de tri entrelacées, et la majeure partie de notre charge de travail est un enregistrement.
Bien que la mise à l'échelle parallèle ne soit pas une solution universelle dans la configuration WLM, dans tous les cas, l'utilisation de cette fonction est simple et compréhensible.
Par conséquent, l'auteur recommande de l'utiliser pour vos files d'attente WLM. Commencez avec un seul cluster parallèle et surveillez la charge de pointe via la console pour déterminer si les nouveaux clusters sont pleinement utilisés.
À mesure qu'AWS ajoute la prise en charge de types supplémentaires de requêtes et de tables, la mise à l'échelle parallèle devrait progressivement devenir de plus en plus efficace.
Commentaire de Belkhodzhaev Daniyar, ingénieur selon Skyeng
Chez Skyeng, nous avons également immédiatement attiré l'attention sur la possibilité émergente d'une mise à l'échelle parallèle.
La fonctionnalité est très attrayante, d'autant plus que, selon AWS, la plupart des utilisateurs n'ont même pas à payer de supplément pour cela.
Il s'est avéré qu'à la mi-avril, nous avons eu une vague inhabituelle de demandes au cluster Redshift. Au cours de cette période, nous avons souvent eu recours à l'aide de la mise à l'échelle de la concurrence, parfois le cluster supplémentaire fonctionnait 24h / 24 sans s'arrêter.
Cela a permis, si ce n'est de résoudre complètement le problème de file d'attente, au moins de rendre la situation acceptable.
Nos observations coïncident en grande partie avec l'impression des gars de intermix.io.
Nous avons également remarqué que malgré la présence de demandes en attente dans la file d'attente, toutes les demandes n'étaient pas immédiatement redirigées vers un cluster parallèle. Apparemment, cela est dû au fait que le cluster parallèle prend encore du temps pour démarrer. Par conséquent, lors de pics de charge à court terme, nous avons encore de petites files d'attente et les alarmes correspondantes ont le temps de fonctionner.
Après avoir éliminé les charges anormales en avril, nous nous attendions, comme AWS, à un mode d'utilisation épisodique - dans le cadre de la norme gratuite.
Vous pouvez suivre les coûts de mise à l'échelle simultanés dans AWS Cost Explorer. Vous devez sélectionner Service - Redshift, Type d'utilisation - CS, par exemple, USW2-CS: dc2.large.
Les détails des prix en russe peuvent être trouvés ici.