En este documento, se explican las prácticas recomendadas para optimizar tus trabajos de Dataflow con el objetivo de minimizar los costos. En él, 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 las tareas de Dataflow, consulta Precios de Dataflow.
Varios factores 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 las sugerencias para mejorar la eficiencia de la canalización.
Define SLOs
Antes de comenzar a realizar optimizaciones, 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 reflexionar 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 pueden 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 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 a medida que 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 canalización, 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 modelo de referencia 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 Google Cloud detallados 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 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 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, atascadas 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 particularmente útil para recopilar datos de rendimiento. - Para las canalizaciones intensivas en 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. 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.
No se recomienda registrar las métricas de procesamiento por elemento en canalizaciones de alto volumen, ya que el registro está sujeto a límites y el registro excesivo puede degradar el rendimiento de la tarea.
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:
- Si ejecutas un trabajo por lotes o de transmisión
- 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 GPUs en las VMs de trabajo
- El modo de ajuste de escala automático
- La cantidad inicial y 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, ten en cuenta el diseño y los requisitos de tu canalización. No todas las sugerencias son apropiadas ni útiles para todas las canalización.
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 empleo
La mayoría de los trabajos de Dataflow interactúan con otros servicios, como los almacenes de datos y los 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
ytemp_location
.
Ajusta los tipos de máquinas
Los siguientes ajustes en las VMs de trabajo podrían mejorar la rentabilidad.
- 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 intensivas en la CPU a veces se benefician de cambiar el tipo de máquina del predeterminado. Para obtener más información, consulta Tipo de máquina.
- Para cargas de trabajo de procesamiento intensivo o de memoria intensiva, 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 se escala un trabajo, el trabajo se debe redistribuir a las VMs nuevas. Si sabes cuántos trabajadores necesitan tus trabajos, puedes evitar este costo si configuras la cantidad inicial de trabajadores. Para establecer la cantidad inicial de trabajadores, usa la opción de canalización
numWorkers
onum_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. Ten en cuenta 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.
- Algunas canalizaciones se benefician del uso de GPUs. Para obtener más información, consulta GPU con Dataflow.
- Asegúrate de tener suficiente ancho de banda de red para acceder a los datos desde tus VMs de trabajo, 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 las tareas por lotes. En el caso de los trabajos por lotes, las etapas 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 encontrando el mejor momento para iniciar el trabajo y, luego, usando 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. Mediante el uso de una combinación de VMs interrumpibles y estándares, 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 tareas que procesen cantidades muy pequeñas de datos. Si es posible, ejecuta menos trabajos en conjuntos de datos más grandes. El inicio y la detención de las VMs de trabajo 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.
Cómo ajustar 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 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 la CPU.
Como alternativa, si conoces la cantidad óptima de subprocesos para la tarea, 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
Establece que tus trabajos se detengan automáticamente si superan un tiempo de ejecución predeterminado. Si
conoces 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 más tiempo de lo 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 las tareas 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 lograr 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 procesamiento exactamente una vez de los 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 trabajos de transmisión de Dataflow proporcionan precios con descuento a cambio de tu compromiso de usar de forma continua una cantidad determinada de recursos de procesamiento de Dataflow durante un año o más. Los CUDs de Dataflow son útiles cuando tu gasto 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 CUDs, puedes reducir potencialmente el costo de tus trabajos de Dataflow.
También puedes 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.
Cómo ajustar la configuración del ajuste de escala automático
Usa las sugerencias de ajuste de escala automático para ajustar la configuración. 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 la tarea, 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.
- Para supervisar los errores de la canalización, consulta Recuento de registros de error de los trabajadores.
- Para solucionar problemas, consulta Soluciona problemas de Dataflow.
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. Las tareas de Dataflow usan varias VM de trabajador, y cada trabajador ejecuta varios subprocesos. Los paquetes de elementos de un
PCollection
se distribuyen a cada subproceso de trabajo.
Sigue estas prácticas recomendadas cuando escribas el código de tu canalización:
- Cuando sea posible, usa la versión más reciente del SDK de Apache Beam compatible. Consulta las notas de la versión para comprender los cambios en las diferentes versiones.
- Sigue las prácticas recomendadas para escribir código de canalización.
- Sigue las prácticas recomendadas para el conector de E/S.
- Para las canalizaciones de Python, considera usar contenedores personalizados. Las dependencias de empaquetado previo disminuyen el tiempo de inicio de los trabajadores.
Logging
Sigue estas prácticas recomendadas cuando accedas:
- El registro excesivo puede afectar el rendimiento.
- Para reducir el volumen de registros, considera cambiar el nivel de registro de la canalización. Para obtener más información, consulta Cómo controlar el volumen de registro.
- No registres elementos individuales. En su lugar, habilita el muestreo de datos.
- Usa un patrón de mensaje sin entregar para los errores por elemento, en lugar de registrar cada error.
Prueba
Probar tu canalización tiene muchos beneficios, como ayudarte con las actualizaciones del SDK, la refactorización de la canalización y las revisiones de código. Muchas optimizaciones, como la reelaboración de transformaciones personalizadas intensivas en 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 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 canalización en dos modos: en un estado estable y procesando una gran lista de tareas pendientes para simular una recuperación de falla.
Para obtener más información sobre cómo crear pruebas de unidades, pruebas de integración y pruebas de extremo a extremo, consulta Cómo probar tu canalización.
Para ver ejemplos de pruebas, consulta el
repositorio de GitHub de
dataflow-ordered-processing
.
¿Qué sigue?
- Planifica tu canalización de Dataflow
- Desarrolla y prueba canalizaciones de Dataflow
- Soluciona problemas de canalizaciones