En este documento, se explican las prácticas recomendadas para optimizar tus trabajos de Dataflow con el objetivo de minimizar los costos. Explica los factores que afectan los costos y proporciona técnicas para supervisarlos y administrarlos.
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 para 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 analizar las compensaciones entre el costo y otros factores.
- Si tu canalización requiere una latencia de transferencia de extremo a extremo baja, es posible que los costos de la canalización sean 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 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. En muchos casos, esta técnica puede proporcionar una estimación del costo.
- 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 valor 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 detallados Google Cloud automáticamente durante 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 e 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 atascadas o pasos con demasiado tiempo de pared.
- 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 que requieren mucha 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 Cómo personalizar 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 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 GPUs en las VMs de trabajador
- Modo de ajuste de escala 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, ten en cuenta 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 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 etapa de pruebas y de trabajo temporales 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 trabajador pueden mejorar la eficiencia en cuanto a los costos.
- 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 requieren 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 las cargas de trabajo que requieren mucha memoria o 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 configurando 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. 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 de canalización específicos.
- Algunas canalizaciones se benefician del uso de GPUs. Para obtener más información, consulta GPU con Dataflow. Con el ajuste correcto, puedes configurar las GPUs 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 para los trabajos por lotes
En esta sección, se proporcionan sugerencias para optimizar la configuración del tiempo 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 sensible al tiempo, considera usar la Programación flexible de recursos (FlexRS). FlexRS reduce los costos de procesamiento por lotes, ya que busca 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 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 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.
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 ejecución corta, 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 detener automáticamente el trabajo si se ejecuta durante más tiempo del esperado.
Optimiza la configuración para los trabajos de transmisión
En esta sección, se proporcionan sugerencias para optimizar la configuración del tiempo de ejecución de los 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 lograr una mayor eficiencia. Se recomienda usar Streaming Engine para tus trabajos de transmisión.
Considera el modo de 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 de 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 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 los trabajos de transmisión de Dataflow proporcionan precios con descuento a cambio de tu compromiso de usar continuamente una cierta cantidad 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 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 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 sugerencias de ajuste de escala automático para ajustar la configuración de ajuste de escala automático. Para obtener más información, consulta Cómo optimizar 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 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.
- Para supervisar los errores de la canalización, consulta Recuento de registros de error de los trabajadores.
- Para solucionar errores, consulta Soluciona errores 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, 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:
- Cuando sea posible, usa la versión del SDK de Apache Beam compatible más reciente. 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. El empaquetado previo de las dependencias reduce el tiempo de inicio del trabajador.
Logging
Sigue estas prácticas recomendadas cuando registres información:
- 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 registros.
- 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 que requieren mucha 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 de los elementos 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 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