Acerca de las cargas de trabajo altamente paralelas de HPC de Dataflow

Las cargas de trabajo altamente paralelas, también conocidas como cargas de trabajo embarazosamente paralelas, son comunes en las empresas de finanzas, medios de comunicación y ciencias biológicas. Para este tipo de cargas paralelas, las empresas suelen implementar un clúster de nodos de procesamiento. Cada nodo puede realizar tareas de procesamiento independientes, en una configuración denominada computación en red. Para procesar datos de cargas de trabajo paralelas, puedes usar Apache Beam con Dataflow. Para obtener más información sobre Apache Beam, consulta la Guía de programación de Apache Beam.

Usar Dataflow para cargas de trabajo altamente paralelas proporciona muchos beneficios.

Además, Dataflow incluye varias funciones de seguridad:

Estas cargas de trabajo requieren la distribución de datos a funciones que se ejecutan en varios núcleos. Esta distribución suele requerir lecturas de simultaneidad muy alta seguidas de un gran fan-out de datos, absorbidos por sistemas descendentes. Las competencias principales de Dataflow son la distribución de las cargas de trabajo por lotes y de transmisión entre los recursos, y la administración del ajuste de escala automático y el rebalanceo de trabajo dinámico en estos recursos. Por lo tanto, cuando usas Dataflow para tus cargas de trabajo altamente paralelas, las necesidades de rendimiento, escalabilidad, disponibilidad y seguridad se manejan de forma automática.

Incorpora código externo a tu canalización

En la actualidad, Apache Beam tiene SDK integrados para Java, Python y Go. Sin embargo, muchas cargas de trabajo altamente paralelas usan un código escrito en C++. Puedes usar Dataflow y otros servicios de Google Cloud para ejecutar objetos binarios (bibliotecas) de C++ como código externo mediante Apache Beam. Incluir objetos binarios de C++ te permite desbloquear estos tipos de cargas de trabajo mediante servicios completamente administrados. También te permite compilar canalizaciones completas mediante un grafo acíclico dirigido (DAG) sofisticado.

El mismo enfoque para ejecutar objetos binarios de C++ también es relevante en el caso de códigos escritos en otros lenguajes en los que puedes crear un objeto binario independiente.

Canalizaciones altamente paralelas de extremo a extremo

Con Dataflow, puedes realizar el procesamiento de lectura y escritura de E/S, el análisis y el resultado de la tarea en la misma canalización, lo que te permite ejecutar canalizaciones de extremo a extremo de extremo a extremo.

Por ejemplo, una carga de trabajo de HPC altamente paralela puede incorporar los siguientes pasos:

  1. Transfiere datos sin procesar tanto de fuentes internas como externas. Los datos pueden provenir de fuentes no delimitadas o delimitadas. Las fuentes no delimitadas se convierten, en su mayoría, en fuentes delimitadas para adaptarse a las tecnologías que se usan en la granja de tareas.

  2. Procesa de manera previa los datos sin procesar en una forma de datos y una codificación que el componente de granja de tareas puede usar.

  3. Usa un sistema a fin de distribuir los cálculos a los hosts y recuperar los datos de una fuente y, luego, materializa los resultados para el análisis posterior.

  4. Realiza el análisis posterior para convertir los resultados en resultados.

Puedes usar Dataflow para administrar todos estos pasos en una sola canalización y aprovechar las funciones de Dataflow:

  • Debido a que un solo sistema es responsable de todas las etapas, no necesitas un sistema de organización externo para coordinar la ejecución de varias canalizaciones.

  • Con la localidad de datos, no necesitas materializar y desmaterializar de forma explícita entre los límites de la etapa, lo que aumenta la eficiencia.

  • Con una mejor telemetría en el sistema, la información sobre el total de bytes en etapa está disponible, lo que ayuda a diseñar etapas posteriores.

  • Con el ajuste de escala automático, cuando los datos están en el sistema, los recursos se escalan según los volúmenes de datos a medida que los datos se mueven a través de las etapas de la canalización.

La canalización principal de HPC de Dataflow usa motores de ejecución de DAG modernos. Todos los procesos de canalización típicos se pueden completar en un solo DAG y, por lo tanto, en una sola canalización de Dataflow. Puedes usar un DAG que genera Apache Beam para definir la forma de la canalización.

Si migras de un sistema de granja de tareas a un flujo de trabajo altamente paralelo, debes cambiar de tareas a datos. Una PTransform contiene un DoFn, que tiene una función de proceso que recibe un elemento de datos. Los datos pueden ser cualquier objeto con una o más propiedades.

Si usas un DAG y una sola canalización, puedes cargar todos los datos dentro del sistema durante todo el flujo de trabajo. No necesitas enviar datos a bases de datos o almacenamiento.

Componentes de Google Cloud usados con flujos de trabajo altamente paralelos

Las aplicaciones de computación en red requieren que se distribuyan los datos a funciones que se ejecutan en varios núcleos. Este patrón suele requerir lecturas de alta simultaneidad y suele estar seguido por un fan-out de datos absorbidos por sistemas descendentes.

Dataflow está integrado en otros servicios administrados de Google Cloud que pueden absorber E/S de datos paralelizadas a gran escala:

  • Pub/Sub: Almacenamiento de columnas anchas para almacenamiento en caché y entrega
  • Bigtable: servicio de transferencia de transmisión de eventos global
  • Cloud Storage: depósito de objetos unificados
  • BigQuery: servicio de almacén de datos a escala de petabytes

En conjunto, estos servicios proporcionan una solución convincente para cargas de trabajo altamente paralelas.

La arquitectura común para cargas de trabajo altamente paralelas que se ejecutan en Google Cloud incluye lo siguiente:

  • El ejecutor de Dataflow para Apache Beam. Este ejecutor distribuye el trabajo a los nodos de la red con un flujo de procesamiento derivado de un DAG. Con un solo DAG de Apache Beam, puedes definir canalizaciones de varias etapas complejas en las que las etapas canalizadas paralelas pueden volver a unirse mediante entradas complementarias o uniones.

  • Cloud Storage. Este servicio proporciona una ubicación para habilitar a etapa los objetos binarios de C++. Cuando se deben almacenar archivos grandes, como en muchos casos de uso de multimedia, también se ubican en Cloud Storage.

  • Bigtable, BigQuery y Pub/Sub. Estos servicios se usan como fuentes y como receptores.

En el siguiente diagrama, se describe la arquitectura de alto nivel para un flujo de trabajo de ejemplo.

Arquitectura de una solución de computación en red

También puedes usar otros sistemas de almacenamiento. Para obtener más información, consulta la lista de sistemas de almacenamiento y fuentes de transmisión en la página de E/S de canalización de la documentación de Apache Beam.

Ejecutor de Dataflow para Apache Beam

Usa Dataflow para transformar y enriquecer los datos en modo de transmisión y por lotes. Dataflow se basa en Apache Beam.

Cloud Storage

Cloud Storage es un almacenamiento unificado de objetos que incluye entrega de datos en vivo, estadísticas de datos, aprendizaje automático (AA) y archivo de datos. Para cargas de trabajo altamente paralelas con Dataflow, Cloud Storage proporciona acceso a objetos binarios de C++. En algunos casos prácticos, Cloud Storage también proporciona la ubicación para los datos que se necesitan en la fase de procesamiento.

Para trabajar con las cargas con picos de actividad elevados requeridas por la computación en red, necesitas entender las características de rendimiento de Cloud Storage. Para obtener más información acerca del rendimiento de entrega de datos de Cloud Storage, consulta Lineamientos sobre porcentajes de solicitudes y distribución del acceso en la documentación de Cloud Storage.

Bigtable

Bigtable es un servicio de base de datos NoSQL de alto rendimiento optimizado para cargas de trabajo de análisis y de operaciones de gran tamaño. Bigtable complementa Dataflow. Las características principales de Bigtable, operaciones de lectura y escritura de baja latencia (6 ms en el percentil 90), te permiten manejar miles de clientes simultáneos y cargas de trabajo con picos de actividad elevados. Estas características hacen que Bigtable sea ideal como receptor y como fuente de datos dentro de la función DoFn en la fase de procesamiento de Dataflow.

BigQuery

BigQuery es un almacén de datos rápido, económico y completamente administrado para las estadísticas de datos a gran escala. Los resultados de red suelen usarse para el análisis, y te permiten ejecutar agregaciones de gran escala en los datos de la red.

Pub/Sub

Pub/Sub es un servicio de mensajería asíncrona y escalable que separa los servicios que producen mensajes de aquellos que procesan esos mensajes. Puedes usar Pub/Sub para canalizaciones de integración de datos y análisis de transmisiones a fin de transferir y distribuir datos. Es igual de efectivo que el middleware orientado a la mensajería para la integración de servicios o como una cola con el fin de paralelizar las tareas.

DAG de Dataflow

El SDK de Apache Beam te permite compilar DAG expresivos, lo que, a su vez, te permite crear canalizaciones en etapas múltiples por transmisión o por lotes. El ejecutor controla el traslado de los datos y los expresa como objetos PCollection, que son colecciones de elementos paralelos inmutables.

En el diagrama siguiente, se ilustra este flujo:

Flujo que usa DAG

El SDK de Apache Beam te permite definir un DAG. En el DAG, puedes incluir el código definido por el usuario como funciones. En general, se usa el mismo lenguaje de programación (Java, Python o Go) para la declaración del DAG y para el código definido por el usuario. También puedes usar un código no integrado, como C++, para el código definido por el usuario.

¿Qué sigue?

  • Obtén más información sobre las prácticas recomendadas para trabajar con canalizaciones altamente paralelas de HPC de Dataflow.

  • Sigue el instructivo para crear una canalización que use contenedores personalizados con bibliotecas de C++.