Altenwald Blog
Blog sobre programación, software libre, redes, servidores, ...
Menú
Acerca de... ¿Quiénes somos? RSS
Categorías
sistemas (70) desarrollo (128) historias (25) productividad (49) seguridad (10) libros (25) noticias (45) opinión (35) humor (3)
Etiquetas
programación (111) desarrollo de software (79) erlang (75) opinión (37) noticia (36) libros (28) servidores (26) desarrollo web (24) base de datos (24) administración de sistemas (23) php (22) desarrollo ágil (22) empresa (21) otp (20) ruby (19) ingeniería de negocio (18) elixir (18) desarrollo profesional (16) redes (16) seguridad (14)
2022-03-07
10 min sistemas
Michael Stonebraker: El Futuro de las Bases de Datos
[ michael stonebraker ]  [ postgresql ]  [ edb ] 

Me llegó una notificación sobre una conferencia de Michael StoneBraker en el Postgres Build 2021 y teniendo en cuenta su papel como diseñador de una de las bases de datos más empleadas en el mundo, merece la pena oírlo. ¿Lo comentamos?

Para quien no lo sepa, Michael Stonebraker es quien desarrolló la base de datos PostgreSQL e incluso su antecesora, Ingress y otros proyectos posteriores como HBase. Podría decir mucho más pero creo que Camilo Chacón hizo una buena revisión de esta mente genial en su libro de Mentes Geniales el cual recomiendo.

Volviendo al tema central. Comencé a ver la conferencia y me encontré en su primera exposición algo que me llamó la atención:

The Cloud is in Your Future

O dicho en español: La Nube está en Tu Futuro. Esta es una afirmación muy fuerte y va alineada con las apuestas de grandes empresas como Amazon con su AWS, Google con su GCP o Microsoft con Azure. Incluso otros actores no tan conocidos como DigitalOcean, Scaleway o OVH comienzan a invertir en dar soluciones orientadas a la nube.

Tu futuro está en la nube

Stonebraker expone inicialmente un par de frases de otras personas:

Amazon can stand up a server for 25% of your cost.
-- James Hamilton

Esta frase (acuñada a James Hamilton) viene a decir que Amazon puede levantar un servidor por el 25% de su coste. Principalmente por mantener centros de datos "al por mayor" y sus propios centros de datos.

Microsoft Azure data centers are shipping containers.
-- David Dewitt

Aquí David Dewitt nos ilustra como decíamos antes que Microsoft Azure trabaja principalmente con contenedores en lugar de servidores al uso.

A esto agregamos el precio en aumento del suelo en Londres o Frankfurt y podemos inducir un futuro donde será mejor adquirir una porción de la nube de grandes actores en lugar de un servidor en un centro de datos.

Además, apunta que nos cambiaremos a la nube para:

Sobre los contras, hace mención de algunos de ellos como la seguridad, las restricciones geográficas, restricciones legales, restricciones de la compañía donde trabajamos. Todos estos problemas han surgido y se han solucionado ya en el pasado. Aunque Stonbraker no lo menciona, podemos echar un vistazo a plataformas como Microsoft Azure que ha sido certificada para poder dar servicio al gobierno de los EEUU, por ejemplo.

Punto de Inicio

Stonebraker nos posiciona en nuestro punto de vista para migrar a la nube. Nos insta a detectar dos elementos a tener en cuenta: La actividad OLTP (On-line Transaction Processing) con pequeñas transacciones con buen tiempo de respuesta y Almacen de Datos con una base de datos histórica de datos de clientes, cargada y consultada y eliminada meses o años más tarde.

Es importante evitar las características propietarias de los proveedores de la Nube. Redes como las de Oracle proporcionan características no compatibles con otros y mantienen precios más altos que el resto. El problema radica en terminar dependiendo de estas características y no poder migrar a otro proveedor en caso de ser necesario.

La Nube

Stonebraker nos recuerda que AWS tiene muchos tamaños, más de 50, con diferentes combinaciones de CPU, memoria, recursos de E/S. Debemos decidir cuál es el tamaño que mejor se ajusta a nuestros datos pero igualmente, la nube nos proporciona esa elasticidad que nos permite probar y ajustarnos. Podemos almacenar datos en S3, en bloque elásticos de bloques (EBS) o sistemas de ficheros elásticos (EFS).

También podemos decidir entre dos opciones:

Acerca de esta gran variedad de opciones podemos tener claro que todo depende y cambia MUCHO. El precio entre las diferentes opciones cambia incluso la misma opción entre diferentes proveedores cambia y MUCHO y los tiempos de respuesta para cada una de las opciones y entre los diferentes proveedores también cambia MUCHO.

La decepción

Tienes que optimizar el dinero y los diferentes tamaños a los requisitos:

Lo último que quiero es tener que estar probando "tamaños de camisas" y lo que quiero es un optimizador de tamaños y no esperar días para tener una nueva base de datos preparada para funcionar.

PaaS sería la mejor solución, pero es solo la mitad de la historia. Perdemos elasticidad pudiendo necesitar más en momentos como el Black Friday o menos en otros momentos.

Algunas Estrategias

Una forma de tratar el problema es crear una instancia ENORME, ejecutar diferentes elementos dentro de esa instancia y ajustar los recursos necesarios de forma dinámica. No obstante, esta arquitectura puede producir el problema del "vecino ruidoso". Un usuario que emplee en un momento dado demasiados recursos y obstruya el uso de los demás dentro de la misma instancia.

Otra estrategia es separar el almacenamiento arquitecturalmente en una base de consulta a consulta siguiendo el liderazgo de Snowflake creando almacenes de datos y lagos de datos (datalakes) en la nube.

Stonebraker considera buenas ambas opciones e incluso ambas a la vez. E incluso deja entrever la posibilidad de obtener todo dentro de contenedores.

OLTP es muy difícil de adaptar a estos requisitos. Stonebraker nos insta a comenzar primero con Decision Support (DS, o Soporte de Decisión). Mientras que OLTP está ligado a software legado difícil de mover, comenzar con DS es mucho más sencillo.

Almacenes de Datos

Hay bases de datos de filas. Normalmente, la mayoría de las bases de datos que empleamos como MySQL, PostgreSQL, Microsoft SQL Server y demás están basadas y organizadas en filas. Sin embargo, otras bases de datos como Redshift, Presto o Vertica están basadas en columnas. Esta organización las hace mejores para compresión debido a que es más fácil encontrar datos similares dentro de la misma columna.

PostgreSQL tiene opciones para almacenar datos en columnas (Greenplum) pero tiene el problema de que PostgreSQL sigue manejando los datos basados en filas. Sistemas como Vertica, Redshift o Snowflake organizan los almacenes y la ejecución de consultas por columna y esto permite acelerar las consultas entre 3 y 5 veces.

Finalmente, este tipo de sistemas de almacenamiento por columnas permiten una escalabilidad lineal con el número de nodos y es el camino deseable.

Stonebraker nos brinda una receta para la instalación de nuestra base de datos:

  1. Ejecuta un PostgreSQL convencional en un tamaño grande de instancia.
  2. Si es demasiado lento, implementa un esquema en estrella.
  3. Si sigue siendo demasiado lento, cambia a un almacenamiento por columnas.
  4. Si aún es demasiado lento, cambia a un sistema multi-nodo Postgres-compatible.

Algunas Consideraciones

Stonebraker nos da algunas notas adicionales sobre la nube. Si podemos permitirnos tener nuestro sistema caído o no esto implica mantener un sistema de replicación para prevenir caídas. Nos proporciona una alta disponibilidad pero a mayor coste.

También, ¿podemos soportar el incremento de latencia? Mantener las bases de datos en nuestro centro de datos, en máquinas en nuestros centros de datos tiende a generar menos latencias y sobre todo cuando nos conectamos empleando herramientas para realizar consultas directamente sobre estas bases de datos. Si podemos minimizar estas acciones podremos mover nuestros OLTP sin molestarnos excesivamente por estos detalles.

¿Necesitas elasticidad? ¿Puede ahorrarte dinero? Quizás tu aplicación no tiene un impacto en momentos temporales y mantiene un nivel de carga lineal. En este caso la elasticidad no es un factor determinante para tu base de datos.

Al mismo tiempo, tenemos algunas restricciones con respecto a configuraciones de red, por ejemplo en el uso de QoS (Quality of Service, Calidad de Servicio) que suele ser imposible de configurar en un servicio prestado como PaaS o DBaaS.

Estrategias de Rendimiento

Stonebraker nos da algunas guías para intentar mejorar el rendimiento de nuestras bases de datos en la nube. Principalmente, minimizar la interacción de humanos con la base de datos. También otros detalles como:

Como nota a todo lo propuesto por Stonebraker yo agregaría otras optimizaciones a nivel de implementación del código:

Si queremos tener una base de datos de alto rendimiento, no obstante, mucho de lo anterior no basta y debemos realizar algunos cambios materiales en la configuración de la base de datos para:

Conclusiones

Stonebraker concluye con una llamada a la acción:

If you have an OLTP App and you are unhappy with performance, I would like to hear from you: stonebraker@csail.mi.edu

Como puede leerse, Stonebraker abre su contacto para ayudar a todo aquél que tenga una aplicación y no consiga obtener de por sí un rendimiento aceptable con su base de datos. Lo cual es una garantía y un acto muy noble por su parte.

Por mi parte he disfrutado bastante escuchando la charla de Stonebraker y te insto a que le eches un vistazo. Mi resumen puede no ser lo suficientemente preciso por lo que si ves alguna inconsistencia házmela saber.

¿Y tú? ¿Saltaste ya a la nube con todos tus datos? ¿Tu empresa aún mantiene sus centros de datos, bases de datos y toda la infraestructura? ¿Cuál es su excusa? ¡Déjanos un comentario!

Autor
Manuel Rubio
Programación Concurrente & Erlanger