Este pilar del Google Cloud framework de arquitectura bien diseñada proporciona 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 puede ayudarte a reducir costos. Por ejemplo, cuando la carga aumenta, 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 mediante la eliminación de 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, ten en cuenta 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 te ayuden 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 cumplir con 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 obtener principios y 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 el Framework de arquitectura bien diseñada.
Principios básicos
Las recomendaciones del pilar de optimización del rendimiento del framework de arquitectura bien diseñada se asignan a los siguientes principios básicos:
- Planifica la asignación de recursos
- Aprovecha la elasticidad
- Promover el diseño modular
- Supervisa y mejora el rendimiento de forma continua
Colaboradores
Autores:
- Daniel Lees | Arquitecto de Seguridad en la Nube
- Gary Harmson | Ingeniero de Atención al cliente
- 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
- Jose 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, especialista en modernización de aplicaciones
- Ryan Cox | Arquitecto principal
- Radhika Kanakam | Gerente sénior de programas, GTM de Cloud
- 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 bien diseñado proporciona recomendaciones para ayudarte a planificar los recursos de tus cargas de trabajo enGoogle Cloud. 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 de los principios
Para cumplir con 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 aplicaciones. Por ejemplo, en la capa de almacenamiento, debes considerar 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. Ten en cuenta factores como la cantidad de usuarios, el volumen de datos y el posible crecimiento 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 que es responsable del procesamiento por lotes periódico de conjuntos de datos grandes tiene demandas de rendimiento diferentes a las de una solución de escritorio virtual interactiva. Tus estrategias de optimización deben abordar las necesidades específicas de cada carga de trabajo.
Selecciona servicios y funciones que se alineen con los objetivos de rendimiento de cada carga de trabajo. Para la optimización del rendimiento, no existe una solución única. Cuando optimizas cada carga de trabajo, todo el sistema puede lograr 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, que luego determinan 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 latencia baja para los usuarios finales, cumplas con las reglamentaciones de localidad de datos y garantices la disponibilidad de los productos y servicios Google Cloud necesarios.
- Conectividad de red: Elige servicios de red 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 aplicaciones: Cuando selecciones una plataforma de hosting, debes evaluar las ventajas y desventajas de rendimiento de cada opción. Por ejemplo, considera el bare metal, las máquinas virtuales, los contenedores y las plataformas sin servidores.
- Estrategia de almacenamiento: Elige una estrategia de almacenamiento óptima que se base en tus requisitos de rendimiento.
- Parámetros de configuración de recursos: El tipo de máquina, los 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 las funciones de seguridad, prepárate para adaptar las compensaciones de rendimiento necesarias para evitar efectos imprevistos.
Recomendaciones
Para garantizar una asignación de recursos óptima, 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 admitir el escalamiento elástico y asegurarte de que haya recursos adecuados disponibles, supervisa con regularidad 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.
Educación y promoción
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 las áreas de mejora, documenta con regularidad el rendimiento objetivo y el rendimiento real. Realiza una prueba de carga de la aplicación 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 puede proporcionar estadísticas y recomendaciones para ayudar a optimizar el uso de 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 arquitectura bien definida proporciona recomendaciones para ayudarte 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 diferentes componentes de un sistema se escalen de forma independiente. Esta escalabilidad segmentada puede ayudar a mejorar el rendimiento y la eficiencia de costos, ya que asigna recursos con precisión donde se necesitan, sin sobreaprovisionar ni subaprovisionar los recursos.
Descripción general de los principios
Los requisitos de rendimiento de un sistema influyen directamente en cuándo y cómo el sistema se escala vertical o horizontalmente. Debes evaluar la capacidad del sistema y determinar la carga que se espera que el sistema maneje en el modelo de referencia. Luego, debes determinar cómo deseas que el sistema responda a los aumentos y disminuciones de 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 demanda creciente. Para la escalabilidad 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 la escala (horizontal, vertical o ambas).
Define las circunstancias en las que el sistema aumenta o disminuye la escala. Planifica escalar manualmente los sistemas para los períodos conocidos de alto tráfico. Usa herramientas como el ajuste de escala automático, que responde a los aumentos o 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 eventos conocidos, como los períodos esperados de mayor demanda de los clientes.
Considera aumentar la escala de tu sistema antes de los períodos conocidos de alto tráfico. 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 manualmente la escala de tus sistemas antes de esas ventas para asegurarte de que el sistema pueda controlar de inmediato la carga aumentada o ajustar de inmediato los límites existentes. De lo contrario, el sistema podría tardar varios minutos en añadir recursos en respuesta a 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 eventos desconocidos o inesperados, como un aumento repentino de la demanda o el tráfico, puedes usar las funciones de ajuste de escala automático para activar el escalamiento 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 las 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 requiere que cada instancia funcione de manera óptima hasta que el uso promedio de la CPU alcance el 75%. En este ejemplo, podrías definir una política de ajuste de escala automático que cree más instancias cuando el uso de CPU alcance el límite. Estas instancias recién creadas ayudan a absorber la carga, lo que garantiza que el uso promedio de la CPU permanezca en una tasa óptima hasta que se alcance la cantidad máxima de instancias que configuraste para el MIG. Cuando disminuye la demanda, la política de ajuste de escala automático quita las instancias que ya no se necesitan.
Planifica reservas de ranuras de recursos en BigQuery o ajusta los límites de las configuraciones de ajuste de escala automático en Spanner con el ajustador de escala automático administrado.
Usa el escalamiento 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 adapte 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 con 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 usar 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.
Promociona el diseño modular
Este principio del pilar de optimización del rendimiento del Google Cloud framework bien diseñado 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 de componentes en el futuro.
Descripción general de los principios
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 la flexibilidad y la resiliencia, independientemente de si se implementó inicialmente una arquitectura monolítica o de microservicios. Cuando se descompone el sistema en módulos independientes y bien definidos con interfaces claras, se pueden escalar componentes individuales para satisfacer demandas específicas.
El escalamiento segmentado puede ayudar a optimizar el uso de recursos y reducir los costos de las siguientes maneras:
- Aprovisiona solo 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 la capacidad de mantenimiento. Las unidades más pequeñas y autónomas son más fáciles de entender, 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 de rendimiento. El aumento de la comunicación entre los módulos puede introducir latencia y sobrecarga. Esfuérzate por lograr un equilibrio entre modularidad y rendimiento. Es posible que un diseño altamente modular no sea adecuado para todos. Cuando el rendimiento es fundamental, puede ser apropiado un enfoque más acoplado. El diseño de sistemas es un proceso iterativo en el que revisas y perfeccionas tu diseño modular de forma continua.
Recomendaciones
Para promover 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 considerar los requisitos de disponibilidad y escalabilidad. Por ejemplo, si un componente tiene requisitos que son diferentes de los de los demás, puedes diseñarlo como un servicio independiente. Implementa un plan para fallas elegantes en subprocesos o servicios menos importantes que no afecten el tiempo de respuesta de los servicios principales.
Cómo diseñar para la simultaneidad y el paralelismo
Diseña tu aplicación para que admita varias tareas de forma simultánea, como procesar varias solicitudes del usuario 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 varias instancias de servicio puedan procesar 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:
Modularidad del equilibrio para la asignación flexible de recursos
Cuando sea posible, asegúrate de que cada componente use solo los recursos necesarios (como la memoria, el almacenamiento y la capacidad de procesamiento) para operaciones específicas. La asignación excesiva de recursos puede generar costos innecesarios, mientras que la asignación insuficiente de recursos 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, los frameworks y las bases de datos de programación para su compatibilidad con 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 arquitectura bien definida 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 a través de registros, seguimiento, métricas y alertas. A medida que tus aplicaciones crezcan y evolucionen, podrás usar las tendencias de estos datos para volver a evaluar tus requisitos de rendimiento. Es posible que, en algún momento, debas 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 estrategias y herramientas 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 la aplicación, la red y la experiencia del usuario final.
Mejorar el rendimiento es un esfuerzo continuo que requiere un enfoque con múltiples facetas. 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 y identificar áreas de mejora, recopila métricas de KPI.
- Para supervisar de forma continua tus sistemas en busca de problemas, usa flujos de trabajo visualizados en las herramientas de supervisión. Usa técnicas de mapeo de procesos de arquitectura para identificar redundancias e ineficiencias.
- Para crear una cultura de mejora continua, brinda capacitación y programas que respalden el crecimiento de tus empleados.
- Para fomentar la mejora continua y proactiva, incentiva a tus empleados y clientes a proporcionar comentarios continuos sobre el rendimiento de tu aplicación.
Recomendaciones
Para promover 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 objetivos comerciales. Esto requiere un conocimiento profundo de la arquitectura de tu aplicación y de los requisitos de rendimiento de cada componente de la aplicación.
Como prioridad, optimiza los componentes más críticos que influyen directamente en las funciones comerciales principales y la experiencia del usuario. Para garantizar que estos componentes sigan ejecutándose 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 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.
Supervisa el rendimiento
Supervisa de forma continua tus sistemas en la nube para detectar problemas de rendimiento y configura alertas para detectar posibles problemas. La supervisión y las alertas pueden ayudarte a detectar y corregir problemas antes de que afecten a los usuarios. El perfil de aplicaciones puede ayudar a identificar cuellos de botella y a optimizar el uso de recursos.
Puedes usar herramientas que faciliten la solución de problemas y la optimización de redes de manera eficaz. Usa la observabilidad de Google Cloud para identificar las áreas que tienen un alto consumo de CPU, memoria o red. Estas funciones 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 las rutas de alta latencia.
Incentivar la mejora continua
Crea una cultura de mejora continua que pueda beneficiar tanto a la aplicación como a la experiencia del usuario.
Proporciona a tus empleados oportunidades de capacitación y desarrollo que mejoren sus habilidades y conocimientos en técnicas de rendimiento en los servicios en la nube. Establece una comunidad de práctica (CoP) y ofrece programas de tutoría y orientación para apoyar el crecimiento de los empleados.
Para evitar una administración del rendimiento reactiva y fomentar una administración proactiva del rendimiento, fomenta los comentarios continuos de tus empleados, clientes y partes interesadas. Puedes considerar gamificar el proceso haciendo un seguimiento de los KPIs de rendimiento y presentándolos a los equipos con frecuencia en forma de 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 capturar los comentarios de los usuarios en cinco categorías:
- Felicidad
- Participación
- Adopción
- Retención
- Éxito de la tarea
Con este tipo de 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.