Este pilar del Google Cloud framework de arquitectura proporciona recomendaciones para optimizar el rendimiento de las cargas de trabajo en Google Cloud.
Este documento está dirigido a arquitectos, desarrolladores y administradores que planifican, diseñan, implementan y gestionan cargas de trabajo en Google Cloud.
Las recomendaciones de este pilar pueden ayudar a tu organización a operar de forma eficiente, mejorar la satisfacción de los clientes, aumentar los ingresos y reducir los costes. Por ejemplo, cuando se reduce el tiempo de procesamiento backend de una aplicación, los usuarios experimentan tiempos de respuesta más rápidos, lo que puede aumentar la retención de usuarios y los ingresos.
El proceso de optimización del rendimiento puede implicar un equilibrio entre el rendimiento y el coste. Sin embargo, optimizar el rendimiento a veces puede ayudarte a reducir los costes. Por ejemplo, cuando aumenta la carga, el escalado automático puede ayudar a proporcionar un rendimiento predecible asegurándose de que los recursos del sistema no se sobrecarguen. El escalado automático también te ayuda a reducir los costes, ya que elimina los recursos que no se utilizan durante los periodos de poca carga.
La optimización del rendimiento es un proceso continuo, no una actividad puntual. En el siguiente diagrama se muestran las fases del proceso de optimización del rendimiento:
El proceso de optimización del rendimiento es un ciclo continuo que incluye las siguientes fases:
- 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, ten en cuenta las características clave de la carga de trabajo y las expectativas de rendimiento.
- Diseño e implementación: usa patrones de diseño elásticos y escalables que te ayuden a cumplir tus requisitos de rendimiento.
- Monitorizar y analizar: monitoriza el rendimiento continuamente mediante registros, rastreos, métricas y alertas.
Optimizar: ten en cuenta los posibles rediseños a medida que evolucionen tus aplicaciones. Ajusta el tamaño de los recursos en la nube y usa nuevas funciones para adaptarte a los cambios en los requisitos de rendimiento.
Como se muestra en el diagrama anterior, continúa el ciclo de monitorización, reevaluación de los requisitos y ajuste de los recursos en la nube.
Para consultar los principios y las recomendaciones de optimización del rendimiento específicos de las cargas de trabajo de IA y aprendizaje automático, consulte el artículo Perspectiva de la IA y el aprendizaje automático: optimización del rendimiento del marco de trabajo Well-Architected.
Principios básicos
Las recomendaciones del pilar de optimización del rendimiento del marco de trabajo Well-Architected se corresponden con los siguientes principios básicos:
- Planificar la asignación de recursos
- Aprovechar la elasticidad
- Promueve el diseño modular
- Monitorizar y mejorar el rendimiento continuamente
Colaboradores
Autores:
- Daniel Lees | Arquitecto de seguridad en la nube
- Gary Harmson | Arquitecto principal
- Luis Ureña | Ingeniero de Relaciones con Desarrolladores
- Zach Seils | Especialista en redes
Otros colaboradores:
- Filipe Gracio, doctor | Ingeniero de clientes y especialista en IA y aprendizaje automático
- Jose Andrade | Ingeniero de clientes, especialista en SRE
- Kumar Dhanagopal | Desarrollador de soluciones entre productos
- Marwan Al Shawi | Ingeniero de clientes de partners
- Nicolas Pintaux | Ingeniero de clientes, especialista en modernización de aplicaciones
- Ryan Cox | Arquitecto principal
- Radhika Kanakam | Responsable del programa Google Cloud Well-Architected Framework
- Samantha He | Redactora técnica
- Wade Holmes | Director de Soluciones Globales
Planificar la asignación de recursos
Este principio del pilar de optimización del rendimiento del Google Cloud framework Well-Architected proporciona recomendaciones para ayudarte a planificar los recursos de tus cargas de trabajo enGoogle Cloud. Se destaca la importancia de definir requisitos detallados antes de diseñar y desarrollar aplicaciones para la implementación o la migración en la nube.
Descripción general de los principios
Para cumplir los requisitos de tu empresa, es importante que definas los requisitos de rendimiento de tus aplicaciones antes de diseñarlas y desarrollarlas. Define estos requisitos de la forma más detallada posible para la aplicación en su conjunto y para cada capa de la pila de la aplicación. Por ejemplo, en la capa de almacenamiento, debe tener en cuenta el rendimiento y las operaciones de entrada/salida por segundo (IOPS) que necesitan las aplicaciones.
Desde el principio, diseña las aplicaciones de los planes teniendo en cuenta el rendimiento y la escalabilidad. Ten en cuenta factores como el número de usuarios, el volumen de datos y el crecimiento potencial a lo largo del tiempo.
Los requisitos de rendimiento de 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 tengan conjuntos únicos de características de rendimiento. Por ejemplo, un sistema responsable del procesamiento periódico por lotes de grandes conjuntos de datos tiene requisitos de rendimiento diferentes a los de una solución de escritorio virtual interactiva. Sus estrategias de optimización deben abordar las necesidades específicas de cada carga de trabajo.
Selecciona los servicios y las funciones que se ajusten a los objetivos de rendimiento de cada carga de trabajo. No hay una solución única para optimizar el rendimiento. Si optimizas cada carga de trabajo, todo el sistema puede alcanzar un rendimiento y una eficiencia óptimos.
Ten en cuenta las siguientes características de las cargas 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 los 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, que cumplas las normativas de localización de datos y que te asegures de que los Google Cloud productos y servicios Google Cloud que necesites estén disponibles.
- Conectividad de red: elige servicios de red que optimicen el acceso a los datos y la distribución del 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 alojamiento de aplicaciones: cuando selecciones una plataforma de alojamiento, debes evaluar las ventajas y desventajas de rendimiento de cada opción. Por ejemplo, puedes usar plataformas de hardware desnudo, máquinas virtuales, contenedores y sin servidor.
- 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 el rendimiento pueden influir significativamente en el rendimiento. Además, en las primeras fases del diseño, debes tener en cuenta las funciones de seguridad adecuadas y su impacto en los recursos. Cuando planifiques funciones de seguridad, prepárate para asumir las concesiones de rendimiento necesarias para evitar efectos imprevistos.
Recomendaciones
Para asegurarte de que los recursos se asignan de forma óptima, ten en cuenta las recomendaciones de las secciones siguientes.
Configurar y gestionar cuotas
Asegúrate de que tu aplicación solo utilice los recursos necesarios, como la memoria, el almacenamiento y la potencia de procesamiento. Una asignación excesiva puede generar gastos innecesarios, mientras que una asignación insuficiente puede provocar una disminución del rendimiento.
Para adaptarse al escalado elástico y asegurarse de que haya recursos suficientes, monitorice periódicamente la capacidad de sus cuotas. Además, puedes monitorizar el uso de la cuota para identificar posibles restricciones de escalado o problemas de asignación excesiva y, a continuación, tomar decisiones fundamentadas sobre la asignación de recursos.
Ofrecer información valiosa y promover la concienciación
Informa a tus usuarios sobre los requisitos de rendimiento y proporciona recursos educativos sobre técnicas eficaces de gestión del rendimiento.
Para evaluar el progreso e identificar las áreas de mejora, documenta periódicamente el rendimiento objetivo y el rendimiento real. Realiza pruebas de carga en tu aplicación para detectar posibles puntos de interrupción y saber cómo puedes escalarla.
Monitorizar métricas de rendimiento
Usa Cloud Monitoring para analizar las tendencias de las métricas de rendimiento, los efectos de los experimentos, definir alertas para métricas críticas y realizar análisis retrospectivos.
Active Assist es un conjunto de herramientas que puede proporcionar estadísticas y recomendaciones para ayudar a optimizar la utilización de los recursos. Estas recomendaciones pueden ayudarte a ajustar la asignación de recursos y mejorar el rendimiento.
Aprovechar la elasticidad
Este principio del pilar de optimización del rendimiento del Google Cloud marco de trabajo Well-Architected proporciona recomendaciones para ayudarle a incorporar la elasticidad, que es la capacidad de ajustar los recursos de forma dinámica en función de los cambios en los requisitos de la carga de trabajo.
La elasticidad permite que los distintos componentes de un sistema se escalen de forma independiente. Este escalado específico puede ayudarte a mejorar el rendimiento y la eficiencia de los costes, ya que asigna los recursos exactamente donde se necesitan, sin sobreaprovisionar ni infraprovisionar los recursos.
Descripción general de los principios
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 gestione en condiciones normales. A continuación, debes determinar cómo quieres que responda el sistema a los aumentos y las disminuciones de la carga.
Cuando aumenta la carga, el sistema debe escalar horizontalmente, verticalmente o ambas. Para el escalado horizontal, añade nodos de réplica para asegurarte de que el sistema tiene capacidad general suficiente para satisfacer el aumento de la demanda. Para escalar verticalmente, sustituye los componentes de la aplicación por otros que tengan más capacidad, más memoria y más almacenamiento.
Cuando la carga disminuya, el sistema debe reducir la escala (horizontal, vertical o ambas).
Define las circunstancias en las que el sistema aumenta o reduce la escala. Planifica el escalado vertical manual de los sistemas en los periodos de tráfico alto conocidos. Usa herramientas como el autoescalado, que responde a los aumentos o las disminuciones de la carga.
Recomendaciones
Para aprovechar la elasticidad, consulta las recomendaciones de las siguientes secciones.
Planificar los periodos de carga máxima
Debes planificar una ruta de escalado eficiente para eventos conocidos, como los periodos en los que se espera un aumento de la demanda de los clientes.
Te recomendamos que aumentes la capacidad de tu sistema antes de los periodos de tráfico alto. Por ejemplo, si eres una empresa del sector retail, es probable que la demanda aumente durante las rebajas de temporada. Te recomendamos que aumentes la capacidad de tus sistemas manualmente antes de esas rebajas para asegurarte de que puedan gestionar inmediatamente el aumento de la carga o ajustar los límites actuales. De lo contrario, el sistema puede tardar varios minutos en añadir 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 retrasos.
En el caso de eventos desconocidos o inesperados, como un aumento repentino de la demanda o del tráfico, puede usar las funciones de escalado automático para activar el escalado elástico basado en métricas. Estas métricas pueden incluir la utilización de la CPU, la capacidad de servicio del balanceador de carga, la latencia e incluso métricas personalizadas que definas en Cloud Monitoring.
Por ejemplo, imagina una aplicación que se ejecuta en un grupo de instancias gestionado (MIG) de Compute Engine. Esta aplicación tiene el requisito de que cada instancia funcione de forma óptima hasta que la utilización media de la CPU alcance el 75%. En este ejemplo, puedes definir una política de autoescalado que cree más instancias cuando la utilización de la CPU alcance el umbral. Estas instancias recién creadas ayudan a absorber la carga, lo que asegura que la utilización media de la CPU se mantenga a un ritmo óptimo hasta que se alcance el número máximo de instancias que hayas configurado para el MIG. Cuando la demanda disminuye, la política de autoescalado elimina las instancias que ya no son necesarias.
Planifica reservas de ranuras de recursos en BigQuery o ajusta los límites de las configuraciones de escalado automático en Spanner mediante el escalador automático gestionado.
Usar el escalado predictivo
Si los componentes de tu sistema incluyen Compute Engine, debes evaluar si el escalado automático predictivo es adecuado para tu carga de trabajo. El autoescalado predictivo pronostica 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 los cambios de carga más recientes. Sin el autoescalado predictivo, una herramienta de adaptación dinámica solo puede escalar un grupo de forma reactiva, en función de los cambios en tiempo real observados en la carga. El escalado automático predictivo funciona con datos en tiempo real y datos históricos para responder a la carga actual y a la prevista.
Implementar arquitecturas sin servidor
Considera la posibilidad de implementar una arquitectura sin servidor con servicios sin servidor que sean inherentemente elásticos, como los siguientes:
A diferencia del autoescalado de otros servicios que requieren reglas de ajuste (por ejemplo, Compute Engine), el autoescalado sin servidor es instantáneo y se puede reducir verticalmente a cero recursos.
Usar el modo Autopilot para Kubernetes
Si tienes aplicaciones complejas que requieren un mayor control sobre Kubernetes, te recomendamos que uses el modo Autopilot de Google Kubernetes Engine (GKE). El modo Autopiloto ofrece automatización y escalabilidad de forma predeterminada. GKE escala automáticamente los nodos y los recursos en función del tráfico. GKE gestiona los nodos, crea nodos para tus aplicaciones y configura las actualizaciones y reparaciones automáticas.
Promocionar el diseño modular
Este principio del pilar de optimización del rendimiento del Google Cloud framework Well-Architected proporciona recomendaciones para ayudarte a promover un diseño modular. Los componentes modulares y las interfaces claras pueden permitir un escalado flexible, actualizaciones independientes y la separación de componentes en el futuro.
Descripción general de los principios
Conocer 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 disfrutar de flexibilidad y resiliencia, independientemente de si se ha implementado inicialmente una arquitectura monolítica o de microservicios. Al descomponer el sistema en módulos independientes y bien definidos con interfaces claras, puedes escalar componentes individuales para satisfacer demandas específicas.
El escalado segmentado puede ayudar a optimizar el uso de los recursos y reducir los costes de las siguientes formas:
- Solo proporciona los recursos necesarios a cada componente y asigna menos recursos a los componentes que requieren menos.
- Añade más recursos durante los periodos de mucho tráfico para mantener la experiencia de usuario.
- Elimina los recursos infrautilizados sin que el rendimiento se vea afectado.
La modularidad también mejora el mantenimiento. Las unidades más pequeñas e independientes son más fáciles de entender, depurar y actualizar, lo que puede dar lugar a ciclos de desarrollo más rápidos y a una reducción del riesgo.
Aunque la modularidad ofrece ventajas significativas, debes evaluar las posibles concesiones en cuanto al rendimiento. El aumento de la comunicación entre módulos puede introducir latencia y sobrecarga. Busca un equilibrio entre la modularidad y el rendimiento. Un diseño muy modular puede no ser adecuado para todos los casos. Cuando el rendimiento es fundamental, puede ser adecuado un enfoque más acoplado. El diseño del sistema es un proceso iterativo en el que revisas y perfeccionas continuamente tu diseño modular.
Recomendaciones
Para fomentar los diseños modulares, tenga en cuenta las recomendaciones de las siguientes secciones.
Diseñar con bajo acoplamiento
Diseña una arquitectura con bajo acoplamiento. Los componentes independientes con dependencias mínimas pueden ayudarte a crear aplicaciones escalables y resilientes. Al planificar los límites de tus servicios, debes tener en cuenta los requisitos de disponibilidad y escalabilidad. Por ejemplo, si un componente tiene requisitos diferentes a los de los demás, puedes diseñarlo como un servicio independiente. Implementa un plan para que los subprocesos o servicios menos importantes fallen de forma controlada y no afecten al tiempo de respuesta de los servicios principales.
Diseñar para la simultaneidad y el paralelismo
Diseña tu aplicación para que admita varias tareas simultáneamente, 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 procesarse al mismo tiempo en varias instancias de servicio. La simultaneidad de tareas te permite usar funciones como el autoescalado para aumentar la asignación de recursos en productos como los siguientes:
Equilibra la modularidad para asignar recursos de forma flexible
Siempre que sea posible, asegúrate de que cada componente use solo los recursos necesarios (como memoria, almacenamiento y potencia de procesamiento) para operaciones específicas. Si se asignan demasiados recursos, se pueden generar costes innecesarios, mientras que, si se asignan pocos, se puede poner en riesgo el rendimiento.
Usar interfaces bien definidas
Asegúrate de que los componentes modulares se comuniquen de forma eficaz mediante interfaces claras y estandarizadas (como APIs y colas de mensajes) para reducir la sobrecarga de las capas de traducción o del tráfico innecesario.
Usar modelos sin estado
Un modelo sin estado puede ayudarte a asegurarte de que puedes gestionar cada solicitud o interacción con el servicio de forma independiente de las solicitudes anteriores. Este modelo facilita la escalabilidad y la recuperación, ya que puedes aumentar, reducir o reiniciar el servicio sin perder los datos necesarios para las solicitudes o los procesos en curso.
Elegir 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 comprobar si admiten la modularidad.
Para obtener más información, consulta los siguientes recursos:
Monitorizar y mejorar el rendimiento de forma continua
Este principio del pilar de optimización del rendimiento del Google Cloud marco de trabajo Well-Architected proporciona recomendaciones para ayudarte a monitorizar y mejorar el rendimiento de forma continua.
Después de desplegar las aplicaciones, monitoriza continuamente su rendimiento mediante registros, monitorización, 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, tengas que rediseñar partes de tus aplicaciones para mantener o mejorar su rendimiento.
Descripción general de los principios
El proceso de mejora continua del rendimiento requiere herramientas y estrategias de monitorización sólidas. Las herramientas de observabilidad de la nube pueden ayudarte a recoger indicadores clave de rendimiento (KPIs), como la latencia, el rendimiento, las tasas de error y la utilización de recursos. Los entornos de nube ofrecen varios métodos para llevar a cabo evaluaciones de rendimiento granulares en la aplicación, la red y la experiencia del usuario final.
Mejorar el rendimiento es un proceso continuo que requiere un enfoque multifacético. Los siguientes mecanismos y procesos clave pueden ayudarte a mejorar el rendimiento:
- Para ofrecer una orientación clara y monitorizar el progreso, define objetivos de rendimiento que se ajusten a tus objetivos de negocio. Establece objetivos SMART: específicos, medibles, alcanzables, relevantes y con plazos concretos.
- Para medir el rendimiento e identificar áreas de mejora, recopila métricas de KPIs.
- Para monitorizar continuamente tus sistemas en busca de problemas, usa flujos de trabajo visualizados en herramientas de monitorización. Usa técnicas de mapeo de procesos de arquitectura para identificar redundancias e ineficiencias.
- Para crear una cultura de mejora continua, ofrece formación y programas que apoyen el crecimiento de tus empleados.
- Para fomentar la mejora proactiva y continua, ofrece incentivos a tus empleados y clientes para que te envíen comentarios periódicos sobre el rendimiento de tu aplicación.
Recomendaciones
Para fomentar los diseños modulares, tenga en cuenta las recomendaciones de las siguientes secciones.
Define objetivos y métricas de rendimiento claros
Define objetivos de rendimiento claros que se ajusten a tus objetivos de negocio. Para ello, debes conocer en profundidad la arquitectura de tu aplicación y los requisitos de rendimiento de cada componente de la aplicación.
Prioriza la optimización de los componentes más importantes que influyen directamente en las funciones empresariales principales y en la experiencia de usuario. Para asegurarse de que estos componentes sigan funcionando de forma eficiente y satisfagan sus necesidades empresariales, defina objetivos de rendimiento específicos y medibles. Estos objetivos pueden incluir tiempos de respuesta, tasas de error 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, ofrecer una experiencia fluida y de alto rendimiento a tus usuarios.
Supervisar el rendimiento
Monitoriza continuamente tus sistemas en la nube para detectar problemas de rendimiento y configura alertas para cualquier problema potencial. La monitorización y las alertas pueden ayudarte a detectar y solucionar problemas antes de que afecten a los usuarios. La creación de perfiles de aplicaciones puede ayudar a identificar cuellos de botella y optimizar el uso de los recursos.
Puedes usar herramientas que faciliten la solución de problemas y la optimización de la red. Usa Google Cloud Observability para identificar las áreas que tienen un consumo elevado de CPU, memoria o red. Estas funciones pueden ayudar a los desarrolladores a mejorar la eficiencia, reducir los costes y optimizar la experiencia de usuario. Network Intelligence Center muestra visualizaciones de la topología de tu infraestructura de red y puede ayudarte a identificar las rutas con latencia alta.
Incentivar la mejora continua
Crea una cultura de mejora continua que pueda beneficiar tanto a la aplicación como a la experiencia de usuario.
Ofrece a tus empleados oportunidades de formación y desarrollo que mejoren sus habilidades y conocimientos sobre técnicas de rendimiento en los servicios en la nube. Crea una comunidad de práctica y ofrece programas de mentoría y asesoramiento para apoyar el crecimiento de los empleados.
Para evitar la gestión del rendimiento reactiva y fomentar la gestión del rendimiento proactiva, anima a tus empleados, clientes y partes interesadas a que te envíen comentarios de forma continua. Puedes gamificar el proceso monitorizando los KPIs de rendimiento y presentando esas métricas a los equipos con frecuencia en forma de tabla de clasificación.
Para conocer tu rendimiento y la satisfacción de los usuarios a lo largo del tiempo, te recomendamos que midas sus comentarios de forma cuantitativa y cualitativa. El marco HEART puede ayudarte a recoger los comentarios de los usuarios en cinco categorías:
- Satisfacción
- Interacción
- Adopción
- Retención
- Éxito de la tarea
Si utilizas un marco de este tipo, puedes incentivar a los ingenieros con comentarios basados en datos, métricas centradas en el usuario, estadísticas útiles y una comprensión clara de los objetivos.