¿Qué es el servicio RedShift?
Es un contenedor de datos petabyte en la nube. Es una base de datos relacional diseñada para escenarios OLAP y optimizada para alto performance de análisis y portes de gran escala. Minimiza significativamente el costo de los sistemas de análisis de dato tradicionales pero también hace sencillo analizar grandes cantidades de datos muy rápidamente.
Permite realizar queries sobre estructuras de datos utilizando comandos SQL para soportar queries sobre largos conjuntos de datos. Mediante conectividad utilizando ODBC o JDBC, se integra bien con varias herramientas de carga, reporte, minado de datos y analítica. RedShift esta basado en el estándar de la industria PostgreSQL, así que muchas aplicaciones existentes funcionan con cambios mínimos.
RedShift maneja la carga requerida para instalar, operar y escalar un contenedor de datos, desde provisionar la capacidad de la infraestructura hasta automatizar las tareas administrativas que vayan apareciendo como respaldos y parches. RedShift automáticamente monitorea sus nodos y dispositivos para ayudarle a recuperarse de errores.
¿Qué son los clusters y nodos de RedShift?
El componente llave de RedShift es el cluster. El cluster esta compuesto de un nodo líder y otros nodos de computo. El cliente interactúa con el nodo líder, y los nodos de computo son transparentes para dicha aplicación.
RedShift actualmente tiene soporte para seis tipos de nodos y cada uno tiene diferente mezcla de CPU, memoria y almacenamiento. Los seis tipos de nodos están agrupados en dos categorías. Dense Computo (Computo Denso) y Dense Storage (Almacenamiento Denso). El nodo de computo denso soporta clusters de hasta 326 TB utilizando SSD, mientras que el nodo de almacenamiento denso soporta clusters de hasta 2 PB utilizando discos magnéticos muy grandes. Cada cluster consiste de un nodo líder y uno o mas de computo.
Cada cluster contiene una o mas bases de datos. Los datos del usuario son distribuidos a través de nodos de computo. La aplicación o cliente SQL se comunica con RedShift utilizando JDBC o ODBC mediante el nodo líder, el cual coordina la ejecución del query con los nodos de computo. La aplicación no interactúa con los nodos de computo.
El disco de almacenamiento para un nodo de computo es dividido en un numero de partes. El numero de partes depende del tamaño del nodo y usualmente va de 2 a 16. Todos los nodos participan de forma paralela en la ejecución del query, trabajando en datos que están distribuidos lo mejor posible a través de los diferentes slices.
Es posible incrementar el performance añadiendo mas nodos al cluster. Cuando se envía un query, RedShift distribuye y ejecuta los queries en paralelo a través de los nodos de computo. RedShift también distribuye los datos de la tabla a través de todos los nodos en un cluster basado en una estrategia de distribución que usted especifique. Este particionamiento de datos a traves de múltiples recursos le permite alcanzar grandes niveles de performance.
RedShift le permite redimensionar un cluster para añadir capacidad y computo conforme lo necesite. También es posible cambiar el tipo del nodo de un cluster y mantener el amaño total al mismo tiempo. Cuando realice una operación de redimensionado, RedShift creará un nuevo cluster y migrará los datos del viejo al nuevo. Durante esta operación de redimensionado, la base de datos se convertirá en solo lectura hasta que el proceso se complete.
Diseño de la tabla
Cada cluster de RedShift puede soportar una o mas bases de datos, cada base de datos contiene muchas tablas. Como los sistemas basados en SQL, se puede crear una tabla utilizando el comando CREATE TABLE. Ademas de las columnas especificadas y sus tipos, RedShift también soporta compresión, estrategias de distribución y sort keys (llaves de ordenamiento).
Tipos de Datos (Data Types)
RedShift soporta una larga lista de tipos de datos, incluyendo datos números como integer, decimal y double, datos de texto como char y varchar y fechas como date y datetimestamp. Adicionalmente columnas pueden ser añadidas a la tabla utilizando el comando alter table, sin embargo existen columnas que no pueden ser modificadas.
Compresión (Compression Encoding)
Una de las llaves para la optimización del performance utiliza por RedShift es la compresión. Cuando los datos se cargan en una tabla vacía, RedShift tomara una prueba de los datos y seleccionará el mejor esquema de compresión para cada columna. De forma alternativa, es posible especificar la codificación de compresión en cada columna como para del comando CREATE TABLE.
Estrategia de Distribución (Distribution Strategy)
Una de las decisiones primarias cuando se crea una tabla en RedShift es como distribuir los registros a través de los nodos y en partes en clusters. Se puede configurar el estilo de distribución de una tabla para dar a RedShift pistas de como los datos deben ser particionados para lograr los mejores patrones para los queries. Cuando se ejecuta un query, el optimizador pasa las filas a los nodos de computo como se necesite para realizar cualquier join o aggregate. El objetivo de seleccionar un estilo de distribución de tabla es minimizar el impacto del paso de la redistribución al poner los datos en donde se necesiten estar antes de realizar el query.
El estilo de la distribución de los datos que se elija para su base de datos tiene un gran impacto en el performance de los queries, la carga de datos y el mantenimiento. Al elegir la mejor estrategia de distribución, se puede balancear la distribución de los datos y mejorar significativamente el performance del sistema. Cuando se crea una tabla se puede elegir entre tres tipos de estilo EVEN, KEY y ALL.
- Distribución uniforme (EVEN distribution)
-
Es la opción por default, distribuye los datos a traves de los gajos en una forma uniforme.
- Distribución mediante llaves (KEY distribution)
-
Las filas están distribuidas de acuerdo a los valores en una columna. El nodo líder mantendrá los valores que coincidan juntos e incrementará el performance de los joins.
- Todo (ALL Distribution).
- Una copia total de la tabla es distribuida en cada nodo. Esto es util para buscar en grandes tablas que no son actualizadas frecuentemente.
Sort Keys
Otra importante decisión para hacer la creación de una tabla es si se van a especificar una o mas columnas para como llaves de ordenamiento. Si se utilizan, el procesador puede rápidamente saltar un largo numero de bloques durante una búsqueda.
Las llaves de ordenamiento (sort keys) pueden ser compuestas (compound) o interpaginadas (interleaved). Una llave sort compuesta es mas eficiente cuando la consulta utiliza predicates con un prefije, que es un subconjunto de la llave de ordenamiento en orden. Un interleaved sort key asigna valores de peso a cada columna en la llave de ordenamiento, de tal forma que los predicados de las consultas pueden usar un subgrupo de columnas para aplicar la llave de ordenamiento en cualquier orden.
Cargando Datos
RedShift soporta comandos SQL estándar como INSERT y UPDATE para crear y modificar registros en una tabla. Para operaciones en montón, sin embargo, provee el comando COPY como una forma mas eficiente que utilizar repetidamente INSERT.
El comando COPY copia los datos en una tabla en una manera eficiente, y soporta múltiples tipos de fuentes de datos. La forma mas rápida de cargar datos en RedShift es utilizando cargas de datos en grandes volúmenes desde archivos planos almacenados en S3 o desde DynamoDB.
Cuando se cargan datos desde S3, el comando COPY puede leer desde múltiples archivos al mismo tiempo. RedShift puede distribuir la carga de datos a los nodos y realizar el proceso de carga en paralelo. En lugar de leer un solo archivo de datos, se puede habilitar el procesamiento paralelo teniendo un cluster con múltiples nodos y múltiples archivos.
Después de cada carga de datos en grandes bloques que modifique significativamente un monto de datos, se necesitará ejecutar el comando VACUUM para reorganizar los datos y reclamar el espacio libre después de los deletes. Es importante correr el comando ANALYZE para actualizar la tabla de estadísticas.
Consultando Datos
RedShift permite escribir y ejecutar comandos SQL un las tablas. Soporta comandos como SELECT para realizar consultas y unit las tablas, los analistas pueden volverse productivos muy rápidamente utilizando RedShift o integrándolo fácilmente. Para consultas complejas, puede analizar el plan de consultas para un patrón de acceso mejor optimizado. Puede monitorear el performance de un cluster y queries específicos utilizando CloudWatch y RedShift desde la consola web.
Para largos clusters soportando muchos usuarios, se puede configurar Workload Management (WLM) para poner en lista y priorizar consultas. WLM permite definir múltiples colas y especificar un nivel de concurrencia para cada una. Por ejemplo, puede tener una cola para queries largos y concurrencia limitada, y otra para queries cortos y altos niveles de concurrencia.
Snapshots
De forma similar con RDS, se pueden crear snapshots en puntos en el tiempo con de los clusters de RedShift. Un snapshot puede ser utilizado para restaurar una copia o crear un clon del cluster original de RedShift. Los snapshots son almacenados por RedShift de forma durable en S3.
RedShift soporta snapshots automatizados y manuales. Para los automatizados realiza una toma de snapshots periódica del cluster y mantiene una copia por un periodo de tiempo configurable. También es posible realizar snapshots manuales y compartirlos a traves de diferentes regiones o incluso con otras cuentas de AWS. Los snapshots manuales son retenidos hasta que explícitamente sean borrados.
Seguridad
Asegurar los datos en clusters de RedShift es similar a asegurar otras bases de datos ejecutándose en la nube. El plan de seguridad debe incluir controles para proteger los recursos de la infraestructura, el esquema de las bases de datos, los registros en la tabla y el acceso a la red. Al direccionar la seguridad en cada nivel, se puede operar un banco de datos de RedShit de forma segura.
La primera capa viene a nivel de la infraestructura utilizando políticas IAM que limiten las acciones que los administradores pueden realizar. Con IAM se pueden crear políticas que garantizar a los usuarios de AWS el permiso para crear manejar el ciclo de un cluster, incluyendo escalamiento y operaciones de recuperación.
A nivel de la red, los clusters de RedShift pueden ser desplegados dentro del espacio de de una dirección IP privada para restringir la conectividad global. El acceso granular puede ser también restringido utilizando grupos de seguridad y ACL’s a nivel de la subred.
Ademas de controlar el acceso a la infraestructura a nivel de esta, se debe proteger el acceso a nivel de las bases de datos. Cuando inicialmente se crea un cluster de RedShift, se creara una cuenta master con un password. La cuenta master puede ser utilizada para iniciar sesión en RedShift y crear mas usuarios y grupos. Cada base de datos puede asignarse permisos a esquemas, tablas y otros objetos. Estos permisos son independientes de las políticas de IAM utilizadas para el control de la infraestructura y de la configuración de cluster de RedShift.
Proteger los datos en RedShift es otro aspecto importante del diseño de la seguridad. RedShift soporta la encriptación de los datos en transito utilizando conexiones SSL encriptadas, y también encriptación de los datos en rest utilizando múltiples técnicas. Para encriptar los datos en rest, RedShift integra KMS y SQS CloudHSM para el manejo de llaves de encriptación. La encriptación en rest y transito ayuda a cumplir los requerimientos de las normas de cumplimiento de HIPAA (Salud y Seguridad) y PCI DSS (Manejo de Tarjetas de Crédito).