Compartir vía


Recomendaciones para optimizar el escalado y la creación de particiones

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

PE:05 Optimice el escalado y la creación de particiones. Incorpore el escalado y las particiones confiables y controlados. El diseño de la unidad de escalado de la carga de trabajo es la base de la estrategia de escalado y creación de particiones.

En esta guía se describen las recomendaciones para escalar y crear particiones de una carga de trabajo. El escalado es la capacidad de aumentar o disminuir los recursos asignados a una carga de trabajo en función de la demanda. La creación de particiones implica dividir la carga de trabajo en unidades más pequeñas y administrables para distribuir los datos y el procesamiento entre varios recursos. Una carga de trabajo que no escala o partición puede experimentar un rendimiento deficiente en períodos de alta demanda y una capacidad infrautilizada en períodos de baja demanda.

Definiciones

Término Definición
Escalado automático Característica que ajusta automáticamente los límites de capacidad de un servicio en función de las configuraciones predefinidas, lo que le permite escalar o reducir verticalmente según sea necesario.
Capacity Límite superior o capacidad máxima de un servicio o característica determinado.
Afinidad de cliente (afinidad de sesión) Enrutamiento intencionado de solicitudes de un solo cliente a una sola instancia de servidor para ayudar a garantizar una administración de sesión coherente.
Coherencia (base de datos distribuida) Uniformidad de los datos en varios nodos de una base de datos distribuida, lo que garantiza que todas las réplicas tengan los mismos datos en un momento dado.
Coherencia (base de datos relacional) La propiedad de una transacción que lleva una base de datos de un estado válido a otro, manteniendo la integridad de los datos.
Nivel de coherencia Configuración que define cómo y cuándo se replican los datos en un sistema de base de datos distribuido, lo que determina el equilibrio entre la coherencia y el rendimiento.
Bloqueo de datos Mecanismo utilizado para evitar actualizaciones simultáneas en los mismos datos.
Escalado horizontal Enfoque de escalado que agrega instancias de un tipo determinado de recurso.
Simultaneidad optimista Enfoque para actualizar bases de datos que usan instantáneas para realizar actualizaciones en lugar de mecanismos de bloqueo tradicionales.
Creación de particiones Proceso de dividir físicamente los datos en almacenes de datos independientes.
Escalabilidad La capacidad de una carga de trabajo para cambiar dinámicamente sus límites de capacidad para adaptarse a distintos niveles de demanda.
Unidad de escalado Un grupo de recursos que se escalan proporcionalmente juntos.
Afinidad de estado Almacenamiento de datos de sesión de cliente en un único servidor para que el mismo servidor controle las solicitudes posteriores del mismo cliente.
Escalado vertical Enfoque de escalado que agrega capacidad de proceso a los recursos existentes.

Estrategias de diseño principales

Tanto el escalado como la creación de particiones contribuyen a la eficiencia del rendimiento asegurándose de que los recursos se usan de forma eficaz y la carga de trabajo puede controlar cargas variables. Estas prácticas son especialmente importantes en entornos en la nube en los que las aplicaciones deben ser flexibles y adaptables a las demandas cambiantes. El escalado garantiza que puede expandir la capacidad de la carga de trabajo para satisfacer las crecientes demandas. La creación de particiones permite dividir las tareas o los datos de forma eficaz para controlar estas necesidades crecientes. La base de ambos procesos es el diseño de unidad de escalado de la carga de trabajo. Determina cómo la carga de trabajo debe crecer y distribuir tareas. Al incorporar un enfoque confiable y controlado para escalar y crear particiones, puede dar un lado a las posibles ineficacias de la carga de trabajo.

Optimización del escalado

Optimizar el escalado es el proceso de ajustar el número de servidores, instancias o recursos para satisfacer las demandas fluctuantes de una carga de trabajo. Garantiza que la carga de trabajo pueda controlar el aumento del tráfico o las demandas sin experimentar degradación del rendimiento ni tiempo de inactividad.

Elección de una estrategia de escalado

La elección de una estrategia de escalado implica decidir entre métodos verticales u horizontales para mejorar la capacidad de una carga de trabajo en función de sus requisitos específicos. La selección de la estrategia correcta garantiza que los recursos se ajusten de forma eficaz para satisfacer las demandas de carga de trabajo sin uso excesivo ni desperdicio. Para elegir la estrategia de escalado adecuada, debe comprender los casos de uso para el escalado vertical y horizontal y cómo satisfacen las necesidades de la carga de trabajo.

Descripción del escalado vertical. Con el escalado vertical, puede aumentar la capacidad de un único recurso, como actualizar a un servidor o tamaño de instancia más grande. El escalado vertical es útil cuando la carga de trabajo puede beneficiarse de una mayor potencia de procesamiento, memoria u otros recursos dentro de una sola instancia. El escalado vertical es adecuado para las cargas de trabajo que no se dividen fácilmente en partes más pequeñas o cuando la arquitectura de la aplicación no admite el escalado horizontal.

Comprender el escalado horizontal. Con el escalado horizontal, puede agregar más instancias o recursos para distribuir la carga de trabajo entre varios servidores. El escalado horizontal ofrece ventajas como mejorar la resistencia, aumentar la capacidad y la capacidad de controlar el aumento del tráfico o las demandas de carga de trabajo. Es eficaz para las aplicaciones nativas de la nube diseñadas para ejecutarse en varios nodos. El escalado horizontal es adecuado para las cargas de trabajo que se pueden dividir en partes más pequeñas que se ejecutan de forma independiente.

Descripción de la carga de trabajo. La idoneidad del escalado vertical u horizontal depende de las características y requisitos específicos de la carga de trabajo. La supervisión y las pruebas de rendimiento normales en las siguientes áreas pueden ayudar a optimizar la estrategia de escalado a lo largo del tiempo:

  • Requisitos: comprenda los requisitos específicos de la carga de trabajo teniendo en cuenta factores como las demandas de recursos, las necesidades de escalabilidad y las limitaciones de la carga de trabajo.

  • Unidades de escalado: cree un diseño de unidad de escalado para los componentes que se espera que se escalen juntos. Por ejemplo, 100 máquinas virtuales pueden requerir dos colas y tres cuentas de almacenamiento para controlar la carga de trabajo adicional. La unidad de escalado sería de 100 máquinas virtuales, dos colas y tres cuentas de almacenamiento. Debe escalar de forma independiente todos los componentes que experimentan una fluctuación de uso de capacidad.

  • Arquitectura: evalúe el diseño de la arquitectura de la aplicación. Algunas aplicaciones pueden diseñarse de forma inherente para escalar horizontalmente, con componentes sin estado que se pueden distribuir fácilmente entre varias instancias. Otras aplicaciones pueden tener componentes con estado o dependencias que hacen que el escalado vertical sea más adecuado. Evalúe los requisitos de escalabilidad y elasticidad de la carga de trabajo.

Diseño de la infraestructura para escalar

El diseño de la infraestructura a escala es el proceso de creación de una arquitectura que puede controlar las crecientes demandas y la carga de trabajo agregando o ajustando los recursos según sea necesario. Implica planear e implementar soluciones que se pueden escalar horizontal o verticalmente para dar cabida al crecimiento. Las estrategias incluyen evitar singletons que se pueden convertir en cuellos de botella y desacoplar componentes de la aplicación para garantizar una escalabilidad independiente. Al diseñar una carga de trabajo para que sea escalable, puede distribuir eficazmente la carga de trabajo entre varios recursos, lo que evita cuellos de botella y maximiza el uso de recursos.

Evite singletons. Debe evitar el uso de un único recurso centralizado para toda la carga de trabajo. En su lugar, distribuya la carga de trabajo entre varios recursos para mejorar la escalabilidad, la tolerancia a errores y el rendimiento. Explore algunos ejemplos específicos y consideraciones de diseño para evitar singletons en los recursos de carga de trabajo:

  • Nivelación de carga basada en cola: en lugar de depender de una sola cola para procesar mensajes, considere la posibilidad de crear particiones de la carga de trabajo entre varias colas para distribuir la carga de procesamiento. Proporciona una mejor escalabilidad y procesamiento paralelo.

  • Procesamiento de datos: los patrones singleton a menudo aparecen en escenarios de procesamiento de datos en los que el procesamiento no se ramificada. Interrumpa las tareas de larga duración en tareas más pequeñas que se pueden escalar mejor para distribuir la carga de trabajo entre varios recursos y aprovechar el paralelismo.

  • Patrones de diseño: los patrones de diseño como Fan-out/Fan-in o Pipes and Filters pueden ayudar a evitar singletons en flujos de trabajo. Estos patrones permiten la distribución de tareas de procesamiento en varios recursos y promueven la escalabilidad y flexibilidad.

Desacoplar componentes. El desacoplamiento de los componentes de la aplicación es un aspecto importante del diseño de la escalabilidad. Implica dividir la aplicación en componentes más pequeños e independientes que pueden funcionar y escalar de forma independiente en función de los requisitos específicos de la carga de trabajo. Por ejemplo, si un componente requiere más recursos debido a una mayor demanda, puede escalar ese componente sin afectar a los demás. Esta flexibilidad garantiza una asignación de recursos eficaz y evita cuellos de botella. Al desacoplar componentes, puede aislar errores y minimizar el efecto en la aplicación general. Si se produce un error en un componente, los demás componentes pueden seguir funcionando de forma independiente.

Los componentes desacoplados son más fáciles de mantener y actualizar. Los cambios o actualizaciones de un componente se pueden realizar sin afectar a los demás porque son independientes. Siga estas instrucciones para desacoplar los componentes de la aplicación para la escalabilidad:

  • Separación de preocupaciones: identifique las responsabilidades y funcionalidades de la aplicación. Divida las responsabilidades en componentes independientes en función de sus tareas específicas. Por ejemplo, puede tener componentes independientes para la autenticación de usuarios, el procesamiento de datos y la interfaz de usuario.

  • Acoplamiento flexible: diseñe los componentes para comunicarse entre sí a través de interfaces y protocolos bien definidos. Este diseño reduce las dependencias entre componentes y permite un reemplazo o escalado más sencillo de componentes individuales.

  • Comunicación asincrónica: use patrones de comunicación asincrónicos, como colas de mensajes o arquitecturas controladas por eventos, para desacoplar más los componentes. Estos patrones permiten a los componentes procesar tareas de forma independiente a su propio ritmo, lo que mejora la escalabilidad general.

  • Microservicios: considere la posibilidad de implementar microservicios, que son servicios pequeños e independientes que se centran en funcionalidades empresariales específicas. Cada microservicio se puede desarrollar, implementar y escalar de forma independiente, lo que proporciona mayor flexibilidad y escalabilidad.

Diseño de la aplicación para escalar

A medida que escala una carga de trabajo, debe diseñar la aplicación para distribuir la carga. Solo porque puede agregar más réplicas en el nivel de infraestructura no significa que la aplicación pueda usar las réplicas. El diseño de una aplicación a escala consiste en estructurar una aplicación para que pueda controlar mayores demandas mediante la distribución de su carga de trabajo entre recursos. Evite soluciones que requieran afinidad de cliente, bloqueo de datos o afinidad de estado para una sola instancia, si es posible. Quiere enrutar un cliente o un proceso a un recurso que tenga capacidad disponible. Para diseñar la escalabilidad de las aplicaciones, tenga en cuenta las estrategias siguientes:

Elimine el estado de sesión del lado servidor. Debe diseñar aplicaciones para que no sean con estado siempre que sea posible. En el caso de las aplicaciones con estado, debe usar un almacén de estado externo al servidor. Externalizar el estado de sesión es la práctica de almacenar datos de sesión fuera del servidor de aplicaciones o el contenedor. Puede externalizar el estado de sesión para distribuir los datos de sesión entre varios servidores o servicios, lo que permite la administración de sesiones sin problemas en un entorno distribuido. Tenga en cuenta lo siguiente al externalizar el estado de sesión:

  • Evalúe los requisitos de la sesión. Comprenda los datos de sesión que deben almacenarse y administrarse. Considere los atributos de sesión, los tiempos de espera de sesión y los requisitos específicos para la replicación o persistencia de la sesión. Determine el tamaño del estado de la sesión y la frecuencia de las operaciones de lectura y escritura.

  • Elija una solución. Seleccione una solución de almacenamiento que se alinee con sus necesidades de rendimiento y escalabilidad. Entre las opciones se incluyen el uso de una caché distribuida, una base de datos o un servicio de estado de sesión. Tenga en cuenta factores como la coherencia de los datos, la latencia y la escalabilidad al elegir.

  • Configurar la aplicación. Actualice la aplicación para usar la solución de almacenamiento de estado de sesión elegida. Es posible que tenga que cambiar los archivos de configuración o el código de la aplicación para conectarse al servicio de almacenamiento externo.

  • Actualice la lógica. Cambie la lógica de administración de sesiones de la aplicación para almacenar y recuperar datos de sesión de la solución de almacenamiento externo. Es posible que tenga que usar las API o las bibliotecas proporcionadas por la solución de almacenamiento para administrar el estado de sesión.

Elimine la afinidad de cliente. La afinidad de cliente también se conoce como afinidad de sesión o sesiones permanentes. Cuando se elimina la afinidad de cliente, se distribuyen las solicitudes de cliente uniformemente entre varias réplicas o servidores, sin enrutar todas las solicitudes de un cliente a la misma réplica. Esta configuración puede mejorar la escalabilidad y el rendimiento de las aplicaciones al permitir que cualquier réplica disponible procese las solicitudes.

Revise el algoritmo de equilibrio de carga. Un algoritmo de equilibrio de carga puede provocar un anclaje de cliente accidental y artificial en el que se envían demasiadas solicitudes a una instancia de back-end. El anclaje puede ocurrir si el algoritmo está configurado para enviar siempre solicitudes del mismo usuario a la misma instancia. También puede ocurrir si las solicitudes son demasiado similares entre sí.

Elimine el bloqueo de datos. El bloqueo de datos garantiza la coherencia, pero tiene desventajas de rendimiento. Puede provocar escalaciones de bloqueo y afectar negativamente a la simultaneidad, la latencia y la disponibilidad. Para eliminar el bloqueo de datos, debe implementar la simultaneidad optimista. Las bases de datos no rerelaciones deben usar el control de simultaneidad optimista y tener el nivel de coherencia correcto. La estrategia de creación de particiones de datos también debe admitir las necesidades de simultaneidad.

Use la detección de servicios dinámicos. La detección dinámica de servicios es el proceso de detección y registro automático de servicios en un sistema distribuido. Permite a los clientes detectar servicios disponibles sin acoplarse estrechamente a instancias específicas. Los clientes no deben poder tomar una dependencia directa de una instancia específica de la carga de trabajo. Para evitar estas dependencias, debe usar un proxy para distribuir y redistribuir las conexiones de cliente. El proxy actúa como intermediario entre clientes y servicios, lo que proporciona una capa de abstracción que permite agregar o quitar servicios sin afectar a los clientes.

Use tareas en segundo plano. Cuando se escala una aplicación, puede controlar una carga de trabajo creciente o un mayor número de solicitudes simultáneas. La descarga de tareas intensivas como tareas en segundo plano permite que la aplicación principal controle las solicitudes de usuario sin sobrecargar las operaciones que consumen muchos recursos. Siga estos pasos para descargar tareas como tareas en segundo plano:

  1. Busque las tareas de uso intensivo de CPU e E/S en la aplicación que puede descargar. Estas tareas suelen implicar cálculos pesados o interacciones con recursos externos, como bases de datos o operaciones de red.

  2. Diseñe la aplicación para admitir tareas en segundo plano. Desacopla las tareas intensivas de la lógica de aplicación principal y proporciona un mecanismo para iniciar y administrar tareas en segundo plano.

  3. Implemente el procesamiento de tareas en segundo plano con las tecnologías o marcos adecuados. Incluya características proporcionadas por el lenguaje de programación o la plataforma, como la programación asincrónica, el subproceso o las colas de tareas. Contienen operaciones intensivas en tareas o subprocesos independientes, estas tareas se pueden ejecutar simultáneamente o programadas para ejecutarse a intervalos específicos.

  4. Distribuya tareas en segundo plano si hay muchas de ellas o si las tareas requieren un tiempo o recursos considerables. Para ver una posible solución, consulte el patrón de consumidores simultáneos.

Configuración del escalado

La configuración del escalado es el proceso de configuración y ajuste de parámetros para asignar dinámicamente recursos en función de las demandas de carga de trabajo. Abarca estrategias como el uso de características de escalado automático, descripción de los límites de escalado de servicios e implementación de métricas de carga significativas. La configuración adecuada garantiza que una aplicación pueda responder a distintas demandas, al tiempo que maximiza la eficacia. Al configurar el escalado, tenga en cuenta las siguientes estrategias:

Use servicios con escalado automático. La característica de escalado automático escala automáticamente la infraestructura para satisfacer la demanda. Use ofertas de plataforma como servicio (PaaS) con características integradas de escalado automático. La facilidad de escalado en PaaS es una ventaja importante. Por ejemplo, el escalado horizontal de máquinas virtuales requiere un equilibrador de carga independiente, un control de solicitudes de cliente y un estado almacenado externamente. Las ofertas de PaaS controlan la mayoría de estas tareas.

Restringir el escalado automático. Establezca los límites de escalado automático para minimizar el escalado excesivo que podría dar lugar a costos innecesarios. A veces no se pueden establecer límites de escalado. En estos casos, debe establecer alertas para notificarle cuando el componente alcance el límite de escala máximo y el escalado excesivo.

Descripción de los límites de escalado de servicios. Cuando comprenda los límites, incrementos y restricciones del escalado de servicios, puede tomar decisiones informadas al seleccionar un servicio. Los límites de escalado determinan si el servicio elegido puede controlar la carga de trabajo esperada, escalar de forma eficaz y cumplir los requisitos de rendimiento de la aplicación. Los límites de escalado que se deben tener en cuenta incluyen:

  • Límites de escalado: los límites de escalado son la capacidad máxima que puede controlar una ubicación o un servicio. Es importante conocer estos límites para ayudar a garantizar que el servicio pueda adaptarse a la carga de trabajo esperada y controlar el uso máximo sin degradación del rendimiento. Cada recurso tiene un límite de escala superior. Si necesita ir más allá de los límites de escala, debe crear particiones de la carga de trabajo.

  • Incrementos de escalado: los servicios se escalan en incrementos definidos. Por ejemplo, los servicios de proceso pueden escalar por instancias y pods, mientras que las bases de datos pueden escalar por instancias, unidades de transacción y núcleos virtuales. Es importante comprender estos incrementos para optimizar la asignación de recursos y evitar la marca de recursos.

  • Restricciones de escalado: algunos servicios le permiten escalar o reducir verticalmente, pero limitar la capacidad de revertir automáticamente el escalado. Se le obliga a escalar manualmente o es posible que tenga que volver a implementar un nuevo recurso. Estas limitaciones suelen ser proteger la carga de trabajo. Reducir o reducir verticalmente puede tener implicaciones en la disponibilidad y el rendimiento de la carga de trabajo. Un servicio puede aplicar ciertas limitaciones o restricciones para ayudar a garantizar que la carga de trabajo tenga recursos suficientes para funcionar de forma eficaz. Estas limitaciones pueden afectar a la coherencia y sincronización de datos, especialmente en los sistemas distribuidos. Es posible que el servicio tenga mecanismos para controlar la replicación de datos y la coherencia durante el escalado vertical o horizontal, pero podría no proporcionar el mismo nivel de compatibilidad para reducir o reducir verticalmente.

Use métricas de carga significativas. El escalado debe usar métricas de carga significativas como desencadenadores de escalado. Entre las métricas de carga significativas se incluyen métricas sencillas, como cpu o memoria. También incluyen métricas más avanzadas, como la profundidad de la cola, las consultas SQL, las consultas de métricas personalizadas y la longitud de la cola HTTP. Considere la posibilidad de usar una combinación de métricas de carga sencillas y avanzadas como desencadenador de escalado.

Use un búfer. Un búfer es una capacidad sin usar que se puede usar para controlar los picos de demanda. Un plan de carga de trabajo bien diseñado para picos inesperados en la carga de trabajo. Debe agregar un búfer para controlar los picos de escalado horizontal y vertical.

Evite la flaqueo. Flapping es una condición de bucle que se produce cuando un evento de escala desencadena un evento de escalado opuesto, creando una acción de escalado continua hacia atrás y hacia adelante. Por ejemplo, si el escalado en reduce el número de instancias, puede provocar que el uso de cpu aumente en las instancias restantes, lo que desencadena un evento de escalado horizontal. El evento de escalabilidad horizontal, a su vez, hace que el uso de la CPU se quite y repita el proceso.

Es importante elegir un margen adecuado entre el escalado horizontal y los umbrales de escalado horizontal para evitar la marcación. Puede evitar acciones de escalado y escalabilidad horizontal frecuentes e innecesarias estableciendo umbrales que proporcionan una diferencia significativa en el uso de CPU.

Use stamps de implementación. Hay técnicas que facilitan el escalado de una carga de trabajo. Puede usar el patrón De stamps de implementación para escalar fácilmente una carga de trabajo agregando una o varias unidades de escalado.

Riesgo: aunque el escalado ayuda a optimizar los costos ajustando la capacidad para satisfacer la demanda, puede dar lugar a un aumento general del costo durante largos períodos de alta demanda.

Escalado de pruebas

El escalado de pruebas implica simular varios escenarios de carga de trabajo en un entorno controlado para evaluar cómo responde una carga de trabajo a distintos niveles de demanda. Ayuda a garantizar que la carga de trabajo se escala de forma eficaz, maximizando la eficiencia del rendimiento durante cargas variadas.

Debe asegurarse de que la carga de trabajo se escala de forma eficaz en condiciones reales. Es esencial realizar pruebas de carga y esfuerzo en un entorno que refleje la configuración de producción. Estas pruebas, realizadas en entornos que no son de producción, permiten evaluar estrategias de escalado vertical y horizontal y determinar cuál optimiza el rendimiento de forma más eficaz. Este es un enfoque recomendado para probar el escalado:

  • Definir escenarios de carga de trabajo. Identifique los escenarios clave de carga de trabajo que necesita probar, como aumentar el tráfico de usuario, las solicitudes simultáneas, el volumen de datos o el uso de recursos.

  • Use el entorno de prueba similar a producción. Cree un entorno de prueba independiente que se parezca estrechamente al entorno de producción en términos de infraestructura, configuración y datos.

  • Establecer métricas de rendimiento. Defina las métricas de rendimiento que se van a medir, como el tiempo de respuesta, el rendimiento, el uso de la CPU y la memoria, y las tasas de error.

  • Desarrollar casos de prueba. Desarrolle casos de prueba que simulan diferentes escenarios de carga de trabajo, lo que aumenta gradualmente la carga para evaluar el rendimiento en varios niveles.

  • Ejecute y supervise las pruebas. Ejecute las pruebas con los casos de prueba definidos y recopile datos de rendimiento en cada nivel de carga. Supervise el comportamiento de la carga de trabajo, el consumo de recursos y la degradación del rendimiento.

  • Analice y optimice el escalado. Analice los resultados de la prueba para identificar cuellos de botella de rendimiento, limitaciones de escalabilidad o áreas para mejorar. Optimice la configuración, la infraestructura o el código para mejorar la escalabilidad y el rendimiento. El escalado tarda tiempo en completarse, por lo que se comprueban los efectos de los retrasos de escalado.

  • Direccione las dependencias. Encuentre posibles problemas de dependencia. El escalado o la creación de particiones en una área de una carga de trabajo puede provocar problemas de rendimiento en una dependencia. Las partes con estado de una carga de trabajo, como las bases de datos, son la causa más común de problemas de rendimiento de dependencias. Las bases de datos requieren un diseño cuidadoso para escalar horizontalmente. Debe tener en cuenta las medidas, como la simultaneidad optimista o la creación de particiones de datos, para permitir un mayor rendimiento en la base de datos.

  • Vuelva a probar después de los ajustes. Repita las pruebas de escalabilidad después de implementar optimizaciones para validar las mejoras y ayudar a garantizar que la carga de trabajo pueda controlar las cargas de trabajo esperadas de forma eficaz.

Equilibrio: tenga en cuenta las restricciones presupuestarias y los objetivos de rentabilidad de la carga de trabajo. El escalado vertical puede implicar mayores costos debido a la necesidad de recursos más grandes y eficaces. El escalado horizontal ofrece ahorros de costos mediante instancias más pequeñas que se pueden agregar o quitar en función de la demanda.

Carga de trabajo de partición

La creación de particiones es el proceso de dividir un conjunto de datos o una carga de trabajo de gran tamaño en partes más pequeñas y fáciles de administrar denominadas particiones. Cada partición contiene un subconjunto de los datos o la carga de trabajo y normalmente se almacena o procesa por separado. La creación de particiones permite el procesamiento paralelo y reduce la contención. Dividir la carga de trabajo en unidades más pequeñas permite que la aplicación procese cada unidad de forma independiente. El resultado es un mejor uso de recursos y tiempos de procesamiento más rápidos. La creación de particiones también ayuda a distribuir los datos entre varios dispositivos de almacenamiento, lo que reduce la carga en dispositivos individuales y mejora el rendimiento general.

Descripción de la creación de particiones

El enfoque de creación de particiones específico que use depende del tipo de datos o carga de trabajo que tenga y de la tecnología que use. Algunas estrategias comunes para la creación de particiones son:

  • Creación de particiones horizontales: en este enfoque, el conjunto de datos o la carga de trabajo se divide en función de criterios específicos, como intervalos de valores o atributos específicos. Cada partición contiene un subconjunto de los datos que cumplen los criterios definidos.

  • Creación de particiones verticales: en este enfoque, el conjunto de datos o la carga de trabajo se divide en función de atributos o columnas específicos. Cada partición contiene un subconjunto de las columnas o atributos, lo que permite un acceso más eficaz a los datos necesarios.

  • Creación de particiones funcionales: en este enfoque, los datos o la carga de trabajo se dividen en función de las funciones o operaciones específicas que deben realizarse. Cada partición contiene los datos o componentes necesarios para una función específica, lo que permite el procesamiento y el rendimiento optimizados.

Planeamiento de la creación de particiones

Es importante tener en cuenta factores como la distribución de datos, los patrones de consulta, el crecimiento de datos y los requisitos de carga de trabajo al crear particiones. El planeamiento y el diseño adecuados son esenciales para ayudar a garantizar la eficacia de la creación de particiones y maximizar la eficiencia del rendimiento. Si direcciona la creación de particiones como después, es más difícil porque ya tiene una carga de trabajo activa para mantener. Es posible que tenga que cambiar la lógica de acceso a datos, distribuir grandes cantidades de datos entre particiones y admitir el uso continuado durante la distribución de datos.

Implementación de la partición

Es importante analizar las características de los datos, los patrones de acceso, los requisitos de simultaneidad y los objetivos de escalabilidad al decidir qué tipo de partición usar. Cada tipo de creación de particiones tiene sus propias ventajas y consideraciones. Estos son algunos factores que se deben tener en cuenta para cada tipo de creación de particiones:

  • La creación de particiones horizontales es adecuada cuando desea distribuir los datos entre varios recursos o servidores para mejorar la escalabilidad y el rendimiento. Es eficaz cuando la carga de trabajo se puede paralelizar y procesar de forma independiente en cada partición. Considere la posibilidad de crear particiones horizontales cuando varios usuarios o procesos necesiten tener acceso o actualizar el conjunto de datos simultáneamente.

  • La creación de particiones verticales es adecuada cuando se accede con frecuencia a determinados atributos o columnas, mientras que a otros se accede con menos frecuencia. La creación de particiones verticales permite un acceso eficaz a los datos necesarios al minimizar la recuperación de datos innecesaria.

  • La creación de particiones funcionales es adecuada cuando diferentes funciones requieren subconjuntos diferentes de los datos y se pueden procesar de forma independiente. La creación de particiones funcionales puede optimizar el rendimiento al permitir que cada partición se centre en operaciones específicas.

Prueba y optimización de la creación de particiones

Pruebe el esquema de creación de particiones para comprobar la eficacia y eficacia de la estrategia para que pueda realizar ajustes para mejorar el rendimiento. Medir factores como el tiempo de respuesta, el rendimiento y la escalabilidad. Compare los resultados con los objetivos de rendimiento e identifique los cuellos de botella o los problemas. En función del análisis, identifique posibles oportunidades de optimización. Es posible que tenga que redistribuir los datos entre particiones, ajustar los tamaños de partición o cambiar los criterios de creación de particiones.

Equilibrio: la creación de particiones agrega complejidad al diseño y el desarrollo de una carga de trabajo. La creación de particiones requiere conversaciones y planificación entre desarrolladores y administradores de bases de datos.

Riesgo: la creación de particiones presenta algunos posibles problemas que deben tenerse en cuenta y solucionarse, entre los que se incluyen:

  • Asimetría de datos: la creación de particiones puede provocar asimetría de datos, donde ciertas particiones reciben una cantidad desproporcionada de datos o carga de trabajo en comparación con otras. La asimetría de datos puede provocar desequilibrios de rendimiento y una mayor contención en particiones específicas.

  • Rendimiento de las consultas: los esquemas de creación de particiones mal diseñados pueden afectar negativamente al rendimiento de las consultas. Si las consultas necesitan acceder a los datos entre varias particiones, puede requerir una coordinación y comunicación adicionales entre particiones, lo que provoca una mayor latencia.

Facilitación de Azure

Optimización del escalado. Azure tiene la capacidad de infraestructura para admitir el escalado vertical y horizontal. Los servicios de Azure tienen distintos niveles de rendimiento conocidos como SKU. Las SKU permiten escalar verticalmente. Muchos de los recursos de Azure admiten el escalado automático u otras opciones de escalado local. Algunos recursos admiten métricas avanzadas o entradas personalizadas para admitir el comportamiento de ajuste de escalado. La mayoría de las implementaciones de escalado en Azure pueden establecer límites y admitir la observabilidad necesaria que se va a alertar para cambiar.

Azure Monitor le permite supervisar varias métricas y condiciones en las aplicaciones y la infraestructura. Puede usar Monitor para desencadenar acciones de escalado automatizadas basadas en reglas predefinidas. Por ejemplo, en Azure Kubernetes Service (AKS), puede usar Monitor para habilitar el escalado automático horizontal de pods (HPA) y el escalado automático del clúster. Con las funcionalidades de supervisión y alertas de Monitor, puede facilitar eficazmente el escalado en Azure y ayudar a garantizar que las aplicaciones y la infraestructura puedan ajustarse dinámicamente para satisfacer la demanda.

También puede crear el escalado automático personalizado en Azure. Puede usar alertas en Supervisión de recursos que no tienen una característica de escalado automático. Estas alertas se pueden configurar para que se basen en consultas o en métricas y pueden realizar acciones mediante Azure Automation. Automation proporciona una plataforma para hospedar y ejecutar código de PowerShell y Python en Azure, la nube y los entornos locales. Ofrece características como la implementación de runbooks a petición o según una programación, el historial de ejecución y el registro, el almacén de secretos integrado y la integración del control de código fuente.

Diseño de la aplicación para escalar: estas son algunas maneras en que Azure facilita el diseño del escalado de aplicaciones;

  • Eliminación del bloqueo de datos: en Azure SQL Database, puede habilitar el bloqueo optimizado para mejorar el rendimiento de las bases de datos que requieren una coherencia estricta.

  • Uso de tareas en segundo plano: Azure ofrece servicios e instrucciones para implementar trabajos en segundo plano. Para obtener más información, consulte Trabajos en segundo plano.

  • Implementación del equilibrio de carga: Azure proporciona equilibradores de carga que no requieren afinidad de cliente. Estos equilibradores de carga incluyen Azure Front Door, Azure Application Gateway y Azure Load Balancer.

Creación de particiones de una carga de trabajo: Azure ofrece varias estrategias de creación de particiones para diferentes almacenes de datos. Estas estrategias ayudan a mejorar el rendimiento y la escalabilidad mediante la distribución de los datos entre varias particiones. Para más información, consulte Estrategias de partición de datos.

Lista de comprobación de eficiencia del rendimiento

Consulte el conjunto completo de recomendaciones.