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.

Varios factores pueden tener un gran impacto en el costo del trabajo:

  • Configuración del tiempo 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 del trabajo 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 podría ser más alto.
  • Si tu canalización de transmisión tiene picos de datos que deben procesarse, es posible que la canalización 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 Facturación de Cloud te permite exportar datos de facturación detallados Google Cloud automáticamente durante el día a un conjunto de datos de BigQuery. Los datos de facturación incluyen datos de uso, estimaciones de costos y 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, luego, 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 grafo de trabajos y detalles de ejecución para cada canalización. Ambas herramientas pueden ayudarte a comprender tu canalización y a identificar etapas lentas, etapas atascadas o pasos con demasiado tiempo de reloj.
  • Usa el Explorador de métricas para ver métricas detalladas de los trabajos de Dataflow. Puedes usar métricas personalizadas para capturar datos de rendimiento. La métrica Distribution es particularmente útil para recopilar datos de rendimiento.
  • Para las canalizaciones que requieren un uso intensivo de la 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. Al mostrar las entradas y salidas reales en un trabajo en ejecución o completado, esta información puede ayudarte a depurar problemas de la canalización.
  • Personaliza el panel de supervisión del proyecto para mostrar trabajos potencialmente costosos. Para obtener más información, consulta Personaliza el panel de supervisión de Dataflow.

No se recomienda registrar métricas de procesamiento por elemento en 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 tiempo de ejecución

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

  • Si ejecutas 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 ajuste de escala automático
  • La cantidad inicial de trabajadores 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 tu trabajo.
  • 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 pueden mejorar la eficiencia de los costos.

  • Ejecuta tu trabajo con el tipo de máquina más pequeño requerido. 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 requieren un uso intensivo de la CPU a veces se benefician de cambiar el tipo de máquina del valor predeterminado. Para obtener más información, consulta Tipo de máquina.
  • Para las cargas de trabajo que requieren un uso intensivo de la memoria o del procesamiento, usa los 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 se escala verticalmente, el trabajo debe redistribuirse a las VMs nuevas. Si sabes cuántos trabajadores necesitan tus trabajos, puedes evitar este costo si estableces 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 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 para pasos de canalización específicos.
  • Algunas canalizaciones se benefician del uso de GPU. Para obtener más información, consulta GPU con Dataflow. Si usas el ajuste adecuado, 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 desde tus VMs de trabajador, en especial cuando necesitas acceder a datos locales.

Optimiza la configuración para trabajos por lotes

En esta sección, se proporcionan sugerencias para optimizar la configuración del tiempo de ejecución para trabajos por lotes. Para 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 sensible al tiempo, 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 VMs 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. Si usas una combinación de VMs interrumpibles y estándar, FlexRS ayuda a garantizar que tu canalización avance 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 VMs de trabajador genera un costo, por lo que ejecutar menos trabajos en 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 ajuste de escala automático

De forma predeterminada, los trabajos por lotes usan el ajuste de escala automático. Para algunos trabajos, como los de ejecución corta, no es necesario 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 ajuste de escala de subprocesos dinámico para permitir que Dataflow ajuste el recuento de subprocesos en función del uso de la CPU. Como alternativa, si conoces la cantidad óptima de subprocesos para el trabajo, establece de forma explícita la cantidad de subprocesos por trabajador mediante 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 exceden un tiempo de ejecución predeterminado. Si sabes aproximadamente cuánto tiempo tarda en ejecutarse tu trabajo, usa la max_workflow_runtime_walltime_seconds opción de servicio para detener automáticamente el trabajo si se ejecuta más de lo esperado.

Optimiza la configuración para trabajos de transmisión

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

Usa Streaming Engine

Streaming Engine traslada la ejecución de la canalización de las VMs de trabajador al backend del servicio de Dataflow para 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 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 significativamente el costo de tu trabajo. Antes de habilitar el modo “al menos una vez”, evalúa si tu canalización requiere el procesamiento “exactamente una vez” de registros. 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 inversión en la capacidad de procesamiento de Dataflow para trabajos de transmisión implica un mínimo predecible que puedes comprometerte por al menos un año. Si usas CUD, 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 ajuste de escala automático

Usa sugerencias de ajuste de escala automático para ajustar la configuración del ajuste de escala automático. Para obtener más información, consulta Ajusta el ajuste de escala automático horizontal para 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 mediante 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, incluida la forma en que 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 una 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:

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 la modificación de transformaciones personalizadas que requieren un uso intensivo de la CPU, se pueden probar de forma local sin necesidad de ejecutar un trabajo en Dataflow.

Prueba canalizaciones a gran escala con datos de prueba realistas para tu carga de trabajo, incluida la cantidad total de elementos para canalizaciones por lotes, la cantidad de elementos por segundo para 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 un backlog grande para simular una recuperación ante fallas.

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

¿Qué sigue?