A medida que el volumen de datos que generamos crece y crece necesitamos sistemas con mayor capacidad donde almacenarlos y hacerlos disponibles para su uso en nuestros procesos operativos o para intentar obtener conocimiento que podamos activar de manera agil en nuestras estrategias. Pero almacenarlos para tenerlos disponibles no es suficiente, la velocidad con la que lo hacemos se ha convertido en un factor crítico. El nuevo paradigma es el tiempo real, tan pronto como se genera el dato lo queremos procesado, disponible y operativo.
Las soluciones en la nube se han convertido en la solución de facto para resolver esta compleja ecuación y BigQuery es la solución que Google pone a nuestra disposición dentro de un ecosistema de soluciones de su plataforma en la nube que gestionan todo el pipeline de gestión de los datos desde su ingesta al almacenamiento, procesado y exploración de los datos.
La nube de Google es lo que se denomina una nube pública, un modelo de nube en el que la infraestructura y los servicios son administrados por un proveedor externo y se comparten por múltiples organizaciones o instancias a través de la Internet pública. Por este motivo se conoce como infraestructuras multi-instancia (multi-tenant). Multi-tenant en inglés podría traducirse como multi-inquilino que nos ofrece una metáfora visual muy práctica para entender este concepto de instancia. Digamos que hablamos de un edificio gestionado por un mismo dueño (la infraestructura) donde todos los inquilinos cuentan con una serie de servicios esenciales (los servicios) y que cada vecino paga al propietario del edificio según el tamaño del piso que ocupa y por los servicios que utiliza. Cada inquilino tiene su propio espacio que, aunque comparta una estructura común (el edificio) es independiente y está aislado del de los demás vecinos.
Cada inquilino no tiene que preocuparse por el mantenimiento del edificio, ni por el de su propio espacio, de todo eso se encarga el propietario del edificio. Si el inquilino organiza una fiesta y puntualmente necesita más servicios es el propietario el que se encarga de dárselo bajo demanda y el inquilino pagará sólo por lo que haya utilizado. Este es precisamente el motivo por el que en el mundo del cloud computing se refiere a este tipo de servicios como IAAS o Infrastructure As A Service.
La infraestructura de nube de Google Cloud está dividida en distintas áreas geográficas y cada una está compuesta de diferentes Regiones (38 en el momento de escribir este artículo) y Zonas (118). Los entornos de cada área están aislados y dentro de una misma zona
Áreas Geográficas de Google Cloud
Si bajamos a nivel de Europa encontramos las siguientes Regiones
Y si miramos en la Región de Madrid vemos que tiene 3 Zonas diferentes
Los componentes de la Infraestructura
Se suele hablar de que BigQuery es un tipo de arquitectura sin servidores (serverless) lo que puede resultar confuso porque en realidad a lo que se refiere es a que nosotros, como clientes, no necesitamos preocuparnos de ningún aspecto de la gestión y el mantenimiento de la infraestructura que hay por detrás, infraestructura en la que desde luego hay servidores.
En una plataforma en nube consumimos los recursos que necesitamos sin tener que dedicar ni un segundo a pensar en cuántas máquinas, físicas o virtuales, centros de datos o ancho de banda son necesarios para nuestras operaciones. La infraestructura está gestionada enteramente por Google que la optimiza para poder ofrecer ese nivel de escalabilidad que acabo de mencionar. Pero ¿cómo es capaz Google de conseguirlo? veamos algunos de los elementos fundamentales de este tipo de arquitectura.
Clusters, Nodos y Slots

En una arquitectura en nube una figura fundamental son los clústeres. Un Clúster se refiere a un grupo de máquinas o servidores que trabajan juntos como una unidad para ejecutar aplicaciones, procesar datos o realizar tareas específicas. Los clústeres desempeñan un papel fundamental al proporcionar escalabilidad, disponibilidad y una administración eficiente de los recursos.
Los clústeres nos permiten agregar o quitar recursos de manera dinámica según nuestras necesidades, lo que significa que podemos aumentar la capacidad de cómputo para manejar cargas de trabajo más pesadas y reducirla después a demanda si nuestras necesidades cambian.
Los clústeres están compuestos de nodos que son las máquinas individuales que forman parte del clúster. Estas máquinas pueden ser tanto físicas como virtuales. Una máquina virtual (VM) es una versión digital de una máquina física que puede realizar las mismas operaciones que ésta. Se pueden alojar varias máquinas virtuales en una sola máquina física, en muchas ocasiones un servidor, y distribuir los recursos de procesamiento entre varias de estas máquinas virtuales haciendo que el propio servidor sea así más eficiente en la gestión y procesamiento de los datos.
Hay un tipo de nodo especiales que se denominan los nodos trabajadores (workers en inglés) que son las máquina, reales o virtuales, que realizan el trabajo real en el clúster. Estos nodos son responsables de ejecutar aplicaciones, procesar datos y realizar tareas específicas según las necesidades del clúster.
Otra pieza de este ecosistema son los slots que representan la capacidad física de procesamiento que se asigna para ejecutar una tarea en BigQuery. Cada slot es una unidad de procesamiento que está dotada de CPU, RAM y capacidad de red a la que se asignará a una tarea trabajando con otros slots en paralelo dentro de una estrategia de divide y vencerás, una de las claves de los modelo distribuidos.
Cuanto mayor sea el número de slots que trabajen en paralelo para una determinada tarea menor será el tiempo necesario para ejecutarla. La gestión de slots es dinámica y se establece dentro de los limites de lo que tengamos contratado y acorde a los cálculos que hace BigQuery de cuál es el factor de paralelización (número de slots que deben trabajar en paralelo) óptimo para realizar la tarea.
El número de slots que tendremos contratado siempre estará limitado así que si tenemos toda nuestra capacidad de procesamiento ocupada (todos los slots disponibles) y entran tareas nuevas en BigQuery éstas se ponen en cola y a medida que se va liberando capacidad (terminan otras tareas) irán entrando las nuevas tareas.
En este ejemplo se muestra un trabajo que demanda 2000 slots pero solo tenemos 1000 disponibles. BigQuery consume los 1.000 disponibles y encola el resto. A medida que va liberando slots va introduciendo las tareas encoladas.

Por último tenemos los trabajos o jobs que hacen referencia a una unidad de trabajo que se envía para ejecutarse en uno o más nodos del clúster. Los jobs representan tareas o trabajos específicos que se van a realizar en un entorno distribuido (más sobre esto un poco más adelante) Un job puede ser cualquier tipo de trabajo como la ejecución de un programa, el procesamiento de un conjunto de datos, la generación de informes, el análisis de esos datos, etc. Para cada job se especifican los recursos necesarios para su ejecución.
La arquitectura de BigQuery ha sido diseñada para separar el almacenamiento y el procesado, y este es uno de los principales motivos que le permite ser un sistema tan extremadamente escalable. En el siguiente capítulo hablaremos del almacenamiento en BigQuery.
- Imagen Cluster by MEGWARE Computer GmbH – CC BY-SA 3.0
- Foto de Ján Jakub Naništa en Unsplash