Compartir a través de


Recomendaciones para diseñar una estrategia de escalado confiable

Se aplica a esta recomendación de lista de comprobación de confiabilidad de Azure Well-Architected Framework:

RE:06 Implemente una estrategia de escalado oportuna y confiable en los niveles de aplicación, datos e infraestructura. Base la estrategia de escalado en patrones de uso reales o previstos y minimice la intervención manual.

En esta guía se describen las recomendaciones para diseñar una estrategia de escalado confiable.

Definiciones

Término Definición
Escalado vertical Un enfoque de escalado que agrega capacidad de proceso a los recursos existentes.
Escalado horizontal Un enfoque de escalado que agrega instancias de un tipo determinado de recurso.
Escalado automático Un enfoque de escalado que agrega o quita automáticamente los recursos cuando se cumple un conjunto de condiciones.

Nota:

Las operaciones de escalado pueden ser estáticas (el escalado diario programado regularmente para dar cabida a patrones de carga normales), automático (un proceso automatizado en respuesta a las condiciones que se cumplen) o manual (un operador realiza una operación de escalado único en reacción a un cambio de carga imprevisto). El escalado vertical y horizontal se puede realizar a través de cualquiera de estos métodos. Sin embargo, el escalado vertical automático requiere desarrollo de automatización personalizada adicional y puede provocar tiempo de inactividad en función de los recursos que se escalan.

El sistema debe diseñarse para que sea horizontalmente escalable. Evite realizar suposiciones sobre la afinidad de instancia. No diseñe soluciones que requieran que el código siempre se ejecute en una instancia específica de un proceso. Al escalar horizontalmente un servicio en la nube o un sitio web, no suponga que una serie de solicitudes del mismo origen siempre se enrutan a la misma instancia. Por la misma razón, diseñe los servicios sin estado para evitar la necesidad de disponer de una serie de solicitudes de que una aplicación siempre se dirija a la misma instancia de un servicio. Al diseñar un servicio que lee los mensajes de una cola y los procesa, no realice ninguna suposición sobre qué instancia del servicio controla un mensaje específico. El escalado automático podría iniciar más instancias de un servicio a medida que crece la longitud de la cola. El patrón De consumidores competidores describe cómo controlar este escenario.

Para usar el tiempo crítico en las decisiones de escalado automático, resulta útil que una biblioteca agregue automáticamente la información pertinente a los encabezados de los mensajes mientras se envían y procesan. Una biblioteca que proporciona esta funcionalidad es NServiceBus.

Estrategias clave de diseño

Diseño según los patrones de carga

Para diseñar una estrategia de escalado confiable para las cargas de trabajo, céntrese en identificar patrones de carga para los flujos de usuario y sistema para cada carga de trabajo que conduce a una operación de escalado. Estos son ejemplos de diferentes patrones de carga y sus estrategias de escalado correspondientes:

  • Estático: Cada noche por 11 p. m. EST, el número de usuarios activos de la aplicación cae por debajo de 100, y el uso de CPU para los servidores de aplicaciones cae en 90% en todos los nodos. Para controlar esto, puede programar la reducción vertical de los nodos de proceso en el recuento mínimo (2) entre las 11 p. m. y las 6 am EST.

  • Dinámico, normal y predecible: Cada lunes por la mañana, 1000 empleados en varias regiones inician sesión en el sistema ERP. Para administrarlo, puede programar el escalado horizontal de los nodos de proceso a la capacidad diaria normal antes de que la primera región comience a funcionar.

  • Dinámico, irregular y predecible: Un lanzamiento de producto se produce el primer día del mes y hay datos históricos de los lanzamientos anteriores sobre cómo aumenta el tráfico en estas situaciones. Para solucionar esto, puede definir una escala vertical programada única de las instancias de proceso y base de datos en la mañana de un lanzamiento de producto y reducir verticalmente después de una semana.

  • Dinámico, irregular e imprevisible: Un evento a gran escala provoca un pico en la demanda de un producto. Por ejemplo, las empresas que fabrican y venden dehumificadores pueden experimentar un aumento repentino en el tráfico después de un huracán u otro evento de inundación cuando las personas en áreas afectadas necesitan secar habitaciones en sus hogares. Para controlar esto, puede establecer umbrales de escalado automático para tener en cuenta los picos de tráfico no planeados.

Adaptar las estrategias de escalado para ajustarse a componentes o flujos individuales

No hay ninguna estrategia de escalado de un solo tamaño. Los diferentes servicios en la nube tienen diferentes grados de compatibilidad con el escalado y diferentes enfoques para el escalado. Por ese motivo, es importante comprender cómo se admite e implementa el escalado en todos los componentes de la carga de trabajo para diseñar la estrategia de escalado general. Puede aplicar estrategias de escalado en el nivel de componente individual o en el nivel de flujo, en función del diseño arquitectónico. Al determinar cómo implementará el escalado en la carga de trabajo, tenga en cuenta estos factores:

  • Esos componentes que no se pueden escalar horizontalmente. Un ejemplo sería bases de datos relacionales grandes que no tienen el particionamiento habilitado y no se puede refactorizar sin un impacto significativo. Documente los límites de recursos publicados por el proveedor de nube y supervise los recursos de cerca. Incluya esos recursos específicos en su planeación futura para migrar a servicios escalables.

  • Relación de los componentes del flujo en términos de orden de operaciones de escalado. Asegúrese de que no sobrecarga accidentalmente un componente de bajada mediante el escalado primero de un componente ascendente.

  • Cualquier elemento de aplicación con estado que pueda interrumpir una operación de escalado y cualquier afinidad de sesión (o permanencia de sesión) que se implemente. La permanencia puede limitar la capacidad de escalado e introducir puntos únicos de error. Diseñe la carga de trabajo para que no tenga estado en la medida en que sea práctica.

  • Cuellos de botella potenciales. El escalado horizontal no corrige todos los problemas de rendimiento. Por ejemplo, si la base de datos de back-end es el cuello de botella, no ayuda a agregar más servidores web. Identifique y resuelva primero los cuellos de botella en el sistema antes de agregar más instancias. Los elementos con estado del sistema son la causa más probable de los cuellos de botella.

  • Control de tareas de larga duración. Diseñe una tarea de larga duración para admitir el escalado horizontal y el escalado horizontal. Sin cuidado debido, esta tarea podría impedir que una instancia de un proceso se cierre limpiamente cuando el sistema se escala. O bien, podría perder datos si el proceso finaliza forzosamente. Lo ideal es refactorizar una tarea de larga duración y dividir el procesamiento que realiza en fragmentos discretos más pequeños. El patrón Canalizaciones y filtros proporciona un ejemplo de cómo puede lograr esta solución.

Elección de la tecnología correcta

La toma de decisiones tecnológicas bien fundamentadas con el escalado le ayudará a garantizar que la carga de trabajo pueda cumplir los objetivos de confiabilidad a medida que evoluciona la carga de trabajo. Investigue las capacidades de escalado que se ofrecen para diferentes recursos que ofrecen una funcionalidad similar y elija la mejor combinación para sus planes de crecimiento futuros. Por ejemplo, puede tener varias opciones para almacenes de datos que pueden hospedar el tipo determinado de bases de datos que usará. Sin embargo, una opción podría tener una mejor funcionalidad de escalado de forma predeterminada que otras, lo que podría hacer que sea una mejor opción para la carga de trabajo.

  • Aproveche las ventajas de los servicios que se escalan automáticamente. Cuando sea práctico, use servicios SaaS que se escalan automáticamente sin ninguna configuración o entrada. Los servicios globales, como microsoft Entra ID , ofrecen esta funcionalidad. Las soluciones sin servidor también ofrecen escalado automático y pueden ser buenas opciones para muchos casos de uso.

  • Aproveche los servicios que ofrecen escalado estándar. Muchos servicios paaS ofrecen características de escalado integradas y fáciles de usar que puede configurar para satisfacer sus requisitos de confiabilidad. Por ejemplo, puede configurar el escalado de rendimiento de Cosmos DB para satisfacer sus requisitos concretos.

Automatización del escalado

Automatice las operaciones de escalado de los componentes de carga de trabajo en la medida en que sea práctico. Al usar recursos que tienen funcionalidad de escalado automático configurable, compile la lógica de configuración en el código de implementación de infraestructura como código (IaC). Cuando se usan recursos que no tienen el escalado automático lista para usar, la automatización de compilación para realizar operaciones de escalado mediante herramientas de automatización nativa e incluir el código de automatización en el código iaC.

Si basa la estrategia de escalado automático en contadores que miden los procesos empresariales, como el número de pedidos realizados por hora o el tiempo medio de ejecución de una transacción compleja, asegúrese de que comprende completamente la relación entre los resultados de estos tipos de contadores y los requisitos de capacidad de proceso reales. Es posible que sea necesario escalar más de un componente o unidad de proceso en respuesta a los cambios en los contadores de procesos empresariales.

Tenga en cuenta que el escalado automático podría no ser el mecanismo más adecuado para controlar una ráfaga repentina en una carga de trabajo. Se tarda tiempo en aprovisionar e iniciar nuevas instancias de un servicio o agregar recursos a un sistema, y la demanda máxima podría pasar por el tiempo que estos recursos adicionales están disponibles. En este escenario, podría ser mejor limitar el servicio. Para más información, consulte el patrón de limitaciones.

Por el contrario, si necesita la capacidad de procesar todas las solicitudes cuando el volumen fluctúa rápidamente y el costo no es un factor de contribución importante, considere la posibilidad de usar una estrategia de escalado automático agresiva que inicie más instancias más rápidamente. También puede usar una directiva programada que inicie un número suficiente de instancias como para satisfacer la carga máxima antes de que se espere esa carga.

Elegir las unidades de escalado adecuadas

Base la estrategia de escalado en unidades de escalado, que son la agrupación lógica de componentes para escalar juntas y los incrementos de escala que se van a usar (como pasar de una SKU de máquina virtual a otra). Las opciones que se deben tener en cuenta son:

  • Escalado individual de recursos: es posible que solo necesite escalar máquinas virtuales o bases de datos individuales.

  • Escalado de un componente completo al mismo tiempo: Por ejemplo, es posible que tenga una API de microservicio que se compone de una instancia de App Service, una base de datos y colas que necesiten escalar simultáneamente.

  • Escalado de la solución completa: para cargas de trabajo complejas o críticas, el escalado de toda la solución como marca de implementación puede simplificar la estrategia de escalado. En lugar de administrar las programaciones de escalado y los umbrales de escalado automático de muchos recursos distintos, puede aplicar un conjunto limitado de definiciones de escalado a una marca de implementación y, a continuación, reflejarlo en los stamps según sea necesario.

Importante

Establezca un límite máximo en el número de unidades de escalado que se pueden asignar automáticamente para evitar el exceso de costos.

Optimización del tiempo de inicialización de la unidad de escalado

Al diseñar la estrategia de escalado, tenga en cuenta que los distintos servicios se escalan en diferentes escalas temporales. Hay algunos servicios que se escalan casi instantáneamente y otros que se escalan mucho más lentos. Por ejemplo, las instancias de API Management pueden tardar hasta 45 minutos en finalizar sus operaciones de escalado. Para tener en cuenta la escala temporal de la operación de escalado, planee correctamente realizar la operación de escalado antes de que el aumento esperado de la carga alcance la carga de trabajo. Otras recomendaciones que se deben tener en cuenta son:

  • Inicialice previamente los nodos que se implementarán para reducir el tiempo necesario para la inicialización.

  • Permita un tiempo de búfer alrededor de los cambios de configuración antes de realizar más cambios o usar el sistema de forma poco común. Por ejemplo, puede desasignar una instancia de back-end de App Gateway a través de un cambio de regla. Deberá esperar a que las conexiones se desagüen de esa instancia antes de que se puedan quitar de forma segura.

  • Recursos de aprovisionamiento excesivo para controlar una mayor carga mientras se realiza el escalado. Puede asegurarse de que las máquinas virtuales se ejecutan normalmente en 75% capacidad de uso para asegurarse de que pueden controlar una mayor carga mientras se realiza el escalado horizontal.

  • Ajuste los umbrales de escalado con la supervisión. Use la supervisión de la capacidad para asegurarse de que los umbrales de escalado desencadenan operaciones de escalado.

Escalado de almacenes de datos mediante particionamiento y creación de particiones

Optimice la confiabilidad del patrimonio de datos incluyiéndolo en la estrategia de escalado. La creación de particiones de datos propaga una base de datos entre recursos de almacenamiento lógico o físico, quitando puntos únicos de error. Elija la mejor estrategia de creación de particiones para su caso de uso.

  • Particionamiento horizontal (particionamiento): las particiones (particiones) se colocan en almacenes de datos independientes, pero todas las particiones tienen el mismo esquema. Cada partición contiene un subconjunto de la base de datos. Este es un buen enfoque para optimizar la confiabilidad, ya que ayuda a facilitar el equilibrio de carga y minimiza la carga de las operaciones al tratar con problemas. Las particiones se pueden replicar para una mayor confiabilidad.

  • Creación de particiones verticales: cada partición contiene un subconjunto de los campos de los elementos del almacén de datos. Los campos se dividen según su patrón de uso.

  • Creación de particiones funcionales: los datos se agregan según cómo cada contexto enlazado del sistema usa los datos.

Considere la posibilidad de combinar estas estrategias al diseñar un esquema de partición. Por ejemplo, puede dividir los datos en particiones y, a continuación, usar particiones verticales para subdividir aún más los datos de cada partición.

Optimice la estrategia de partición para mejorar la escalabilidad. Analice los patrones de acceso a datos para determinar qué operaciones requieren la mayoría de los recursos de procesamiento y equilibrar las particiones para asegurarse de que cada uno tiene suficientes recursos para controlar los requisitos de escalabilidad.

Para obtener instrucciones detalladas sobre la creación de particiones y el particionamiento, consulte la guía de diseño.

Supervisión de las operaciones de escalado

El mecanismo de escalado automático debe supervisar el proceso de escalado automático y registrar los detalles de cada evento de escalado automático (lo que lo desencadenó, qué recursos se agregaron o quitaron y cuándo). Si crea un mecanismo de escalado automático personalizado, asegúrese de que incorpora esta funcionalidad. Analice proactivamente la información para ayudar a medir la eficacia de la estrategia de escalado automático y ajustarla si es necesario.

Facilitación de Azure

Hay una característica de escalado automático disponible en muchos servicios de Azure. Permite configurar fácilmente las condiciones para escalar automáticamente instancias horizontalmente. Algunos servicios tienen una funcionalidad limitada o no integrada para escalar verticalmente automáticamente, por lo que debe asegurarse de documentar estos casos y definir procesos para tratar el escalado.

Muchos servicios de Azure ofrecen API que puede usar para diseñar operaciones de escalado automático personalizadas mediante Azure Automation, como los ejemplos de código en Escalabilidad automática de Azure IoT Hub. Puede usar herramientas como KEDA para el escalado automático controlado por eventos, que está disponible en Azure Kubernetes Service y Azure Container Apps.

El escalado automático de Azure Monitor proporciona un conjunto común de funcionalidades de escalado automático para Azure Virtual Machine Scale Sets, Azure App Service, Azure Spring Apps y mucho más. El escalado se puede realizar según una programación o en función de una métrica en tiempo de ejecución, como el uso de CPU o memoria. Consulte la guía de Azure Monitor para conocer los procedimientos recomendados.

Compromisos

Equilibrio: el escalado vertical tiene implicaciones de costos, por lo que optimizar la estrategia para reducir verticalmente lo antes posible para ayudar a mantener los costos bajo control. Asegúrese de que la automatización que está usando para escalar verticalmente también tiene desencadenadores para reducir verticalmente.

Ejemplo

Consulte la guía de escalado de la arquitectura de referencia de línea base de AKS.

Lista de comprobación de fiabilidad

Consulte el conjunto completo de recomendaciones.