Optimiza los costos: procesamiento, contenedores y computación sin servidores

Last reviewed 2023-07-12 UTC

En este documento del Framework de la arquitectura de Google Cloud, se proporcionan recomendaciones para ayudarte a optimizar el costo de las máquinas virtuales (VM), los contenedores y los recursos sin servidores en Google Cloud.

La orientación de esta sección está dirigida a arquitectos, desarrolladores y administradores responsables de aprovisionar y administrar recursos de procesamiento para las cargas de trabajo en la nube.

Los recursos de procesamiento son la parte más importante de la infraestructura de nube. Cuando migras tus cargas de trabajo a Google Cloud, una primera opción típica es Compute Engine, que te permite aprovisionar y administrar VMs de manera eficiente en la nube. Compute Engine ofrece una amplia gama de tipos de máquinas y está disponible de forma global en todas las regiones de Google Cloud. Los tipos predefinidos y personalizados de máquinas de Compute Engine te permiten aprovisionar VM que ofrecen capacidad de procesamiento similar a la de tu infraestructura local, lo que te permite acelerar el proceso de migración. Compute Engine te brinda la ventaja de precios mediante el pago solo por la infraestructura que usas y proporciona ahorros significativos a medida que usas más recursos de procesamiento con descuentos por uso continuo.

Además de Compute Engine, Google Cloud ofrece contenedores y servicios de procesamiento sin servidores. El enfoque sin servidores puede ser más rentable para servicios nuevos que no siempre se ejecutan (por ejemplo, API, procesamiento de datos y procesamiento de eventos).

Junto con las recomendaciones generales, en este documento se proporciona orientación para ayudarte a optimizar el costo de los recursos de procesamiento cuando utilizas los siguientes productos:

  • Compute Engine
  • Google Kubernetes Engine (GKE)
  • Cloud Run
  • Cloud Functions
  • App Engine

Recomendaciones generales

Las siguientes recomendaciones se aplican a todos los servicios de procesamiento, contenedores y sin servidores de Google Cloud que se analizan en esta sección.

Realiza un seguimiento del uso y el costo

Usa las siguientes herramientas y técnicas para supervisar el uso y el costo de los recursos:

Controla el aprovisionamiento de recursos

Usa las siguientes recomendaciones para controlar la cantidad de recursos aprovisionados en la nube y la ubicación en la que se crean los recursos:

  • Para garantizar que el consumo y el costo de los recursos no excedan la previsión, usa cuotas de recursos.
  • Aprovisiona los recursos en la región de menor costo que cumpla con los requisitos de latencia de tu carga de trabajo. Para controlar dónde se aprovisionan los recursos, puedes usar la restricción de la política de la organización gcp.resourceLocations.

Obtén descuentos por compromiso de uso

Los descuentos por compromiso de uso (CUD) son ideales para cargas de trabajo con necesidades de recursos predecibles. Después de migrar tu carga de trabajo a Google Cloud, busca el modelo de referencia para los recursos necesarios y obtén más descuentos por compromiso de uso. Por ejemplo, compra un compromiso de uno o tres años y obtén un descuento sustancial en los precios de VM de Compute Engine.

Automatiza el seguimiento de costos con etiquetas

Define y asigna etiquetas de manera coherente. Los siguientes son ejemplos de cómo puedes usar etiquetas para automatizar el seguimiento de costos:

  • Para las VM que solo los desarrolladores usan durante las horas hábiles, asigna la etiqueta env: development. Puedes usar Cloud Scheduler para configurar una función de Cloud Functions sin servidores a fin de apagar estas VM después de las horas hábiles y reiniciarlas cuando sea necesario.

  • Para una aplicación que tenga varios servicios de Cloud Run y, también, instancias de Cloud Functions, asigna una etiqueta coherente a todos los recursos de Cloud Run y Cloud Functions. Identifica las áreas de alto costo y toma medidas para reducir el costo.

Personaliza los informes de facturación

Configura tus informes de la Facturación de Cloud mediante la configuración de los filtros necesarios y la agrupación de los datos según sea necesario (por ejemplo, por proyectos, servicios o etiquetas).

Promociona una cultura de ahorro de costos

Capacita a los desarrolladores y los operadores en tu infraestructura de nube. Crea y promueve programas de aprendizaje mediante clases tradicionales o en línea, grupos de discusión, revisiones entre compañeros, programación en pareja y juegos que ahorren costos. Como se muestra en la investigación de DORA de Google, la cultura organizacional es un impulsor clave para mejorar el rendimiento, reducir la repetición del trabajo y el agotamiento, y optimizar los costos. Cuando proporcionas a los empleados visibilidad del costo de sus recursos, los ayudas a alinear sus prioridades y actividades con los objetivos y las limitaciones comerciales.

Compute Engine

En esta sección, se proporciona orientación para ayudarte a optimizar el costo de los recursos de Compute Engine. Además de esta guía, te recomendamos que sigas las recomendaciones generales que se analizaron antes.

Comprende el modelo de facturación

Para obtener más información sobre las opciones de facturación de Compute Engine, consulta Precios.

Analiza el consumo de recursos

Para ayudarte a comprender el consumo de recursos en Compute Engine, exporta datos de uso a BigQuery. Consulta el almacén de datos de BigQuery para analizar las tendencias de uso de CPU virtual (vCPU) de tu proyecto y determinar la cantidad de CPU virtuales que puedes reclamar. Si definiste umbrales para la cantidad de núcleos por proyecto, analiza las tendencias de uso a fin de detectar anomalías y tomar medidas correctivas.

Recupera recursos inactivos

Usa las siguientes recomendaciones para identificar y reclamar VM y discos sin usar, como las VM de proyectos de prueba de concepto a los que se les quitó la prioridad:

  • Usa el recomendador de VM inactivas para identificar las VM inactivas y los discos persistentes en función de las métricas de uso.
  • Antes de borrar recursos, evalúa el impacto potencial de la acción y planifica volver a crear los recursos si es necesario.
  • Antes de borrar una VM, considera tomar una instantánea. Cuando borras una VM, se borran los discos conectados, a menos que hayas seleccionado la opción Conservar disco.
  • Cuando sea posible, considera detener las VM en lugar de borrarlas. Cuando detienes una VM, la instancia se cancela, pero los discos y las direcciones IP se conservan hasta que los desconectes o los borres.

Ajusta la capacidad para que coincida con la demanda

Programe las VMs para que se inicien y se detengan de forma automática. Por ejemplo, si una VM se usa solo ocho horas al día durante cinco días a la semana (es decir, 40 horas en la semana), puedes reducir los costos en un 75% si detienes la VM durante las 128 horas en la semana en las que la VM no se usa.

Ajusta automáticamente la escala de la capacidad de procesamiento según la demanda mediante grupos de instancias administrados. Puedes ajustar la escala de la capacidad automáticamente según los parámetros que son importantes para tu empresa (por ejemplo, el uso de CPU o la capacidad de balanceo de cargas).

Elige los tipos de máquina adecuados

Ajusta el tamaño de las VM para que coincidan con los requisitos de procesamiento de la carga de trabajo mediante el recomendador de tipos de máquinas de VM.

Para cargas de trabajo con requisitos de recursos predecibles, adapta el tipo de máquina a tus necesidades y ahorra dinero con VM personalizadas.

Para las cargas de trabajo de procesamiento por lotes que son tolerantes a errores, considera usar VMs Spot. La computación de alto rendimiento (HPC), los macrodatos, la transcodificación de medios, las canalizaciones de integración continua y entrega continua (CI/CD) y las aplicaciones web sin estado son ejemplos de cargas de trabajo que se pueden implementar en VMs Spot. Para ver un ejemplo de cómo Descartes Labs redujo los costos de análisis mediante VMs interrumpibles (la versión anterior de las VMs Spot) a fin de procesar imágenes satelitales, consulta el caso de éxito de Descartes Labs.

Evalúa las opciones de licencia

Cuando migras cargas de trabajo de terceros a Google Cloud, es posible que puedas reducir los costos si usas licencias adquiridas por el usuario (BYOL). Por ejemplo, para implementar VM de Microsoft Windows Server, en lugar de usar una imagen premium que genere un costo adicional por la licencia de terceros, puedes crear y usar una imagen de BYOL de Windows personalizada. Solo pagas por la infraestructura de VM que usas en Google Cloud. Esta estrategia te ayuda a descubrir el valor de tus inversiones existentes en licencias de terceros.

Si decides usar un enfoque BYOL, te recomendamos que hagas lo siguiente:

  • Aprovisiona la cantidad necesaria de núcleos de CPU de procesamiento sin importar la memoria mediante tipos personalizados de máquinas y limita el costo de las licencias de terceros a la cantidad de núcleos de CPU que necesitas.
  • Reduce la cantidad de CPU virtuales por núcleo de 2 a 1 mediante la inhabilitación de los multiprocesos simultáneos (SMT) y reduce tus costos de licencia en un 50%.

Si tus cargas de trabajo de terceros necesitan hardware dedicado para cumplir con los requisitos de seguridad o cumplimiento, puedes usar tus propias licencias en nodos de usuario único.

Google Kubernetes Engine

En esta sección, se proporciona orientación para ayudarte a optimizar el costo de los recursos de GKE.

Además de las siguientes recomendaciones, consulta las recomendaciones generales que se analizaron antes:

  • Usa GKE Autopilot para permitir que GKE maximice la eficiencia de la infraestructura de tu clúster. No necesitas supervisar el estado de los nodos, controlar la compresión ni calcular la capacidad que necesitan las cargas de trabajo.
  • Ajusta el ajuste de escala automático de GKE mediante el Horizontal Pod Autoscaler (HPA), el escalador automático vertical de pods (VPA) El escalador automático del clúster (CA) o el aprovisionamiento automático de nodos según los requisitos de la carga de trabajo.
  • Para cargas de trabajo por lotes que no son sensibles a la latencia de inicio, usa el perfil de ajuste de escala automático de optimización-utilización para ayudar a mejorar el uso del clúster.
  • Usa el aprovisionamiento automático de nodos para extender el escalador automático del clúster de GKE y crea y borra grupos de nodos de forma eficiente según las especificaciones de pods pendientes sin exceso de aprovisionamiento.
  • Usa grupos de nodos diferentes: un grupo de nodos estáticos para la carga estática y grupos de nodos dinámicos con grupos de ajuste de escala automático de clústeres para las cargas dinámicas.
  • Usa VMs Spot para los grupos de nodos de Kubernetes cuando tus pods sean tolerantes a errores y puedan finalizar sin problemas en menos de 25 segundos. En combinación con el escalador automático de clústeres de GKE, esta estrategia te ayuda a garantizar que el grupo de nodos con VMs de menor costo (en este caso, el grupo de nodos con VMs Spot) escale primero.
  • Elige tipos de máquinas rentables (por ejemplo: E2, N2D) T2D), que proporcionan una relación precio-rendimiento entre un 20% y un 40% más alta.
  • Usa la medición del uso de GKE para analizar los perfiles de uso de los clústeres por espacios de nombres y etiquetas. Identifica el equipo o la aplicación que más gasta, el entorno o el componente que causó aumentos repentinos en el uso o el costo, y el equipo que desperdicia recursos.
  • Usa cuotas de recursos en clústeres de multiusuarios para evitar que cualquier usuario use más de lo que se le asigna de los recursos de clúster.
  • Programa un ajuste de escala automático de los entornos de desarrollo y prueba después de las horas hábiles.
  • Sigue las prácticas recomendadas para ejecutar aplicaciones de Kubernetes con optimización de costos en GKE.

Cloud Run

En esta sección, se proporciona orientación para ayudarte a optimizar el costo de los recursos de Cloud Run.

Además de las siguientes recomendaciones, consulta las recomendaciones generales que se analizaron antes:

  • Ajusta la configuración de simultaneidad (configuración predeterminada: 80) para reducir los costos. Cloud Run determina la cantidad de solicitudes que se enviarán a una instancia según el uso de CPU y memoria. Mediante el aumento de la simultaneidad de las solicitudes, puedes reducir la cantidad de instancias necesarias.
  • Establece un límite para la cantidad de instancias que se pueden implementar.
  • Estima la cantidad de instancias que se requieren mediante la métrica Tiempo de instancia facturable. Por ejemplo, si la métrica muestra 100s/s, se programaron alrededor de 100 instancias. Agrega un búfer del 30% a fin de conservar el rendimiento, es decir, 130 instancias para 100 s/s de tráfico.
  • Para reducir el impacto de los inicios en frío, configura una cantidad mínima de instancias. Cuando estas instancias están inactivas, se facturan a un décimo del precio.
  • Realiza un seguimiento del uso de la CPU y ajusta los límites de la CPU según corresponda.
  • Usa la administración del tráfico para determinar una configuración con un costo óptimo.
  • Considera usar Cloud CDN o Firebase Hosting para entregar elementos estáticos.
  • En el caso de las apps de CloudRun que controlan solicitudes a nivel global, considera implementar la app en varias regiones, puesto que el tráfico de salida entre continentes puede ser costoso. Se recomienda este diseño si usas un balanceador de cargas y una CDN.
  • Reduce los tiempos de inicio de tus instancias, puesto que el tiempo de inicio también es facturable.
  • Compra descuentos por compromiso de uso y ahorra hasta un 17% en los precios según demanda por un compromiso de un año.

Cloud Functions

En esta sección, se proporciona orientación para ayudarte a optimizar el costo de tus recursos de Cloud Functions.

Además de las siguientes recomendaciones, consulta las recomendaciones generales que se analizaron antes:

  • Observa el tiempo de ejecución de tus funciones. Experimenta y compara para diseñar la función más pequeña que aún cumpla con tu umbral de rendimiento requerido.
  • Si tus cargas de trabajo de Cloud Functions se ejecutan de forma constante, considera usar GKE o Compute Engine para manejarlas. Los contenedores o las VM pueden ser opciones de menor costo para las cargas de trabajo que se ejecutan siempre.
  • Limita la cantidad de instancias de función que pueden coexistir.
  • Compara el rendimiento del entorno de ejecución de los lenguajes de programación de Cloud Functions con la carga de trabajo de tu función. Los programas en lenguajes compilados tienen inicios en frío más largos, pero se ejecutan más rápido. Los programas en lenguajes interpretados se ejecutan más lento, pero tienen una sobrecarga de inicio en frío más baja. Las funciones cortas y sencillas que se ejecutan con frecuencia pueden costar menos en un lenguaje interpretado.
  • Borra los archivos temporales escritos en el disco local, que es un sistema de archivos en la memoria. Los archivos temporales consumen memoria que se asigna a tu función y, a veces, persisten entre invocaciones. Si no borras estos archivos, puede producirse un error de memoria insuficiente y activarse un inicio en frío, lo que aumenta el tiempo de ejecución y el costo.

App Engine

En esta sección, se proporciona orientación para ayudarte a optimizar el costo de tus recursos de App Engine.

Además de las siguientes recomendaciones, consulta las recomendaciones generales que se analizaron antes:

  • Establece la cantidad máxima de instancias en función del tráfico y la latencia de las solicitudes. Por lo general, App Engine escala la capacidad según el tráfico que reciben las aplicaciones. Puedes controlar el costo si limitas la cantidad de instancias que App Engine puede crear.
  • A fin de limitar la memoria o la CPU disponible para tu aplicación, configura una clase de instancia. Para aplicaciones con uso intensivo de CPU, asigna más CPU. Prueba algunos parámetros de configuración para determinar el tamaño óptimo.
  • Compara tu carga de trabajo de App Engine en varios lenguajes de programación. Por ejemplo, una carga de trabajo implementada en un lenguaje podría necesitar menos instancias y tener un menor costo para completar tareas a tiempo que la misma carga de trabajo programada en otro lenguaje.
  • Optimiza para tener menos inicios en frío. Cuando sea posible, reduce las tareas de uso intensivo de CPU o de larga duración que se producen en el alcance global. Prueba dividir la tarea en operaciones más pequeñas, que se puedan “cargar de forma diferida” en el contexto de una solicitud.
  • Si esperas tráfico inestable, configura una cantidad mínima de instancias inactivas que estén preparadas de forma previa. Si no esperas tráfico, puedes configurar las instancias inactivas mínimas en cero.
  • Para equilibrar el rendimiento y el costo, ejecuta una prueba A/B mediante la división del tráfico entre dos versiones, cada una con una configuración diferente. Supervisa el rendimiento y el costo de cada versión, realiza ajustes según sea necesario y decide la configuración a la que se debe enviar el tráfico.
  • Configura la simultaneidad de solicitudes y establece un valor máximo de solicitudes simultáneas más alto que la configuración predeterminada. Cuantas más solicitudes maneje simultáneamente cada instancia, más eficiente será el uso de las instancias existentes para entregar tráfico.

¿Qué sigue?