En Skyeng, utilizamos Amazon Redshift, incluida la escala paralela, por lo que el artículo de Stefan Gromall, fundador de dotgo.com, para intermix.io, nos pareció interesante. Después de la transferencia, un poco de nuestra experiencia del ingeniero según Daniyar Belkhodzhaev.La arquitectura de Amazon Redshift permite escalar agregando nuevos nodos al clúster. Tener que hacer frente al número máximo de solicitudes puede conducir a un aprovisionamiento excesivo de nodos. El escalado de concurrencia, en contraste con la adición de nuevos nodos, aumenta la potencia informática según sea necesario.
El escalado paralelo de Amazon Redshift le da a los clústeres de Redshift potencia adicional para manejar solicitudes pico. Funciona mediante la transferencia de solicitudes a nuevos clústeres "paralelos" en segundo plano. Las solicitudes se enrutan según la configuración y las reglas de WLM.
El precio de la escala paralela se basa en un modelo de crédito de uso libre. Por encima de la norma de préstamos gratuitos, el pago se basa en el momento en que el clúster de escala paralela procesa las solicitudes.
El autor probó la escala paralela en uno de los grupos internos. En esta publicación, hablará sobre los resultados de la prueba y dará consejos sobre cómo comenzar.
Requisitos del clúster
Para usar la escala paralela, un clúster de Amazon Redshift debe cumplir los siguientes requisitos:
- plataforma: EC2-VPC;
- tipo de nodo: dc2.8xlarge, ds2.8xlarge, dc2.large o ds2.xlarge;
- Número de nodos: de 2 a 32 (no se admiten clústeres con un nodo).
Tipos de solicitud válidos
La escala paralela no es adecuada para todos los tipos de consultas. En la primera versión, solo procesa solicitudes de lectura que satisfacen tres condiciones:
- Consultas SELECT de solo lectura (aunque se planean más tipos);
- la consulta no hace referencia a una tabla con la intercalación INTERLEAVED;
- la consulta no usa Amazon Redshift Spectrum para hacer referencia a tablas externas.
Para enrutar a un clúster de escalado paralelo, la solicitud debe estar en cola. Además, las consultas que son adecuadas para la cola
SQA (Aceleración de consultas cortas) no se ejecutarán en clústeres de escala paralela.
Las colas y los SQA requieren la configuración correcta de
Redshift Workload Management (WLM) . Le recomendamos que optimice su WLM primero, esto reducirá la necesidad de escalado paralelo. Y esto es importante porque la escala paralela es gratuita solo durante un cierto número de horas. AWS afirma que la escala paralela será gratuita para el 97% de los clientes, lo que nos lleva a la cuestión de los precios.
Costo de escalamiento paralelo
Para el escalado paralelo, AWS ofrece un modelo de crédito. Cada clúster activo de
Amazon Redshift acumula préstamos por hora, hasta una hora de préstamos de escala paralela gratuitos por día.
Solo paga cuando usa grupos de escala paralelos que exceden la cantidad de préstamos que recibió.
El costo se calcula a la tasa de demanda por segundo para un clúster paralelo que se utiliza en exceso de la tasa libre. El pago se realiza solo durante la ejecución de sus solicitudes, con un pago mínimo de un minuto, cada vez que activa un clúster de escala paralela. La tarifa por demanda por segundo se calcula en función de los principios generales de fijación de precios de
Amazon Redshift , es decir, depende del tipo de nodo y la cantidad de nodos en su clúster.
Ejecución de escalado paralelo
La escala paralela comienza para cada cola WLM. Vaya a la consola de AWS Redshift y seleccione "Workload Management" en el menú de navegación izquierdo. Seleccione el grupo WLM de su clúster en el siguiente menú desplegable.
Verá una nueva columna llamada "Modo de escalado de concurrencia" al lado de cada cola. El valor predeterminado es "Desactivado". Haga clic en "Cambiar", y puede cambiar la configuración de cada cola.

Configuracion
La escala paralela funciona al reenviar consultas relevantes a nuevos clústeres dedicados. Los nuevos grupos tienen el mismo tamaño (tipo y número de nodos) que el grupo principal.
El número predeterminado de clústeres utilizados para el escalado paralelo es uno (1) con la capacidad de configurar un total de hasta diez (10) clústeres.
El número total de clústeres para la escala paralela se puede establecer mediante el parámetro max_concurrency_scaling_clusters. El aumento de esta configuración proporciona clústeres redundantes adicionales.

Monitoreo
La consola de AWS Redshift tiene varios gráficos adicionales. El gráfico Clusters de escala de concurrencia configurada máxima muestra el valor de max_concurrency_scaling_clusters a lo largo del tiempo.

El número de grupos de escalado activos se muestra en la sección "Actividad de escalado de simultaneidad" en la interfaz de usuario:

En la pestaña "Solicitudes", hay una columna que muestra si la solicitud se ejecutó en el clúster principal o en el clúster de escala paralela:

Independientemente de si una solicitud en particular se ejecutó en el clúster principal o mediante un clúster de escala paralela, se almacena en stl_query.concurrency_scaling_status.

Un valor de 1 indica que la solicitud se estaba ejecutando en un clúster de escalado paralelo, mientras que otros valores indican que se estaba ejecutando en el clúster principal.
Un ejemplo:

La información sobre la escala paralela también se almacena en algunas otras tablas y vistas, por ejemplo, SVCS_CONCURRENCY_SCALING_USAGE. Además, hay varias tablas de catálogo que almacenan información sobre el escalado paralelo.
Resultados
Los autores lanzaron la escala paralela para una cola en el clúster interno aproximadamente a las 6:30 p.m. GMT del 29/03/2019. Cambiamos el parámetro max_concurrency_scaling_clusters a 3 aproximadamente a las 8:30 p.m.el 29 de marzo de 2019.
Para simular la cola de solicitud, y redujo el número de ranuras para esta cola de 15 a 5.
El siguiente es un diagrama de tablero de intermix.io que muestra la cantidad de solicitudes que se están ejecutando y en cola después de disminuir la cantidad de ranuras.

Vemos que el tiempo de espera para las solicitudes en la cola ha aumentado, mientras que el tiempo máximo es de más de 5 minutos.

Aquí está la información relevante de la consola de AWS sobre lo que sucedió durante este tiempo:

Redshift lanzó tres (3) clústeres de escala paralela según lo configurado. Parece que estos clústeres no se utilizaron por completo, a pesar de que muchas de las solicitudes en nuestro clúster estaban en cola.
El gráfico de uso se correlaciona con el gráfico de actividad de escala:

Después de unas horas, los autores verificaron la cola y parece que se ejecutaron 6 solicitudes con escala paralela. También verificamos selectivamente dos solicitudes a través de la interfaz de usuario. No verificaron cómo usar estos valores cuando varios grupos paralelos están activos a la vez.

Conclusiones
El escalado paralelo puede reducir el tiempo de espera de las solicitudes durante las cargas máximas.
Según los resultados de la prueba básica, resultó que la situación con las solicitudes de carga ha mejorado parcialmente. Sin embargo, la escala paralela por sí sola no resolvió todos los problemas de concurrencia.
Esto se debe a restricciones en los tipos de consultas que pueden usar la escala paralela. Por ejemplo, los autores tienen muchas tablas con claves de clasificación intercaladas, y la mayor parte de nuestra carga de trabajo es un registro.
Aunque el escalado paralelo no es una solución universal en la configuración de WLM, en cualquier caso, el uso de esta función es simple y comprensible.
Por lo tanto, el autor recomienda usarlo para sus colas WLM. Comience con un solo clúster paralelo y monitoree la carga máxima a través de la consola para determinar si los nuevos clústeres se utilizan por completo.
A medida que AWS agrega soporte para tipos adicionales de consultas y tablas, la escala paralela debería ser gradualmente más y más eficiente.
Comentario de Belkhodzhaev Daniyar, ingeniero según Skyeng
Nosotros en Skyeng también llamamos la atención de inmediato sobre la posibilidad emergente de escalado paralelo.
La funcionalidad es muy atractiva, especialmente teniendo en cuenta el hecho de que, según AWS, la mayoría de los usuarios ni siquiera tienen que pagar más por esto.
Dio la casualidad de que a mediados de abril tuvimos una inusual oleada de solicitudes al grupo Redshift. Durante este período, a menudo recurrimos a la ayuda de Concurrency Scaling, a veces el clúster adicional funcionaba las 24 horas del día sin parar.
Esto permitió, si no resolvía por completo el problema de las colas, al menos hacer que la situación fuera aceptable.
Nuestras observaciones coinciden en gran medida con la impresión de los chicos de intermix.io.
También notamos que a pesar de la presencia de solicitudes pendientes en la cola, no todas las solicitudes se redirigieron inmediatamente a un clúster paralelo. Aparentemente, esto se debe al hecho de que el clúster paralelo todavía tarda en iniciarse. Como resultado, durante las cargas pico a corto plazo, todavía tenemos pequeñas colas y las alarmas correspondientes tienen tiempo de funcionar.
Después de deshacernos de las cargas anormales en abril, nosotros, como AWS esperaba, pasamos al modo de uso episódico, como parte de la norma gratuita.
Puede realizar un seguimiento de los costos de escalado simultáneos en AWS Cost Explorer. Debe seleccionar Servicio - Redshift, Tipo de uso - CS, por ejemplo, USW2-CS: dc2.large.
Los detalles de los precios en ruso se pueden encontrar aquí.