En este pilar del Google Cloud framework de Well-Architected, se proporcionan recomendaciones para optimizar el rendimiento de las cargas de trabajo enGoogle Cloud.
Este documento está dirigido a arquitectos, desarrolladores y administradores que planifican, diseñan, implementan y administran cargas de trabajo en Google Cloud.
Las recomendaciones de este pilar pueden ayudar a tu organización a operar de manera eficiente, mejorar la satisfacción del cliente, aumentar los ingresos y reducir los costos. Por ejemplo, cuando el tiempo de procesamiento de backend de una aplicación disminuye, los usuarios experimentan tiempos de respuesta más rápidos, lo que puede generar una mayor retención de usuarios y más ingresos.
El proceso de optimización del rendimiento puede implicar una compensación entre el rendimiento y el costo. Sin embargo, optimizar el rendimiento a veces puede ayudarte a reducir costos. Por ejemplo, cuando aumenta la carga, el ajuste de escala automático puede ayudar a proporcionar un rendimiento predecible, ya que garantiza que los recursos del sistema no se sobrecarguen. El ajuste de escala automático también te ayuda a reducir costos, ya que quita los recursos que no se usan durante los períodos de carga baja.
La optimización del rendimiento es un proceso continuo, no una actividad única. En el siguiente diagrama, se muestran las etapas del proceso de optimización del rendimiento:
El proceso de optimización del rendimiento es un ciclo continuo que incluye las siguientes etapas:
- Define los requisitos: Define requisitos de rendimiento detallados para cada capa de la pila de aplicaciones antes de diseñar y desarrollar tus aplicaciones. Para planificar la asignación de recursos, considera las características clave de la carga de trabajo y las expectativas de rendimiento.
- Diseña e implementa: Usa patrones de diseño elásticos y escalables que puedan ayudarte a cumplir con tus requisitos de rendimiento.
- Supervisa y analiza: Supervisa el rendimiento de forma continua con registros, seguimiento, métricas y alertas.
Optimiza: Considera posibles rediseños a medida que evolucionan tus aplicaciones. Redimensiona los recursos de la nube y usa funciones nuevas para satisfacer los requisitos de rendimiento cambiantes.
Como se muestra en el diagrama anterior, continúa el ciclo de supervisión, reevaluación de los requisitos y ajuste de los recursos de la nube.
Si deseas conocer los principios y las recomendaciones de optimización del rendimiento específicos para las cargas de trabajo de IA y AA, consulta Perspectiva de IA y AA: Optimización del rendimiento en Well-Architected Framework.
Principios básicos
Las recomendaciones del pilar de optimización del rendimiento del Framework de Well-Architected se asignan a los siguientes principios básicos:
- Planifica la asignación de recursos
- Aprovecha la elasticidad
- Promueve el diseño modular
- Supervisa y mejora el rendimiento de forma continua
Colaboradores
Autores:
- Daniel Lees | Arquitecto de Seguridad en la Nube
- Gary Harmson | Arquitecto principal
- Luis Urena | Ingeniero de relaciones con desarrolladores
- Zach Seils | Especialista en herramientas de redes
Otros colaboradores:
- Filipe Gracio, PhD | Ingeniero de Atención al cliente
- José Andrade | Ingeniero de Atención al cliente de Infraestructura Empresarial
- Autor: Kumar Dhanagopal | Desarrollador de soluciones entre productos
- Marwan Al Shawi | Ingeniero de Atención al Cliente para Socios
- Nicolas Pintaux | Ingeniero de Atención al Cliente y especialista en modernización de aplicaciones
- Ryan Cox | Arquitecto principal
- Radhika Kanakam | Senior Program Manager, Cloud GTM
- Samantha He | Escritora técnica
- Wade Holmes | Director de Soluciones Globales
Planifica la asignación de recursos
Este principio del pilar de optimización del rendimiento del Google Cloud Framework de Well-Architected proporciona recomendaciones para ayudarte a planificar los recursos para tus cargas de trabajo enGoogle Cloud. Se enfatiza la importancia de definir requisitos detallados antes de diseñar y desarrollar aplicaciones para la implementación o migración en la nube.
Descripción general del principio
Para satisfacer los requisitos de tu empresa, es importante que definas los requisitos de rendimiento de tus aplicaciones antes del diseño y el desarrollo. Define estos requisitos de la manera más detallada posible para la aplicación en su totalidad y para cada capa de la pila de la aplicación. Por ejemplo, en la capa de almacenamiento, debes tener en cuenta la capacidad de procesamiento y las operaciones de E/S por segundo (IOPS) que necesitan las aplicaciones.
Desde el principio, planifica los diseños de la aplicación teniendo en cuenta el rendimiento y la escalabilidad. Considera factores como la cantidad de usuarios, el volumen de datos y el crecimiento potencial con el tiempo.
Los requisitos de rendimiento para cada carga de trabajo varían y dependen del tipo de carga de trabajo. Cada carga de trabajo puede contener una combinación de sistemas y servicios de componentes que tienen conjuntos únicos de características de rendimiento. Por ejemplo, un sistema responsable del procesamiento por lotes periódico de grandes conjuntos de datos tiene diferentes exigencias de rendimiento que una solución de escritorio virtual interactiva. Tus estrategias de optimización deben abordar las necesidades específicas de cada carga de trabajo.
Selecciona los servicios y las funciones que se alineen con los objetivos de rendimiento de cada carga de trabajo. No existe una solución única para optimizar el rendimiento. Cuando optimizas cada carga de trabajo, todo el sistema puede alcanzar un rendimiento y una eficiencia óptimos.
Ten en cuenta las siguientes características de la carga de trabajo que pueden influir en tus requisitos de rendimiento:
- Arquetipo de implementación: El arquetipo de implementación que selecciones para una aplicación puede influir en tu elección de productos y funciones, lo que, a su vez, determina el rendimiento que puedes esperar de tu aplicación.
- Ubicación de recursos: Cuando selecciones una Google Cloud región para los recursos de tu aplicación, te recomendamos que priorices la baja latencia para los usuarios finales, cumplas con las reglamentaciones de localidad de los datos y garantices la disponibilidad de los Google Cloud productos y servicios requeridos.
- Conectividad de red: Elige servicios de redes que optimicen el acceso a los datos y la entrega de contenido. Aprovecha la red global, las redes troncales de alta velocidad, las ubicaciones de interconexión y los servicios de almacenamiento en caché de Google Cloud.
- Opciones de hosting de la aplicación: Cuando selecciones una plataforma de hosting, debes evaluar las ventajas y desventajas de rendimiento de cada opción. Por ejemplo, considera las plataformas de hardware físico, máquinas virtuales, contenedores y sin servidores.
- Estrategia de almacenamiento: Elige una estrategia de almacenamiento óptima que se base en tus requisitos de rendimiento.
- Configuraciones de recursos: El tipo de máquina, las IOPS y la capacidad de procesamiento pueden tener un impacto significativo en el rendimiento. Además, al principio de la fase de diseño, debes considerar las capacidades de seguridad adecuadas y su impacto en los recursos. Cuando planifiques funciones de seguridad, prepárate para aceptar las compensaciones de rendimiento necesarias para evitar efectos imprevistos.
Recomendaciones
Para garantizar una asignación óptima de recursos, considera las recomendaciones de las siguientes secciones.
Configura y administra cuotas
Asegúrate de que tu aplicación use solo los recursos necesarios, como memoria, almacenamiento y potencia de procesamiento. La asignación excesiva puede generar gastos innecesarios, mientras que la asignación insuficiente puede provocar una degradación del rendimiento.
Para adaptarse al escalamiento elástico y garantizar que haya recursos suficientes disponibles, supervisa periódicamente la capacidad de tus cuotas. Además, haz un seguimiento del uso de la cuota para identificar posibles restricciones de escalamiento o problemas de asignación excesiva y, luego, toma decisiones fundamentadas sobre la asignación de recursos.
Educa y promueve la conciencia
Informa a los usuarios sobre los requisitos de rendimiento y proporciona recursos educativos sobre técnicas eficaces de administración del rendimiento.
Para evaluar el progreso y detectar áreas de mejora, documenta periódicamente el rendimiento objetivo y el rendimiento real. Somete tu aplicación a una prueba de carga para encontrar posibles puntos de interrupción y comprender cómo puedes escalarla.
Supervisa las métricas de rendimiento
Usa Cloud Monitoring para analizar las tendencias en las métricas de rendimiento, analizar los efectos de los experimentos, definir alertas para las métricas críticas y realizar análisis retrospectivos.
Active Assist es un conjunto de herramientas que pueden proporcionar estadísticas y recomendaciones para ayudar a optimizar el uso de los recursos. Estas recomendaciones pueden ayudarte a ajustar la asignación de recursos y mejorar el rendimiento.
Aprovecha la elasticidad
Este principio del pilar de optimización del rendimiento del Google Cloud framework de Well-Architected proporciona recomendaciones para ayudarte a incorporar la elasticidad, que es la capacidad de ajustar los recursos de forma dinámica según los cambios en los requisitos de la carga de trabajo.
La elasticidad permite que los diferentes componentes de un sistema se ajusten de forma independiente. Este ajuste de escala segmentado puede ayudar a mejorar el rendimiento y la eficiencia de los costos, ya que asigna recursos exactamente donde se necesitan, sin sobreaprovisionar ni subaprovisionar tus recursos.
Descripción general del principio
Los requisitos de rendimiento de un sistema influyen directamente en cuándo y cómo se escala vertical u horizontalmente. Debes evaluar la capacidad del sistema y determinar la carga que se espera que maneje el sistema en el valor de referencia. Luego, debes determinar cómo quieres que el sistema responda a los aumentos y las disminuciones en la carga.
Cuando aumenta la carga, el sistema debe escalar horizontalmente, escalar verticalmente o ambas. Para el escalamiento horizontal, agrega nodos de réplica para garantizar que el sistema tenga suficiente capacidad general para satisfacer la mayor demanda. Para el escalamiento vertical, reemplaza los componentes existentes de la aplicación por componentes que contengan más capacidad, más memoria y más almacenamiento.
Cuando la carga disminuye, el sistema debe reducir su escala (horizontal, vertical o ambas).
Define las circunstancias en las que el sistema aumenta o disminuye su escala. Planifica el aumento manual de la capacidad de los sistemas para los períodos conocidos de tráfico alto. Usa herramientas como el ajuste de escala automático, que responde a los aumentos o las disminuciones en la carga.
Recomendaciones
Para aprovechar la elasticidad, ten en cuenta las recomendaciones de las siguientes secciones.
Planifica los períodos de carga máxima
Debes planificar una ruta de escalamiento eficiente para los eventos conocidos, como los períodos esperados de mayor demanda de los clientes.
Considera escalar tu sistema antes de los períodos conocidos de tráfico alto. Por ejemplo, si eres una organización de venta minorista, esperas que la demanda aumente durante las ventas de temporada. Te recomendamos que aumentes o disminuyas la capacidad de tus sistemas de forma manual antes de esas ventas para asegurarte de que tu sistema pueda controlar de inmediato el aumento de la carga o ajustar los límites existentes de inmediato. De lo contrario, el sistema podría tardar varios minutos en agregar recursos en respuesta a los cambios en tiempo real. Es posible que la capacidad de tu aplicación no aumente lo suficientemente rápido y que algunos usuarios experimenten demoras.
Para los eventos desconocidos o inesperados, como un aumento repentino en la demanda o el tráfico, puedes usar las funciones de ajuste de escala automático para activar el ajuste de escala elástico basado en métricas. Estas métricas pueden incluir el uso de CPU, la capacidad de entrega del balanceador de cargas, la latencia y hasta métricas personalizadas que definas en Cloud Monitoring.
Por ejemplo, considera una aplicación que se ejecuta en un grupo de instancias administrado (MIG) de Compute Engine. Esta aplicación tiene el requisito de que cada instancia funcione de manera óptima hasta que el uso promedio de la CPU alcance el 75%. En este ejemplo, puedes definir una política de ajuste de escala automático que cree más instancias cuando el uso de CPU alcance el umbral. Estas instancias recién creadas ayudan a absorber la carga, lo que garantiza que el uso promedio de la CPU se mantenga en un nivel óptimo hasta que se alcance la cantidad máxima de instancias que configuraste para el MIG. Cuando la demanda disminuye, la política de ajuste de escala automático quita las instancias que ya no son necesarias.
Planifica las reservas de ranuras de recursos en BigQuery o ajusta los límites para las configuraciones de ajuste de escala automático en Spanner con el ajustador de escala automático administrado.
Usa el ajuste de escala predictivo
Si los componentes de tu sistema incluyen Compute Engine, debes evaluar si el ajuste de escala automático predictivo es adecuado para tu carga de trabajo. El ajuste de escala automático predictivo prevé la carga futura en función de las tendencias históricas de tus métricas, por ejemplo, el uso de CPU. Las previsiones se vuelven a calcular cada pocos minutos, por lo que el escalador automático adapta rápidamente su previsión a cambios muy recientes en la carga. Sin el ajuste de escala automático predictivo, un escalador automático solo puede escalar de manera reactiva un grupo en función de los cambios observados en tiempo real en la carga. El ajuste de escala automático predictivo funciona con datos en tiempo real y datos históricos para responder a la carga actual y prevista.
Implementa arquitecturas sin servidores
Considera implementar una arquitectura sin servidores con servicios sin servidores que sean inherentemente elásticos, como los siguientes:
A diferencia del ajuste de escala automático en otros servicios que requieren reglas de ajuste (por ejemplo, Compute Engine), el ajuste de escala automático sin servidores es instantáneo y puede reducirse a cero recursos.
Usa el modo Autopilot para Kubernetes
Para aplicaciones complejas que requieren un mayor control sobre Kubernetes, considera el modo Autopilot en Google Kubernetes Engine (GKE). El modo Autopilot proporciona automatización y escalabilidad de forma predeterminada. GKE escala automáticamente los nodos y los recursos en función del tráfico. GKE administra los nodos, crea nodos nuevos para tus aplicaciones y configura las actualizaciones y reparaciones automáticas.
Promueve el diseño modular
Este principio del pilar de optimización del rendimiento del Google Cloud Framework de Well-Architected proporciona recomendaciones para ayudarte a promover un diseño modular. Los componentes modulares y las interfaces claras pueden permitir un escalamiento flexible, actualizaciones independientes y una separación futura de los componentes.
Descripción general del principio
Comprender las dependencias entre los componentes de la aplicación y los componentes del sistema para diseñar un sistema escalable
El diseño modular permite flexibilidad y capacidad de recuperación, independientemente de si se implementó inicialmente una arquitectura monolítica o de microservicios. Si desglosas el sistema en módulos independientes y bien definidos con interfaces claras, puedes escalar los componentes individuales para satisfacer demandas específicas.
El ajuste de escala segmentado puede ayudar a optimizar la utilización de recursos y reducir los costos de las siguientes maneras:
- Solo aprovisiona los recursos necesarios para cada componente y asigna menos recursos a los componentes menos exigentes.
- Agrega más recursos durante los períodos de mucho tráfico para mantener la experiencia del usuario.
- Quita los recursos infrautilizados sin comprometer el rendimiento.
La modularidad también mejora el mantenimiento. Las unidades más pequeñas y autónomas son más fáciles de comprender, depurar y actualizar, lo que puede generar ciclos de desarrollo más rápidos y reducir el riesgo.
Si bien la modularidad ofrece ventajas significativas, debes evaluar las posibles compensaciones en el rendimiento. El aumento de la comunicación entre los módulos puede generar latencia y sobrecarga. Busca un equilibrio entre modularidad y rendimiento. Un diseño muy modular podría no ser adecuado para todos los casos. Cuando el rendimiento es fundamental, podría ser adecuado un enfoque más estrechamente acoplado. El diseño del sistema es un proceso iterativo en el que revisas y perfeccionas continuamente tu diseño modular.
Recomendaciones
Para promover los diseños modulares, ten en cuenta las recomendaciones de las siguientes secciones.
Diseña para el acoplamiento bajo
Diseña una arquitectura con acoplamiento bajo. Los componentes independientes con dependencias mínimas pueden ayudarte a compilar aplicaciones escalables y resilientes. A medida que planificas los límites de tus servicios, debes tener en cuenta los requisitos de disponibilidad y escalabilidad. Por ejemplo, si un componente tiene requisitos diferentes de los demás, puedes diseñarlo como un servicio independiente. Implementa un plan para fallas controladas en subprocesos o servicios menos importantes que no afecten el tiempo de respuesta de los servicios principales.
Diseño para la simultaneidad y el paralelismo
Diseña tu aplicación para que admita varias tareas de forma simultánea, como procesar varias solicitudes de usuarios o ejecutar trabajos en segundo plano mientras los usuarios interactúan con tu sistema. Divide las tareas grandes en fragmentos más pequeños que puedan procesar varias instancias de servicio al mismo tiempo. La simultaneidad de tareas te permite usar funciones como el ajuste de escala automático para aumentar la asignación de recursos en productos como los siguientes:
Equilibra la modularidad para una asignación de recursos flexible
Cuando sea posible, asegúrate de que cada componente use solo los recursos necesarios (como memoria, almacenamiento y capacidad de procesamiento) para operaciones específicas. La asignación excesiva de recursos puede generar costos innecesarios, mientras que la asignación insuficiente puede comprometer el rendimiento.
Usa interfaces bien definidas
Asegúrate de que los componentes modulares se comuniquen de manera eficaz a través de interfaces claras y estandarizadas (como APIs y colas de mensajes) para reducir la sobrecarga de las capas de traducción o del tráfico externo.
Usa modelos sin estado
Un modelo sin estado puede ayudarte a garantizar que puedas manejar cada solicitud o interacción con el servicio independientemente de las solicitudes anteriores. Este modelo facilita la escalabilidad y la capacidad de recuperación, ya que puedes aumentar, reducir o reiniciar el servicio sin perder los datos necesarios para las solicitudes o los procesos en curso.
Elige tecnologías complementarias
Elige tecnologías que complementen el diseño modular. Evalúa los lenguajes de programación, los frameworks y las bases de datos para determinar si admiten la modularidad.
Para obtener más información, consulta los siguientes recursos:
Supervisa y mejora el rendimiento de forma continua
Este principio del pilar de optimización del rendimiento del Google Cloud framework de Well-Architected proporciona recomendaciones para ayudarte a supervisar y mejorar el rendimiento de forma continua.
Después de implementar las aplicaciones, supervisa su rendimiento de forma continua con registros, seguimiento, métricas y alertas. A medida que tus aplicaciones crezcan y evolucionen, podrás usar las tendencias de estos puntos de datos para volver a evaluar tus requisitos de rendimiento. Es posible que, con el tiempo, debas rediseñar partes de tus aplicaciones para mantener o mejorar su rendimiento.
Descripción general del principio
El proceso de mejora continua del rendimiento requiere herramientas y estrategias de supervisión sólidas. Las herramientas de observabilidad de la nube pueden ayudarte a recopilar indicadores clave de rendimiento (KPI) como la latencia, la capacidad de procesamiento, las tasas de error y el uso de recursos. Los entornos de nube ofrecen una variedad de métodos para realizar evaluaciones de rendimiento detalladas en toda la aplicación, la red y la experiencia del usuario final.
Mejorar el rendimiento es un esfuerzo continuo que requiere un enfoque multifacético. Los siguientes mecanismos y procesos clave pueden ayudarte a mejorar el rendimiento:
- Para proporcionar una dirección clara y ayudar a hacer un seguimiento del progreso, define objetivos de rendimiento que se alineen con tus objetivos comerciales. Establece objetivos SMART: específicos, medibles, alcanzables, relevantes y con plazos determinados.
- Para medir el rendimiento e identificar áreas de mejora, recopila métricas de KPI.
- Para supervisar continuamente tus sistemas en busca de problemas, usa flujos de trabajo visualizados en las herramientas de supervisión. Usa técnicas de asignación de procesos de arquitectura para identificar redundancias e ineficiencias.
- Para crear una cultura de mejora continua, proporciona capacitación y programas que respalden el crecimiento de tus empleados.
- Para fomentar la mejora proactiva y continua, incentiva a tus empleados y clientes a que proporcionen comentarios constantes sobre el rendimiento de tu aplicación.
Recomendaciones
Para promover los diseños modulares, ten en cuenta las recomendaciones de las siguientes secciones.
Define objetivos y métricas de rendimiento claros
Define objetivos de rendimiento claros que se alineen con tus metas comerciales. Esto requiere una comprensión profunda de la arquitectura de tu aplicación y los requisitos de rendimiento de cada componente de la aplicación.
Como prioridad, optimiza los componentes más importantes que influyen directamente en las funciones comerciales principales y la experiencia del usuario. Para garantizar que estos componentes sigan funcionando de manera eficiente y satisfagan las necesidades de tu empresa, establece objetivos de rendimiento específicos y medibles. Estos objetivos pueden incluir tiempos de respuesta, tasas de errores y umbrales de utilización de recursos.
Este enfoque proactivo puede ayudarte a identificar y abordar posibles cuellos de botella, optimizar la asignación de recursos y, en última instancia, brindar a tus usuarios una experiencia fluida y de alto rendimiento.
Supervisa el rendimiento
Supervisa continuamente tus sistemas en la nube para detectar problemas de rendimiento y configura alertas para cualquier problema potencial. El monitoreo y las alertas pueden ayudarte a detectar y corregir problemas antes de que afecten a los usuarios. La generación de perfiles de la aplicación puede ayudar a identificar cuellos de botella y optimizar el uso de recursos.
Puedes usar herramientas que faciliten la solución de problemas y la optimización de la red de manera eficaz. Usa Google Cloud Observability para identificar las áreas que tienen un alto consumo de CPU, memoria o red. Estas capacidades pueden ayudar a los desarrolladores a mejorar la eficiencia, reducir los costos y mejorar la experiencia del usuario. Network Intelligence Center muestra visualizaciones de la topología de tu infraestructura de red y puede ayudarte a identificar rutas con alta latencia.
Incentiva la mejora continua
Crea una cultura de mejora continua que pueda beneficiar tanto a la aplicación como a la experiencia del usuario.
Brinda a tus empleados oportunidades de capacitación y desarrollo que mejoren sus habilidades y conocimientos en técnicas de rendimiento en todos los servicios en la nube. Establece una comunidad de práctica (CdP) y ofrece programas de tutoría y entrenamiento para respaldar el crecimiento de los empleados.
Para evitar la administración del rendimiento reactiva y fomentar la administración del rendimiento proactiva, fomenta los comentarios continuos de tus empleados, tus clientes y tus partes interesadas. Puedes considerar la posibilidad de gamificar el proceso haciendo un seguimiento de los KPI de rendimiento y presentando esas métricas a los equipos con frecuencia en forma de una tabla de clasificación.
Para comprender tu rendimiento y la satisfacción de los usuarios a lo largo del tiempo, te recomendamos que midas los comentarios de los usuarios de forma cuantitativa y cualitativa. El marco de trabajo HEART puede ayudarte a recopilar comentarios de los usuarios en cinco categorías:
- Felicidad
- Participación
- Adopción
- Retención
- Éxito de la tarea
Con este framework, puedes incentivar a los ingenieros con comentarios basados en datos, métricas centradas en el usuario, estadísticas prácticas y una comprensión clara de los objetivos.