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
Distributiones 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
gcpTempLocationytemp_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
numWorkersonum_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.
- Para supervisar los errores de la canalización, consulta Recuento de registros de errores del trabajador.
- 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,
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
PCollectionse 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 más reciente compatible del SDK de Apache Beam. Sigue 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 los conectores de E/S.
- Para las canalizaciones de Python, considera usar contenedores personalizados. El empaquetado previo de dependencias disminuye el tiempo de inicio del trabajador.
Logging
Sigue estas prácticas recomendadas cuando registres:
- 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 Controla el volumen de registros.
- No registres elementos individuales. En su lugar, habilita el muestreo de datos .
- Usa un patrón de letra muerta para los errores por elemento, en lugar de registrar cada error.
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?
- Planifica tu canalización de Dataflow
- Desarrolla y prueba canalizaciones de Dataflow
- Soluciona problemas de canalizaciones