Prácticas recomendadas para la optimización de costos de Dataflow

En este documento, se explican las prácticas recomendadas para optimizar tus trabajos de Dataflow con el objetivo de minimizar los costos. Se explican los factores que afectan los costos y se proporcionan técnicas para supervisar y administrar esos costos.

Para obtener más información sobre cómo se calculan los costos de los trabajos de Dataflow, consulta Precios de Dataflow.

Existen varios factores que pueden tener un gran impacto en el costo del trabajo:

  • Configuración del entorno de ejecución
  • Rendimiento de la canalización
  • Requisitos de capacidad de procesamiento de la canalización

En las siguientes secciones, se proporcionan detalles sobre cómo supervisar tus trabajos, los factores que afectan el costo de los trabajos y sugerencias para mejorar la eficiencia de la canalización.

Define SLOs

Antes de comenzar a optimizar, define los objetivos de nivel de servicio (SLO) de tu canalización, en especial para la capacidad de procesamiento y la latencia. Estos requisitos te ayudarán a razonar sobre las compensaciones entre el costo y otros factores.

  • Si tu canalización requiere una latencia de transferencia de extremo a extremo baja, los costos de la canalización podrían ser más altos.
  • Si necesitas procesar datos que llegan tarde, el costo general de la canalización puede ser más alto.
  • Si tu canalización de transmisión tiene aumentos repentinos de datos que deben procesarse, es posible que necesite capacidad adicional, lo que puede aumentar los costos.

Supervisa trabajos

Para determinar cómo optimizar tu trabajo, primero debes comprender su comportamiento. Usa las herramientas de supervisión de Dataflow para observar tu canalización mientras se ejecuta. Luego, usa esta información para mejorar el rendimiento y la eficiencia.

Supervisión de costos

Usa las siguientes técnicas para predecir y supervisar los costos.

  • Antes de ejecutar la canalización en producción, ejecuta uno o más trabajos más pequeños en un subconjunto de tus datos. Para muchas canalizaciones, esta técnica puede proporcionar una estimación de costos.
  • Usa la página Costo en la interfaz de supervisión de Dataflow para supervisar el costo estimado de tus trabajos. Es posible que el costo estimado no refleje el costo real del trabajo por varios motivos, como descuentos contractuales, pero puede proporcionar un buen punto de partida para la optimización de costos. Para obtener más información, consulta Supervisión de costos.
  • Exporta datos de Facturación de Cloud a BigQuery y realiza un análisis de costos en las tablas de exportación de facturación. La exportación de la Facturación de Cloud te permite exportar datos de facturación de Google Cloud detallados de forma automática durante todo el día a un conjunto de datos de BigQuery. Los datos de facturación incluyen el uso, las estimaciones de costos y los datos de precios.
  • Para evitar costos inesperados, crea alertas de supervisión cuando tu trabajo de Dataflow supere un umbral que definas. Para obtener más información, consulta Usa Cloud Monitoring para las canalizaciones de Dataflow.

Supervisión de trabajos

Supervisa tus trabajos y, además, identifica las áreas en las que podrías mejorar la eficiencia de la canalización.

  • Usa la interfaz de supervisión de trabajos de Dataflow para identificar problemas en tus canalizaciones. La interfaz de supervisión muestra un gráfico de trabajo y detalles de ejecución para cada canalización. Ambas herramientas pueden ayudarte a comprender tu canalización y a identificar etapas lentas, etapas bloqueadas o pasos con demasiado tiempo de ejecución.
  • Usa el Explorador de métricas para ver las métricas detalladas de los trabajos de Dataflow. Puedes usar métricas personalizadas para capturar datos de rendimiento. La métrica Distribution es especialmente útil para recopilar datos de rendimiento.
  • En el caso de las canalizaciones con uso intensivo de CPU, usa Cloud Profiler para identificar las partes del código de la canalización que consumen más recursos.
  • Usa el muestreo de datos para identificar problemas con tus datos. El muestreo de datos te permite observar los datos en cada paso de una canalización de Dataflow. Esta información puede ayudarte a depurar problemas de la canalización, ya que muestra las entradas y salidas reales en un trabajo en ejecución o completado.
  • Personaliza el panel de supervisión del proyecto para mostrar los trabajos que podrían ser costosos. Para obtener más información, consulta Personaliza el panel de supervisión de Dataflow.

No se recomienda registrar las métricas de procesamiento por elemento en las canalizaciones de gran volumen, ya que el registro está sujeto a límites y el registro excesivo puede degradar el rendimiento del trabajo.

Optimiza la configuración del entorno de ejecución

Los siguientes parámetros de configuración del entorno de ejecución pueden afectar el costo:

  • Ya sea que ejecutes un trabajo de transmisión o un trabajo por lotes
  • Qué servicio usas para ejecutar el trabajo, como Streaming Engine o FlexRS
  • El tipo de máquina, el tamaño del disco y la cantidad de GPU en las VMs de trabajador
  • El modo de escalado automático
  • La cantidad inicial y la cantidad máxima de trabajadores
  • El modo de transmisión (modo exactamente una vez o modo al menos una vez)

En esta sección, se describen los posibles cambios que puedes realizar para optimizar tu trabajo. Para determinar si estas sugerencias son adecuadas para tu carga de trabajo, considera el diseño y los requisitos de tu canalización. No todas las sugerencias son adecuadas o útiles para todas las canalizaciones.

Antes de realizar cambios a gran escala, prueba los cambios en canalizaciones pequeñas que usen un subconjunto de tus datos. Para obtener más información, consulta Ejecuta experimentos pequeños para trabajos grandes en "Prácticas recomendadas para canalizaciones de lotes grandes".

Ubicación del trabajo

La mayoría de los trabajos de Dataflow interactúan con otros servicios, como almacenes de datos y sistemas de mensajería. Considera dónde se encuentran.

  • Ejecuta tu trabajo en la misma región que los recursos que usa.
  • Crea tu bucket de Cloud Storage para almacenar archivos de trabajo temporales y de etapa de pruebas en la misma región que tu trabajo. Para obtener más información, consulta las opciones de canalización gcpTempLocation y temp_location.

Ajusta los tipos de máquinas

Los siguientes ajustes en las VMs de trabajador podrían mejorar la rentabilidad.

  • Ejecuta tu trabajo con el tipo de máquina más pequeño que se requiera. Ajusta el tipo de máquina según sea necesario en función de los requisitos de la canalización. Por ejemplo, los trabajos de transmisión con canalizaciones que consumen mucha CPU a veces se benefician de cambiar el tipo de máquina predeterminado. Para obtener más información, consulta Tipo de máquina.
  • Para cargas de trabajo que requieren mucha memoria o procesamiento, usa tipos de máquinas adecuados. Para obtener más información, consulta Puntuaciones de CoreMark de VMs por familia.
  • Establece la cantidad inicial de trabajadores. Cuando un trabajo escala verticalmente, el trabajo se debe redistribuir a las VMs nuevas. Si sabes cuántos trabajadores necesitan tus trabajos, puedes evitar este costo configurando la cantidad inicial de trabajadores. Para establecer la cantidad inicial de trabajadores, usa la opción de canalización numWorkers o num_workers.
  • Establece la cantidad máxima de trabajadores. Si estableces un valor para este parámetro, puedes limitar el costo total de tu trabajo. Cuando pruebes la canalización por primera vez, comienza con un máximo relativamente bajo. Luego, aumenta el valor hasta que sea lo suficientemente alto como para ejecutar una carga de trabajo de producción. Considera los SLO de tu canalización antes de establecer un máximo. Para obtener más información, consulta Ajuste de escala automático horizontal.
  • Usa el ajuste adecuado para personalizar los requisitos de recursos de pasos específicos de la canalización.
  • Algunas canalizaciones se benefician del uso de GPU. Para obtener más información, consulta GPU con Dataflow. Con el ajuste correcto, puedes configurar las GPU para pasos específicos de la canalización.
  • Asegúrate de tener suficiente ancho de banda de red para acceder a los datos de tus VMs de trabajador, en especial cuando necesites acceder a datos locales.

Optimiza la configuración de los trabajos por lotes

En esta sección, se proporcionan sugerencias para optimizar la configuración del entorno de ejecución de los trabajos por lotes. En el caso de los trabajos por lotes, las etapas del trabajo se ejecutan de forma secuencial, lo que puede afectar el rendimiento y el costo.

Usa la programación flexible de recursos

Si tu trabajo por lotes no es urgente, considera usar la programación flexible de recursos (FlexRS). FlexRS reduce los costos de procesamiento por lotes, ya que encuentra el mejor momento para iniciar el trabajo y, luego, usa una combinación de instancias de VM interrumpibles y VMs estándar. Las VMs interrumpibles están disponibles a un precio mucho más bajo en comparación con las VMs estándar, lo que puede reducir el costo total. Con una combinación de VMs interrumpibles y estándar, FlexRS ayuda a garantizar que tu canalización progrese, incluso si Compute Engine interrumpe las VMs interrumpibles.

Evita ejecutar trabajos muy pequeños

Cuando sea posible, evita ejecutar trabajos que procesen cantidades muy pequeñas de datos. Si es posible, ejecuta menos trabajos en conjuntos de datos más grandes. Iniciar y detener las VMs de trabajador genera un costo, por lo que ejecutar menos trabajos con más datos puede mejorar la eficiencia.

Asegúrate de que Dataflow Shuffle esté habilitado. Los trabajos por lotes usan Dataflow Shuffle de forma predeterminada.

Ajusta la configuración del escalado automático

De forma predeterminada, los trabajos por lotes usan el ajuste de escala automático. Para algunos trabajos, como los de corta duración, no se necesita el ajuste de escala automático. Si crees que tu canalización no se beneficia del ajuste de escala automático, desactívalo. Para obtener más información, consulta Ajuste de escala automático horizontal.

También puedes usar el escalamiento dinámico de subprocesos para permitir que Dataflow ajuste el recuento de subprocesos según el uso de CPU. Como alternativa, si conoces la cantidad óptima de subprocesos para el trabajo, establece de forma explícita la cantidad de subprocesos por trabajador con la opción de canalización numberOfWorkerHarnessThreads o number_of_worker_harness_threads.

Detén los trabajos de larga duración

Configura tus trabajos para que se detengan automáticamente si superan un tiempo de ejecución predeterminado. Si sabes aproximadamente cuánto tiempo tarda en ejecutarse tu trabajo, usa la opción de servicio max_workflow_runtime_walltime_seconds para detenerlo automáticamente si se ejecuta durante más tiempo del esperado.

Optimiza la configuración de los trabajos de transmisión

En esta sección, se proporcionan sugerencias para optimizar la configuración del entorno de ejecución de los trabajos de transmisión.

Usa Streaming Engine

Streaming Engine traslada la ejecución de la canalización desde las VMs de trabajador hacia el backend del servicio de Dataflow para obtener una mayor eficiencia. Se recomienda usar Streaming Engine para tus trabajos de transmisión.

Considera el modo al menos una vez

Dataflow admite dos modos para los trabajos de transmisión: el modo exactamente una vez y el modo al menos una vez. Si tu carga de trabajo puede tolerar registros duplicados, el modo al menos una vez puede reducir de forma significativa el costo de tu trabajo. Antes de habilitar el modo al menos una vez, evalúa si tu canalización requiere el procesamiento de registros exactamente una vez. Para obtener más información, consulta Configura el modo de transmisión de la canalización.

Elige tu modelo de precios

Los descuentos por compromiso de uso (CUD) para los trabajos de transmisión de Dataflow proporcionan precios con descuento a cambio de tu compromiso de usar de forma continua una cierta cantidad de recursos de procesamiento de Dataflow durante un año o más. Los CUD de Dataflow son útiles cuando tu gasto en la capacidad de procesamiento de Dataflow para trabajos de transmisión implica un mínimo predecible con el que puedes comprometerte por al menos un año. Si usas CUDs, puedes reducir el costo de tus trabajos de Dataflow.

También considera usar la facturación basada en recursos. Con la facturación basada en recursos, los recursos de Streaming Engine que consume tu trabajo se miden en unidades de procesamiento de Streaming Engine. Se te factura por la CPU de los trabajadores, la memoria de los trabajadores y las unidades de procesamiento de Streaming Engine.

Ajusta la configuración del escalado automático

Usa sugerencias de ajuste de escala automático y niveles de latencia para ajustar la configuración de ajuste de escala automático. Para obtener más información, consulta Ajusta el escalado automático horizontal para las canalizaciones de transmisión. Para los trabajos de transmisión que usan Streaming Engine, puedes actualizar la configuración de ajuste automático sin detener ni reemplazar el trabajo. Para obtener más información, consulta Actualización de la opción de trabajo en tránsito.

Si crees que tu canalización no se beneficia del ajuste de escala automático, desactívalo. Para obtener más información, consulta Ajuste de escala automático horizontal.

Si conoces la cantidad óptima de subprocesos para el trabajo, establece de forma explícita la cantidad de subprocesos por trabajador con la opción de canalización numberOfWorkerHarnessThreads o number_of_worker_harness_threads.

Detén los trabajos de larga duración

En el caso de los trabajos de transmisión, Dataflow vuelve a intentar los elementos con errores de forma indefinida. El trabajo no se finalizó. Sin embargo, el trabajo podría detenerse hasta que se resuelva el problema. Crea políticas de supervisión para detectar signos de una canalización detenida, como un aumento de la latencia del sistema y una disminución de la actualidad de los datos. Implementa el registro de errores en el código de la canalización para ayudar a identificar los elementos de trabajo que fallan en repetidas ocasiones.

Rendimiento de la canalización

Las canalizaciones que se ejecutan más rápido pueden costar menos. Los siguientes factores pueden afectar el rendimiento de la canalización:

  • El paralelismo disponible para tu trabajo
  • La eficiencia de las transformaciones, los conectores de E/S y los codificadores que se usan en la canalización
  • La ubicación de los datos

El primer paso para mejorar el rendimiento de la canalización es comprender el modelo de procesamiento:

  • Obtén información sobre el modelo de Apache Beam y el modelo de ejecución de Apache Beam.
  • Obtén más información sobre el ciclo de vida de la canalización, incluido cómo Dataflow administra la paralelización y las estrategias de optimización que usa. Los trabajos de Dataflow usan varias VMs de trabajador, y cada trabajador ejecuta varios subprocesos. Los paquetes de elementos de un PCollection se distribuyen a cada subproceso de trabajador.

Usa estas prácticas recomendadas cuando escribas el código de tu canalización:

Logging

Sigue estas prácticas recomendadas cuando registres datos:

Pruebas

Probar tu canalización tiene muchos beneficios, como ayudar con las actualizaciones del SDK, la refactorización de la canalización y las revisiones de código. Muchas optimizaciones, como volver a trabajar en transformaciones personalizadas con uso intensivo de CPU, se pueden probar de forma local sin necesidad de ejecutar un trabajo en Dataflow.

Prueba las canalizaciones a gran escala con datos de prueba realistas para tu carga de trabajo, incluido el número total de elementos para las canalizaciones por lotes, la cantidad de elementos por segundo para las canalizaciones de transmisión, el tamaño del elemento y la cantidad de claves. Prueba tus canalizaciones en dos modos: en un estado estable y procesando una gran cantidad de tareas pendientes para simular una recuperación de fallas.

Para obtener más información sobre cómo crear pruebas de unidades, de integración y de extremo a extremo, consulta Prueba tu canalización. Para ver ejemplos de pruebas, consulta el repositorio de GitHub de dataflow-ordered-processing.

¿Qué sigue?