Veamos los conceptos más importantes para implementar tu base de datos en la nube. Cuáles son las más utilizadas, algunas gratuitas, qué ventajas aporta tener la base de datos en la nube, y otros conceptos de cloud como autoescalado y replicación geográfica. ¡Empezamos!
Este artículo forma parte de nuestra serie donde te contamos todo lo que necesitas saber para adquirir las competencias necesarias para trabajar con bases de datos
En el artículo de Arquitecturas de Bases de Datos ya te contamos cómo se integra una base de datos con otros componentes dentro de una arquitectura empresarial. Pero para completar la explicación será necesario conocer algunos conceptos propios del big data y la nube, como la escalabilidad o los sistemas distribuidos, así como comprender qué nos ofrecen las plataformas en la nube, ya que hoy en día son el sitio donde se despliegan la mayoría de bases de datos productivas.
¿Qué es una base de datos en la nube? ¿Cómo funcionan?
Dicho de manera muy resumida, las plataformas cloud son empresas que ofrecen servicios de computación, como hosting de páginas web, apps o bases de datos, y con un modelo de pago por uso, es decir, no tienes que invertir en la infraestructura sobre la que despliegas tus recursos, sino que simplemente la “alquilas” y pagas por el tiempo en que la estás usando. Si quieres más detalles sobre qué es la nube y cómo funciona, te recomiendo que te pases por nuestro artículo de Fundamentos del Cloud Computing.
Una base de datos en la nube funciona de manera similar a una base de datos tradicional, pero con la diferencia de que los componentes principales, como el almacenamiento y el procesamiento, se encuentran en servidores remotos administrados por un proveedor de servicios en la nube. Es decir, dependiendo del nivel de abstracción que queramos, tendremos que administrar más o menos componentes de la base de datos. Veamos qué caracteriza una base de datos en la nube:
- Creación y Configuración: El usuario o administrador define los parámetros de la base de datos, como el tipo de base de datos (relacional, NoSQL, etc.), el tamaño, la ubicación geográfica y las opciones de seguridad.
- Provisión de Recursos: El proveedor de la nube asigna los recursos necesarios para la base de datos, como capacidad de almacenamiento, memoria y poder de cómputo, según la configuración definida.
- Almacenamiento: Los datos se almacenan en el almacenamiento de la nube, que puede ser en discos físicos o en soluciones de almacenamiento especializadas.
- Acceso y Consulta: Los usuarios y aplicaciones acceden a la base de datos a través de conexiones de red seguras. Las consultas SQL o comandos específicos de la base de datos se envían al servidor en la nube para su procesamiento.
- Procesamiento y Optimización: El servidor en la nube procesa las consultas y operaciones solicitadas utilizando los recursos asignados. El optimizador de consultas puede determinar el mejor plan de ejecución.
- Seguridad: La base de datos en la nube implementa medidas de seguridad como autenticación, autorización y encriptación para proteger los datos y garantizar el acceso adecuado.
- Autoescalado: En función de la carga de trabajo y las necesidades, la base de datos en la nube puede escalarse automáticamente para proporcionar más recursos y rendimiento.
- Backups y Recuperación: La base de datos en la nube suele ofrecer opciones automáticas de respaldo y recuperación para garantizar la integridad de los datos en caso de fallos.
- Actualizaciones y Mantenimiento: El proveedor de la nube se encarga de las actualizaciones de software, parches de seguridad y mantenimiento de la infraestructura subyacente.
- Monitoreo y Métricas: Los administradores pueden supervisar el rendimiento y la salud de la base de datos a través de herramientas y paneles proporcionados por el proveedor.
- Costos: Los costos asociados con la base de datos en la nube suelen estar basados en el consumo de recursos, lo que significa que pagas por lo que utilizas.
En resumen, una base de datos en la nube ofrece las mismas capacidades que una base de datos tradicional, pero con la ventaja de la flexibilidad, escalabilidad y gestión simplificada proporcionada por la infraestructura en la nube.
Ventajas e inconvenientes de tener una base de datos en la nube
Ventajas
- Escalabilidad: Las bases de datos en la nube pueden escalarse vertical u horizontalmente (veremos después este concepto) según las necesidades de rendimiento y almacenamiento, evitando la inversión inicial en hardware costoso.
- Acceso Ubicuo: Los usuarios pueden acceder a la base de datos desde cualquier ubicación con conexión a Internet, lo que permite la colaboración y el acceso remoto.
- Gestión Simplificada: Los proveedores de la nube se encargan de la administración, actualización y mantenimiento de la infraestructura y el software de base de datos, reduciendo la carga operativa del usuario.
- Flexibilidad de Pago: Muchas ofertas de nube permiten pagar solo por los recursos utilizados, lo que puede ser más económico y predecible que la inversión en hardware propio.
- Backup y restore: Los proveedores de la nube generalmente ofrecen capacidades de backup y restore automatizados, lo que mejora la seguridad de los datos.
- Disponibilidad: Las bases de datos en la nube suelen ofrecer alta disponibilidad y redundancia geográfica, lo que reduce el riesgo de interrupciones.
- Rápida Implementación: Puedes desplegar y configurar bases de datos en la nube en cuestión de minutos u horas, en lugar de semanas o meses.
Inconvenientes
- Dependencia del Proveedor: La elección del proveedor y la migración entre proveedores pueden ser complicadas debido a la dependencia tecnológica y contractual.
- Seguridad y Privacidad: Algunas organizaciones pueden preocuparse por la seguridad de los datos almacenados en la nube, aunque los proveedores suelen ofrecer medidas de seguridad robustas.
- Latencia: Dependiendo de la ubicación física de los servidores en la nube, podría haber una latencia mayor en comparación con una base de datos local.
- Costos a Largo Plazo: Aunque los costos iniciales pueden ser bajos, los gastos a largo plazo pueden acumularse si no se gestiona adecuadamente la infraestructura en la nube.
- Control Limitado: Algunos aspectos de la configuración y personalización pueden estar limitados por las restricciones de la nube, lo que puede afectar la adaptación a necesidades específicas.
- Rendimiento Variable: El rendimiento de la base de datos en la nube puede verse afectado por factores externos como la congestión de la red o la sobrecarga en el centro de datos del proveedor.
- Cumplimiento Normativo: En algunos casos, cumplir con regulaciones específicas puede ser más complicado cuando los datos se almacenan en la nube.
Principales bases de datos en la nube
La elección de base de datos en la nube pueden variar según las necesidades específicas de tu proyecto o negocio. Sin embargo, aquí tienes una lista de algunas de las principales bases de datos en la nube que son populares y ampliamente utilizadas:
Amazon
Una base de datos relacional compatible con MySQL y PostgreSQL en AWS sería Amazon Aurora, que ofrece un alto rendimiento y disponibilidad en la nube de Amazon (AWS). Otra opción sería Amazon DynamoDB, una base de datos NoSQL clave-valor y documental totalmente administrada en AWS, que brinda escalabilidad y baja latencia.
Azure
Microsoft Azure SQL Database es una base de datos relacional administrada y escalable en Microsoft Azure, que soporta SQL Server y ofrece integración con otras herramientas de Microsoft. Otra muy buena opción podría ser CosmosDB. Se trata de la base de datos NoSQL de Azure.
Google Cloud
Una base de datos interesante sería Google Cloud Spanner. Es relacional, globalmente distribuida, y combina las ventajas de las bases de datos SQL y NoSQL en Google Cloud Platform (GCP). Otra alternativa sería Google Cloud Firestore, que es una base de datos NoSQL de documentos y tiempo real en GCP, ideal para aplicaciones web y móviles que requieren sincronización instantánea. Para tablas estructuradas Google también tiene Big Query, que ofrece un servicio serverless muy económico.
IBM
Tenemos IBM DB2 en cloud, una opción de base de datos relacional ofrecida por IBM en su nube, que brinda seguridad y opciones avanzadas de análisis.
MongoDB, MySQL, Oracle, PostgreSQL, Cassandra
Y siempre tenemos la opción de desplegar los motores de gestión de base de datos más utilizamos en el mercado, en cualquiera de las principales clouds, aplicándose las ventajas e inconvenientes que veíamos en el apartado anterior.
Cada una de estas bases de datos en la nube tiene sus propias características y ventajas. Es importante evaluar tus necesidades específicas, como el tipo de datos, el rendimiento requerido, la escalabilidad y los costos, antes de elegir la que mejor se adapte a tu proyecto.
Bases de datos en la nube gratis
Aquí tienes algunas opciones de bases de datos en la nube gratuitas que puedes considerar:
- Firebase: Ofrece Firebase Realtime Database y Cloud Firestore, bases de datos NoSQL en tiempo real, como parte de su plataforma para aplicaciones web y móviles.
- Microsoft Azure SQL Database – Nivel Básico: Azure ofrece un nivel básico gratuito con capacidad limitada para su servicio de base de datos SQL administrado.
- Amazon Web Services (AWS) – Amazon RDS Free Tier: AWS ofrece una capa gratuita para su servicio Amazon RDS, que incluye instancias de bases de datos SQL.
- MongoDB Atlas – M0 Cluster: MongoDB ofrece un plan gratuito llamado “M0 Cluster” que permite utilizar su base de datos NoSQL gestionada.
- Google Cloud Firestore – Modo Nativo: Firestore ofrece un modo nativo gratuito con límites generosos para su base de datos en tiempo real.
- Oracle Cloud Database – Autonomous Database Free Tier: Oracle ofrece un nivel gratuito para su base de datos autónoma, con capacidad limitada y opciones de SQL y NoSQL.
- ElephantSQL: Proporciona bases de datos PostgreSQL en la nube con un plan gratuito que ofrece recursos limitados.
- Redis Cloud – Free Tier: Ofrece un plan gratuito con límites en su servicio de base de datos Redis en la nube.
Recuerda que las ofertas gratuitas suelen tener restricciones en cuanto a la cantidad de recursos, la capacidad de almacenamiento y las características disponibles. Si tienes necesidades más avanzadas o requieres más recursos, es posible que debas considerar opciones de pago. Además, ten en cuenta que los términos y condiciones pueden cambiar, por lo que es recomendable verificar la información en el sitio web del proveedor antes de tomar una decisión.
Si tienes dudas sobre qué base de datos elegir, en esta guía te mostramos todos los tipos de base de datos que hay, acompañado de ejemplos y recomendaciones.
Escalabilidad
Cuando trabajamos en un proyecto de IT, no nos podemos quedar simplemente en las especificaciones y necesidades del presente. Las aplicaciones evolucionan, y si bien es cierto que no sabemos en qué se convertirán, sí que es posible adelantarnos a ciertos escenarios que son muy probables que ocurran, como la llegada de más peticiones a la BD, aumento de usuarios y el crecimiento de los datos de la BD.
Adelantarnos a todo esto va a provocar que el día de mañana tengamos que dedicarle menos esfuerzo, tiempo y dinero a segundas versiones o evoluciones de las aplicaciones. Recuerda que con una base de datos das servicio a múltiples usuarios.
Quizá sea un proceso crítico en la empresa, y si dejamos de dar ese servicio temporalmente puede implicar pérdida de datos, informes que no se mandan, datos que hay que enviar a terceros con los que existe un contrato tampoco se enviarán, etc. Las consecuencias pueden ser muy graves, por lo que hay que adelantarse a los problemas en la medida de lo posible.
Vamos a ver los dos tipos de escalados: vertical y horizontal.
Escalado vertical
¿Qué ocurre si la cantidad de usuarios de la base de datos aumenta? ¿y si he pasado de almacenar GB a TB? ¿se comportará igual la base de datos? Lógicamente no, tendremos que aumenta la capacidad de la base de datos y escalar el sistema. Como primer pensamiento, lo primero que se nos ocurre es cambiar el servidor por otro con más potencia. Podemos pasar de 4 a 8 cores, de 16GB de RAM a 64 y de 500 GB de disco a 2 TB. Esto es lo que se conoce como escalado vertical, donde los datos conviven en una única máquina y su escalado consiste en aumentar las especificaciones de su hardware.
Escalado horizontal
¿Hemos solucionado el problema con el escalado vertical? Si, pero temporalmente y a un alto coste. Ahora que tenemos muchos más usuarios, ¿qué ocurriría si se nos cae el servidor? ¿y si ahora tenemos usuarios en Argentina y en Australia? ¿Sería interesante que cuenten con un servidor más cercano para reducir la latencia?
Para solucionar esto tenemos el escalado horizontal, donde los datos conviven en varias máquinas y su escalado consiste en añadir más servidores. ¿Qué ventajas aporta esto?
- Rendimiento: podremos llevar a cabo una computación paralela de queries en múltiples máquinas
- Redundancia: no hay problema si se cae un nodo, al tener replicados los datos en los otros. Es lo que se conoce también como Partition Tolerance.
- Coste: los motores de big data como Hadoop y Spark trabajan bien con hardware económico. Aunque haya que disponer de una mayor cantidad de nodos, son más baratos que las máquinas de alta capacidad. Aunque esto no quiere decir que el despliegue de un cluster de máquinas sea necesariamente barato. Estamos hablando de computaciones de grandes volúmenes de datos, por lo que es necesario un hardware más potente
- Distribución geográfica: podemos replicar los nodos en varios datacenters para reducir la latencia.
- Flexibilidad: si tenemos problemas de capacidad, simplemente añadimos otro nodo con la misma configuración que los anteriores, sin necesidad de cambiar ningún servidor.
Por supuesto, no hace falta implementar muchos nodos a la vez, puesto que los costes aumentarían en gran medida. Quizá únicamente necesitemos meter una o dos máquinas más para mejorar en rendimiento.
Ahora bien, como principal inconveniente tenemos la complejidad del sistema. Si optas por un escalado horizontal has de tener en cuenta que no todas las bases de datos son compatibles con este tipo de escalado y que pasamos de configurar un servidor, a configurar N servidores (o contenedores), con su seguridad, su software, sus comunicaciones, etc.
Lo mejor en estos casos es acudir a una plataforma cloud que nos ofrezca un autoescalado de recursos y no tengamos que precuparnos de lo que despliega por debajo.
Bases de datos distribuidas
Los sistemas distribuidos en bases de datos son aquellos en los que los datos se almacenan y gestionan en múltiples nodos o servidores interconectados en una red (también llamado cluster), es decir, hablamos de escalado horizontal.
En lugar de tener una base de datos centralizada, los datos se distribuyen y replican en diferentes ubicaciones geográficas o servidores para mejorar el rendimiento, la disponibilidad y la escalabilidad del sistema. Los nodos se comunican y se coordinan entre sí para garantizar la coherencia y consistencia de los datos distribuidos.
Algunas características y conceptos clave de los sistemas distribuidos en bases de datos son:
- Replicación de datos: Los datos se replican en múltiples nodos para garantizar la disponibilidad y la tolerancia a fallos.
- Transacciones distribuidas: Las transacciones que afectan a múltiples nodos se coordinan y se ejecutan de manera consistente en todo el sistema.
- Consistencia eventual: En algunos sistemas distribuidos, la consistencia entre los nodos no se garantiza en tiempo real, sino que se logra de manera asíncrona. Esto significa que puede haber una pequeña ventana de tiempo en la que los nodos puedan tener datos inconsistentes antes de que se propaguen y se logre la consistencia eventual.
- Fragmentación de datos: Los datos se dividen en fragmentos o particiones que se distribuyen entre los nodos del sistema. Cada nodo puede ser responsable de un subconjunto de datos, lo que permite un procesamiento paralelo y una mejor escalabilidad.
- Tolerancia a fallos: Los sistemas distribuidos pueden continuar funcionando incluso si uno o varios nodos fallan. Los datos y las operaciones se redirigen automáticamente a otros nodos disponibles para mantener la continuidad del servicio.
En cuanto a tecnologías que trabajen sobre sistemas distribuidos, podemos destacar la suite de herramientas de Apache. Cuenta con el sistema de ficheros de Hadoop (el HDFS), o el motor de procesado de datos de Spark. Apache Cassandra, Apache HBase o AWS SimpleDB son algunos ejemplos de BBDD que soportan computación paralela. Aunque también podemos optar por alternativas como Big Query, donde por debajo utiliza computación paralela con un impacto mínimo en el usuario final. Se trata de temas sobre los que se profundizaremos más adelante.
Particionado
Para trabajar con sistemas distribuidos es necesario particionar los datos y distribuirlos en varias máquinas, pero ¿qué es el particionado?
El particionado se refiere al proceso de dividir una tabla grande o un conjunto de datos en fragmentos más pequeños llamados particiones. Cada partición contiene un subconjunto de filas y columnas de la tabla original, y se almacena físicamente en diferentes ubicaciones o dispositivos de almacenamiento.
El particionado se utiliza principalmente para mejorar el rendimiento y la escalabilidad de las bases de datos, al permitir la distribución de datos y consultas en diferentes unidades de almacenamiento o servidores.
Replicación
Mediante la replicación de bases de datos creamos y mantenemos copias consistentes de una base de datos en varios servidores distribuidos. Es una técnica utilizada para mejorar la disponibilidad, la escalabilidad y la fiabilidad de los sistemas de bases de datos.
En la replicación, se selecciona un servidor principal o maestro que contiene la base de datos principal, y se crean uno o más servidores secundarios o esclavos que mantienen copias idénticas de esa base de datos. Cada vez que se realiza una modificación en el servidor principal, como una inserción, actualización o eliminación de datos, estos cambios se registran y se envían a los servidores secundarios para que repliquen esas modificaciones en sus propias copias de la base de datos.
La replicación en bases de datos ofrece varios beneficios, como la alta disponibilidad, ya que si el servidor principal falla, uno de los servidores secundarios puede asumir su papel. También proporciona escalabilidad, ya que los servidores secundarios pueden utilizarse para distribuir la carga de trabajo. Además, la replicación mejora la fiabilidad y permite realizar copias de seguridad sin afectar el rendimiento del servidor principal.
Sin embargo, es importante tener en cuenta que la replicación no es una solución completa para todos los problemas de bases de datos. La replicación no garantiza la consistencia absoluta en todos los servidores y puede introducir complicaciones en escenarios de escritura concurrente. Por lo tanto, es fundamental diseñar y configurar adecuadamente el sistema de replicación para satisfacer los requisitos específicos de la aplicación y garantizar la integridad de los datos.
Replicación geográfica
Si hablamos de cloud tenemos que mencionar también los datacenters y la replicación geográfica. Al contratar servicios cloud, ya no tenemos la aplicación alojada en un servidor físicamente dentro de la empresa, y es posible que tus bases de datos y otros componentes estén desplegados en servidores a miles de kilómetros de tu sede central o de donde se encuentren tus clientes.
Cuando pones en producción un recurso cloud, realmente lo estás instalando en un servidor propiedad del proveedor cloud, el cual puede estar situado en San Francisco, compartiendo maquina con otros servicios o teniendo su propio servidor dedicado. A su vez esta maquina formará parte de un conjunto de servidores de alto rendimiento en lo que se conoce como un datacenter.
Las plataformas cloud cuentan con decenas de datacenters distribuidos por todo el mundo, lo que nos permite desplegar piezas software en varios puntos del planeta. ¿Esto que nos aporta?
- Si los servicios que ofrecemos a nuestros clientes son consumidos desde muchas partes del mundo, no podemos contar con un único punto de acceso, pues tendremos usuarios con latencias muy altas y probablemente saturación del servidor a causa de la gran cantidad de peticiones recibidas. Para reducir estas latencias habrá que desplegar ese mismo recurso en un datacenter cercano a esos usuarios.
- Puede que en la zona geográfica donde ofrecemos servicios no sea muy estable, y por tanto cualquier desastre haría que se caigan todos los servicios que tengamos en esa zona. Si los replicamos en múltiples áreas geográficas minimizamos el riesgo y garantizamos su disponibilidad.
Tipos de bases de datos en la nube
Conceptos como la replicación, escalado y particionado sirven para mejorar los diseños y prestaciones de las bases de datos y otros componentes. Vamos a ver cómo y dónde se pueden poner en práctica estos conceptos.
En toda puesta en producción de una pieza de software es necesario desplegar servidores, comunicarlos con los respectivos protocolos, llevar a cabo configuraciones de seguridad, agregar balanceadores de carga, orquestadores de procesos para escalados horizontalmente… Podemos ocuparnos de todo esto o contratar recursos en la nube que se encargue de parte o de todo el trabajo, depende de a qué nivel queramos meternos. Estos son los servicios en la nube que podemos contratar en función del nivel de abstracción:
- IaaS: nos abstraemos de la maquina física nada más. Contratamos una máquina virtual y nosotros nos encargamos de configurar todo el servidor. Por ejemplo, contratamos un Ubuntu en GCP y nos encargamos de desplegar un MySQL y configurar todas las comunicaciones.
- PaaS: nos abstraemos de la maquina física, sistema operativo, comunicaciones y despliegue del DBMS. Desde el portal de GCP configuraríamos de forma sencilla un MySQL y le indicaríamos cómo queremos conectarnos al MySQL. Para nosotros lo único que existiría es un servicio de MySQL.
- SaaS: en este caso tenemos una aplicación de gestión de BD que manejamos desde el navegador. El proveedor de servicios de la nube se ha encargado de todo lo demás, la infraestructura, sistema operativo, gestor de base de datos, etc… Un ejemplo de esto sería Big Query.
Y ahora viene la pregunta del millón, ¿despliego la base de datos en cloud u on premise? Cada una ofrece sus ventajas y sus inconvenientes, no obstante en la mayoría de casos suele compensar más usar la nube, particularmente en empresas pequeñas y medianas. Los clientes cada vez quieren abstraerse más de la infraestructura que lleva por debajo, y estas plataformas cloud ofrecen servicios de gestión de base de datos más centrados en la experiencia de usuario. El principal motivo de esta tendencia es lo de siempre: tiempo vs dinero. Con la nube no hay que preocuparse por los recursos físicos, ahorrando tiempo en el despliegue y mantenimiento, y por otro lado ahorramos también dinero al no tener que contratar a un experto para estas tareas, por no hablar de que tampoco hay que invertir en los servidores físicos. A cambio, pagamos por el uso de los recursos.
Ahora bien, eso no quita para que sea la mejor solución para todos. A las empresas con datos muy masivos, y con equipos técnicos muy grandes es posible que les salga más a cuenta tener sus propios servidores gestionados por su equipo, antes que pagar por el uso a un tercero. Por no hablar de aquellas empresas con datos sensibles que no confían o no pueden cederlos a terceros, por lo que tener sus datos alojados en un servidor cloud remoto no es una opción.
Es cierto que cada vez hay que preocuparse menos del despliegue de infraestructura, ya que las plataformas cloud lo hacen por nosotros. Ahora bien, tenemos que saber lo que hacemos si queremos que los sistemas que despleguemos se ajusten a las necesidades del proyecto, sean escalables y tengamos los costes controlados.
SIGUIENTE EPISODIO – Te recomendamos que continúes tu travesía por las bases de datos con nuestro artículo sobre todo lo que necesitas saber sobre los diferentes tipos de bases de datos que existen.
Pingback: We Learn Data