Vamos avanzando en la serie de artículos que me están permitiendo comparar diferentes aspectos de AWS, Azure y GCP. Continuamos el recorrido comparativo después de haber visto
- Comparación de AWS, Azure y GCP (I): Conceptos generales
- Comparación de AWS, Azure y GCP (II): Redes
- Comparación de AWS, Azure y GCP (III): Identidad y Acceso
En los tres primeros capítulos hemos visto la organización de las tres plataformas, como se diseñan las redes, y como se gestiona el acceso y la autorización.
Los dos siguientes capítulos se van a centrar en aspectos necesarios a la hora de construir aplicaciones debido a que de algún modo u otro la gran mayoría de las aplicaciones necesitan capacidad de procesamiento y de almacenamiento.
En concreto este artículo hace referencia a los servicios relacionados con almacenamiento y bases de datos.
Las tres nubes disponen de dos categorías diferenciadas (almacenamiento y bases de datos) para clasificar los servicios relacionados con esta necesidad. Antes de entrar más a fondo, voy a explicar la diferencia entre datos estructurados, semiestructurados y no estructurados, que luego nos va a permitir entender mejor el porqué de esta clasificación.
Tipos de datos
El uso de estos tres tipos de datos cubre una gran variedad de escenarios posibles, la elección del más apropiado para el caso de uso de una aplicación repercutirá en las prestaciones ofrecidas por dicho servicio y en el coste de infraestructura asociado.
En este artículo se explican las principales diferencias entre los servicios disponibles para almacenar cada uno de los tres tipos de datos y se dan unas pautas para identificar cual puede ser el más apropiado para un determinado caso de uso.
Datos estructurados
Los datos estructurados, también denominados datos relacionales, son aquellos que tienen todos los mismos campos o propiedades y tienen perfectamente definida la longitud, el formato y el tamaño de sus datos. Esta característica facilita las búsquedas mediante lenguajes como SQL (Structured Query Language).
Los datos estructurados suelen almacenarse en tablas, hojas de cálculo o en bases de datos relacionales y pueden relacionarse entre ellos mediante claves.
Datos semiestructurados
Los datos semiestructurados (o no relacionales o NoSQL) no encajan perfectamente en tablas como sí lo hacen los estructurados. Por tanto, su estructura es irregular y no está perfectamente definida. Se pueden manejar mediante convenciones establecidas por ejemplo pares clave-valor, documentos o columnas. Esto permite que se puedan definir mediante lenguajes estandarizados como XML, JSON y YAML.
Datos no estructurados
Los datos no estructurados se caracterizan por no tener un formato específico.
Se almacenan en múltiples formatos como documentos PDF o Word, correos electrónicos, ficheros multimedia de imagen, audio o video, etc.
Estos “datos” son cada uno un BLOB, (Binary Large Objects, objetos binarios grandes), y en ellos no podemos buscar elementos específicos.
Los datos no estructurados son aquellos que tienen sentido de forma individual pero no permiten establecer una estructura que permita indicar su formato. Posibles ejemplos son los siguientes:
- Archivos multimedia, fotos, vídeos y audios
- Documentos de Word
- Archivos binarios
Almacenamiento de los diferentes tipos de datos
Además del tipo de datos más apropiado para ser almacenado en cada uno de las opciones existentes, se deben de considerar otros aspectos para poder decidir cuál es el más apropiado.
Uno de los aspectos es el escalado de la base de datos, este escalado puede ser vertical que consiste en añadir más capacidad de computación y de almacenamiento a las instancias existentes, o escalado horizontal que consiste en añadir más instancias para que el tráfico se distribuya entre ellas, dentro del escalado horizontal existe un subtipo que es el de réplicas de lectura mediante el cual las instancias añadidas lo son para derivar a ellas las peticiones de lectura.
Otro aspecto a tener en cuenta para realizar la elección más apropiada es la disponibilidad ofrecida por la base de datos, este SLA debe de ser el apropiado para lo que necesite la aplicación.
Bases de Datos NoSQL (Documentales, Clave-Valor y Columnas) (Datos semiestructurados)
Las bases de datos de clave-valor almacenan datos (valor), identificados por claves. Por lo general, pueden almacenar una gran cantidad de datos manteniendo un tiempo de búsqueda rápido. El valor que almacena normalmente consta de un conjunto variable de propiedades con diferentes tipos de datos. Dentro del almacenamiento clave-valor son importantes las opciones de almacenamiento en memoria, que permiten acelerar las operaciones de acceso a los datos, y pueden ser usados para datos de uso frecuente.
Las bases de datos documentales almacenan la información en documentos con formatos semiestructurados. Éstas amplían el concepto de la base de datos de pares clave-valor ya que permiten almacenar valores más complejos y organizarlos en grupos. Permiten realizar consultas de cualquier atributo dentro de un documento.
Las bases de datos de columnas siguen un modelo similar al de la base de datos relacionales, excepto que las tablas se almacenan por columnas, en lugar de por filas. Las bases de datos de almacenamiento de columnas anchas son en realidad un concepto NoSQL independiente en el que las columnas pueden variar en nombre y formato entre filas de la misma tabla. Los datos similares se agrupan en columnas, y las columnas similares se agrupan en «familias de columnas».
Las bases de datos NoSQL escalan horizontalmente sin problemas, pudiendo adaptarse fácilmente a nuevas necesidades.
A continuación vamos a ver los diferentes servicios ofrecidos por los tres proveedores que estoy comparando para este tipo de de bases de datos.
AWS
DynamoDB es un servicio de base de datos totalmente administrado, funciona con pares clave-valor y documentos, proporciona un rendimiento de milisegundos con replicación automática en varias regiones, ofrece alta seguridad y confiabilidad. Con un SLA (acuerdo de nivel de servicio) del 99,999%, sus características son cifrado en reposo, transacciones ACID, Auto scaling.
DocumentDB almacena datos en formato JSON, es un servicio de base de datos de documentos rápido, escalable, altamente disponible y totalmente administrado, la diferencia con dynamoDB es que documentDB es compatible con MongoDB.
Elastic Cache es una versión administrada de almacén de datos en memoria, se utiliza principalmente para almacenar en caché datos de uso frecuente para acelerar las operaciones de lectura. Admite dos motores: Redis y Memcached. Es ideal para aplicaciones que requieren un rendimiento ultra rápido y una alta capacidad de almacenamiento en caché.
MemoryDB para Redis es una base de datos en memoria compatible con Redis. Permite crear aplicaciones en Redis y acceder a datos con un rendimiento ultrarrápido. Utiliza el registro transaccional Multi-AZ para una rápida recuperación y reinicio de la base de datos.
Azure
Azure Cosmos DB es una base de datos multimodelo (puede almacenar datos en pares clave-valor, bases de datos basadas en documentos, basadas en gráficos y basadas en familias de columnas) de baja latencia distribuida globalmente para administrar datos a gran escala, tiene soporte multimaestro donde los datos se pueden escribir simultáneamente en diferentes bases de datos distribuidas globalmente con eventual coherencia. De esta manera, los datos se replican en la región más cercana de los usuarios para que se pueda acceder a ellos más rápido.
Proporciona soporte de API para crear y administrar bases de datos entre otras Azure Cosmos DB for PostgreSQL, Cassandra API, Azure Cosmos DB API para Mongo DB, API para Gremlin, API para Table.
Azure Cache for Redis es una solución de base de datos distribuida en memoria. Almacena en caché los datos utilizados con frecuencia y ayuda a optimizar el rendimiento general de la aplicación, es un servicio totalmente administrado. Ofrece un alto rendimiento y un rendimiento optimizado para manejar millones de solicitudes por segundo con una latencia muy baja, de hasta submilisegundos.
GCP
Firestore en modo DataStore es una base de datos de documentos altamente escalable y totalmente administrada, utiliza Google Query Language (GQL), puede atender millones de solicitudes API por segundo. Cifra automáticamente todos los datos antes de escribirlos y los descifra antes de que un usuario autorizado los lea. Firestore es la versión más moderna de DataStore y presenta varias mejoras respecto a DataStore.
Firestore es una base de datos de documentos sin servidor que proporciona una forma simplificada de almacenar, sincronizar y consultar datos para sus aplicaciones móviles, web y de IoT, proporciona seguridad integrada, escalado automático y replicación multirregional.
Cloud BigTable es una base de datos de clave-valor de columnas anchas y de alto rendimiento diseñada para manejar cargas de trabajo a gran escala. Es la base del motor de búsqueda de Google, es totalmente administrado, y alto rendimiento con baja latencia, puede crecer de gigabytes a petabytes. Ofrece alta escalabilidad, administración sencilla, cambio de tamaño del clúster sin tiempo de inactividad.
Memorystore es un almacén de memoria totalmente administrado para Redis y Memcached, se puede integrar con sus aplicaciones en la nube de Google, incluida la suite de operaciones en la nube de Google, lo que facilita el monitoreo de sus instancias.
Comparación
AWS | Azure | GCP | |
---|---|---|---|
Bases de Datos NoSQL (Documentos y Clave-Valor) | |||
Clave-Valor | DynamoDB | Cosmos DB Azure Cache for Redis |
Firestore en modo DataStore Firestore |
Documental | DocumentDB | Cosmos DB | Cloud Bigtable |
Columnas | Cosmos DB | Cloud Bigtable | |
En memoria | Amazon MemoryDB para Redis Amazon Elastic Cache |
Azure Cache for Redis | Memorystore |
Precios | DynamoDB DocumentDB |
Cosmos DB | Firestore en modo DataStore Cloud Bigtable |
Cuotas | DynamoDB DocumentDB Amazon MemoryDB para Redis |
Cosmos DB | Firestore en modo DataStore Cloud Bigtable |
Los tres proveedores ofrecen servicios que cubren las diferentes necesidades en cuanto a bases de datos NoQL, una de las diferencias más visibles es que Azure ofrece en un solo servicio Azure Cosmos DB la posibilidad de gestionar los diferentes modelos que he analizado en este artículo.
Para elegir la mejor opción se deben evaluar los costos asociados con cada servicio, teniendo en cuenta el volumen de datos, el rendimiento requerido y otros factores. También se debe considerar cuál de los modelos de datos (clave-valor, documento, columnas) se adapta mejor a las necesidades.
Bases de Datos Relacionales (Datos estructurados)
Las bases de datos relacionales almacenan la información en tablas. Permiten almacenar los datos con eficacia y consultar las filas de datos. También resultan útiles para consultar columnas específicas de la base de datos.
La estructura de la información esta estrictamente definida mediante un esquema de la base de datos, las modificaciones en este esquema son costosas porque implican modificar todos la información existente.
Por otra parte, el escalado horizontal en este tipo de bases de datos es complicado, por lo que la mejor alternativa cuando se necesita es el escalado vertical. Además, mantener clústeres de bases de datos relacionales altamente escalados y con un alto rendimiento de escritura es un desafío.
AWS
Amazon Aurora es el servicio RDBMS (relational database management system) de AWS y es totalmente compatible con MySQL y PostgreSQL.
Permite el desarrollo de aplicaciones multiinquilino y de alto rendimiento, y ofrece escalabilidad multirregional y capacidad para implementar aplicaciones distribuidas globalmente.
Amazon Relational Database Service (Amazon RDS) es una colección de servicios administrados de alto rendimiento que permite configurar, operar y escalar bases de datos en la nube con total flexibilidad y rentabilidad.
Permite elegir entre motores como SQL Server, Amazon Aurora con PostgreSQL, Amazon Aurora con MySQL, MariaDB, Oracle y PostgreSQL. Es ideal para crear aplicaciones web con altos requisitos de escalabilidad.
Amazon Redshift está diseñado para analizar exabytes de datos y ejecutar consultas analíticas complejas.
Permite ejecutar y escalar análisis en segundos sin preocuparse por la infraestructura subyacente.
Azure
Azure SQL Database es un servicio de base de datos relacional totalmente administrado. Admite alta escalabilidad y se adapta rápidamente a los requisitos de las aplicaciones. Tiene un SLA del 99,995%.
Azure Database para PostgreSQL es una base de datos de Azure totalmente administrada que puede escalar de forma rápida, sencilla y segura. Ofrece SLA de hasta el 99,99 por ciento. Admite varias extensiones de PostgreSQL.
Azure Database para MySQL es una base de datos MySQL totalmente administrada. Admite una alta escalabilidad. Está construido con la última edición de MySQL Community Edition. Ofrece un SLA de hasta el 99,99%.
Azure Database para MariaDB es un servicio totalmente administrado basado en MariaDB Community. Ofrece alta disponibilidad integrada y escalamiento elástico pueden ayudarle a lograr una alta continuidad empresarial.
SQL Managed Instance es un servicio de base de datos escalable de Microsoft que reúne las capacidades de SQL Server Engine, respaldado por un servidor totalmente administrado. Tiene capacidades integradas de Azure Arc.
SQL Server en máquinas virtuales forma parte de la familia de bases de datos Azure SQL, ayuda a migrar cargas de trabajo de SQL Server a la nube.
GCP
Cloud SQL es un servicio de base de datos relacional totalmente administrado para MySQL, PostgreSQL y SQL Server. Contiene extensiones, indicadores de configuración y ecosistemas de desarrolladores.
Cloud Spanner es un servicio de base de datos relacional totalmente administrado por Google Cloud. Ofrece hasta un 99,999 % de disponibilidad con soporte de escalado ilimitado. Separa los recursos de computación del almacenamiento de datos, de forma que es posible escalar y escalar recursos de procesamiento de forma transparente.
AlloyDB para PostgreSQL es un servicio de base de datos compatible con PostgreSQL totalmente administrado. Ofrece alta disponibilidad con un SLA de tiempo de actividad del 99,99 %.
Solución Bare Metal para Oracle servicio de base de datos totalmente administrado permite a los usuarios llevar sus cargas de trabajo de Oracle fácilmente a Google Cloud.
BigQuery servicio de base de datos relacional altamente escalable. Se utiliza comúnmente para crear aplicaciones que necesiten procesamiento en tiempo real y aprendizaje automático. Ofrece alta disponibilidad con un SLA de tiempo de actividad del 99,99 %.
Comparación
Las opciones de bases de datos en AWS, Azure y GCP son muy variadas y con unas capacidades que pueden cubrir la gran mayoría de los casos de uso. Existen servicios en gran medida equivalentes en los tres proveedores ofreciendo cada uno sus propias características.
Almacenamiento (Datos no estructurados)
En esta categoría existen diversos servicios que permiten almacenar objetos bloques o archivos, a continuación, describo brevemente en que consiste cada uno de ellos.
Almacenamiento de objetos almacena datos como objetos o blobs. Cada objeto tiene un identificador único y se almacena como una única entidad con sus metadatos. El almacenamiento de objetos es ideal para datos no estructurados, como imágenes, vídeos y archivos de audio, y ofrece un alto nivel de escalabilidad, durabilidad y disponibilidad.
Los servicios ofrecidos por los tres proveedores para el almacenamiento de objetos ofrecen las siguientes características:
- Versionado
- Cifrado en reposo
- Seguridad detallada, incluidas opciones para hacer que un objeto sea de acceso público o completamente privado
- Gestión del ciclo de vida (permiten cambiar de nivel según se cumplan determinadas condiciones)
Además, ofrecen diferentes niveles de clase de almacenamiento que permiten ajustar la eficiencia y redundancia según sea necesario, y también reducir los costos de los datos a los que se accede con menos frecuencia (AWS-Infrequently accessed, Azure-Cool, GCP-Nearline o ColdLine), o archivar aquellos que se prevea un acceso muy esporádico o nulo (AWS-Glacier, Azure-Archive, GCP-Archive).
Almacenamiento en bloques almacena datos como bloques o fragmentos. Cada bloque tiene un tamaño fijo y se puede acceder a él directamente. El almacenamiento en bloques es ideal para datos estructurados, como bases de datos y máquinas virtuales, y ofrece un alto nivel de rendimiento y confiabilidad.
Los tres proveedores ofrecen características similares, pudiendo aprovisionar dispositivos SSD o ahorrar con discos duros magnéticos. Ofrecen snapshots programados y ad hoc que permiten almacenar, restaurar y duplicar los dispositivos. También ofrecen cifrado del almacenamiento.
Almacenamiento de archivos almacena datos como archivos y directorios. Se accede a cada archivo mediante un sistema de archivos, como NFS o SMB, y se puede compartir entre múltiples usuarios y aplicaciones. El almacenamiento de archivos es ideal para aplicaciones que requieren acceso compartido a archivos, como sistemas de gestión de contenidos y directorios personales.
Las diferentes opciones ofrecidas son prácticamente iguales, con algunas ligeras diferencias en protocolo, tamaño máximo de volumen y rendimiento.
AWS
Ofrece varias opciones de almacenamiento que cubren los diferentes tipos:
- Almacenamiento de objetos: Amazon Simple Storage Service (S3), con diferentes clases de almacenamiento, incluidos Estándar, Acceso poco frecuente y Glacier.
- Almacenamiento de bloques: Amazon Elastic Block Storage (EBS).
- Almacenamiento de archivos: Amazon Elastic File System (EFS). Además se diferencia ofreciendo dos opciones adicionales de almacenamiento de archivos. Amazon FSx para Windows está optimizado para su uso en entornos de servidores Windows y Amazon FSx para Lustre para casos de uso de informática de alto rendimiento.
Azure
A diferencia de AWS y GCP ofrece las cuentas de almacenamiento enlazadas a la suscripción le permiten crear y administrar los siguientes servicios de almacenamiento:
- Almacenamiento de objetos: Azure Blob Storage con varios niveles de almacenamiento, incluidos Hot, Cool y Archive.
- Almacenamiento de bloques: Azure Disks Storage y Azure Managed Disks.
- Almacenamiento de archivos: Azure Files Storage.
GCP
Ofrece varias opciones:
- Almacenamiento de objetos y bloques: Google Cloud Storage con varias clases de almacenamiento, incluidos Standard, Nearline, Coldline y Archive.
- Almacenamiento de bloques: Persistent Disk y SSD Local.
- Almacenamiento de archivos: Filestore.
Comparación
Las opciones de almacenamiento en AWS, Azure y GCP son bastante similares. AWS ofrece dos opciones adicionales de almacenamiento de archivos. Amazon FSX para Windows está optimizado para su uso en entornos de servidores Windows y Amazon FSx para Lustre para casos de uso de informática de alto rendimiento.