“En el panorama digital en rápida crecimiento de hoy, vemos un número cada vez maduro de servicios y entornos (en los que se ejecutan esos servicios) que nuestros clientes utilizan en Azure. Respaldar el rendimiento y la seguridad de Azure significa que nuestros equipos están atentos al mantenimiento y las actualizaciones regulares para mantenerse al día con las deyección de los clientes. La estabilidad, la confiabilidad y las actualizaciones continuas y oportunas siguen siendo una prioridad.
“En el panorama digital en rápida crecimiento de hoy, vemos un número cada vez maduro de servicios y entornos (en los que se ejecutan esos servicios) que nuestros clientes utilizan en Azure. Respaldar el rendimiento y la seguridad de Azure significa que nuestros equipos están atentos al mantenimiento y las actualizaciones regulares para mantenerse al día con las deyección de los clientes. La estabilidad, la confiabilidad y las actualizaciones periódicas y oportunas siguen siendo nuestra principal prioridad al probar e implementar cambios. Para minimizar el impacto en los clientes y los servicios, debemos tener en cuenta el panorama multifacético de software, hardware y plataformas. Este es un ejemplo de un problema de optimización, un concepto de la industria que tournée en torno a encontrar la mejor modo de asignar medios, establecer cargas de trabajo y respaldar el rendimiento manteniendo los costos bajos y cumpliendo con varias restricciones. Dada la complejidad y la naturaleza cambiante de los entornos de estrato, esta tarea es a la vez crítica y desafiante.
Le pedí a Rohit Pandey, jefe principal de científicos de datos, y a Akshay Sathiya, sabio de datos, del equipo de ciencia de datos de Azure Core Insights que discutieran enfoques para los problemas de optimización en la computación en la estrato y compartieran un petición que hemos desarrollado para que los clientes lo utilicen para resolver estos problemas en sus propios entornos.«—Mark Russinovich, director de tecnología de Azure
Problemas de optimización en la computación en la estrato
Los problemas de optimización existen en toda la industria tecnológica. Los productos de software actuales están diseñados para funcionar en una amplia variedad de entornos, como sitios web, aplicaciones y sistemas operativos. De modo similar, Azure debe funcionar adecuadamente en un conjunto diverso de servidores y configuraciones de servidores que abarcan modelos de hardware, tipos de máquinas virtuales (VM) y sistemas operativos en una flota de producción. Oportuno a las limitaciones de tiempo, medios computacionales y una complejidad creciente a medida que agregamos más servicios, hardware y VM, es posible que no sea posible alcanzar una decisión óptima. Para problemas como estos, se utiliza un operación de optimización para identificar una decisión casi óptima que utilice una cantidad justo de tiempo y medios. Utilizando un problema de optimización que encontramos al configurar el entorno para una plataforma de prueba de software y hardware, analizaremos la complejidad de dichos problemas y presentaremos una biblioteca que creamos para resolver este tipo de problemas que se pueden aplicar en todos los dominios.
Diseño de entornos y pruebas combinatorias
Si tuviera que diseñar un prueba para evaluar un nuevo medicamento, lo probaría en un clan demográfico diverso de usuarios para evaluar los posibles enseres negativos que pueden afectar a un clan selecto de personas. En la computación en la estrato, de modo similar, necesitamos diseñar una plataforma de experimentación que, idealmente, sería representativa de todas las propiedades de Azure y probaría de modo suficiente cada configuración posible en producción. En la destreza, eso haría que la matriz de prueba fuera demasiado egregio, por lo que debemos centrarnos en las importantes y riesgosas. Adicionalmente, así como puede evitar tomar dos medicamentos que pueden afectar negativamente al otro, las propiedades internamente de la estrato incluso tienen restricciones que deben respetarse para un uso exitoso en producción. Por ejemplo, el hardware uno solo podría funcionar con los tipos de VM uno y dos, pero no tres y cuatro. Por zaguero, los clientes pueden tener restricciones adicionales que debemos considerar en nuestro entorno.
Con todas las combinaciones posibles, debemos diseñar un entorno que pueda probar las combinaciones importantes y que tenga en cuenta las distintas restricciones. AzQualify es nuestra plataforma para probar programas internos de Azure, donde aprovechamos la experimentación controlada para examinar cualquier cambio antaño de implementarlo. En AzQualify, los programas se prueban A/B en una amplia viso de configuraciones y combinaciones de configuraciones para identificar y mitigar posibles problemas antaño de la implementación en producción.
Si adecuadamente sería ideal probar el nuevo medicamento y compendiar datos sobre cada posible usufructuario y cada posible interacción con cada medicamento en cada ambiente, no hay suficiente tiempo ni medios para poder hacerlo. Nos enfrentamos al mismo problema de optimización restringida en la computación en la estrato. Este problema es un problema NP-hard.
Problemas NP-hard
Un problema NP-hard, o de tiempo polinómico no determinista, es difícil de resolver e incluso de confirmar (si alguno te dio la mejor decisión). Usando el ejemplo de un nuevo medicamento que podría curar múltiples enfermedades, probar este medicamento implica una serie de ensayos increíblemente complejos e interconectados en diferentes grupos de pacientes, entornos y condiciones. El resultado de cada análisis puede pender de otros, lo que hace que no solo sea difícil de realizar sino incluso muy difícil confirmar todos los resultados interconectados. No podemos asimilar si este medicamento es el mejor ni confirmar si lo es. En informática, aún no se ha demostrado (y se considera poco probable) que las mejores soluciones para problemas NP-hard se puedan obtener de modo competente.
Otro problema NP-hard que consideramos en AzQualify es la asignación de máquinas virtuales en todo el hardware para equilibrar la carga. Esto implica asignar máquinas virtuales de clientes a máquinas físicas de una modo que maximice la utilización de medios, minimice el tiempo de respuesta y evite la sobrecarga de una sola máquina física. Para visualizar el mejor enfoque posible, utilizamos un esquema de propiedades para representar y resolver problemas que involucran datos interconectados.
Dibujo de propiedades
El esquema de propiedades es una estructura de datos que se utiliza asiduamente en bases de datos de gráficos para modelar relaciones complejas entre entidades. En este caso, podemos ilustrar diferentes tipos de propiedades, cada una de las cuales utiliza sus propios vértices y aristas para representar relaciones de compatibilidad. Cada propiedad es un vértice en el esquema y dos propiedades tendrán una arista entre ellas si son compatibles entre sí. Este maniquí es especialmente útil para visualizar restricciones. Adicionalmente, expresar restricciones de esta forma nos permite beneficiarse los conceptos y algoritmos existentes al resolver nuevos problemas de optimización.
A continuación se muestra un ejemplo de esquema de propiedades que consta de tres tipos de propiedades (maniquí de hardware, tipo de máquina imaginario y sistemas operativos). Los vértices representan propiedades específicas, como modelos de hardware (A, B y C, representados por círculos azules), tipos de máquinas virtuales (D y E, representados por triángulos verdes) e imágenes de SO (F, G, H e I, representadas por diamantes amarillos). Los bordes (líneas negras entre vértices) representan relaciones de compatibilidad. Los vértices conectados por un borde representan propiedades compatibles entre sí, como el maniquí de hardware C, el tipo de máquina imaginario E y la imagen de SO I.

Figura 1: Un ejemplo de esquema de propiedades que muestra la compatibilidad entre modelos de hardware (cerúleo), tipos de máquinas virtuales (verde) y sistemas operativos (amarillo)
En Azure, los nodos se encuentran ubicados físicamente en centros de datos en varias regiones. Los clientes de Azure usan máquinas virtuales que se ejecutan en nodos. Un solo nodo puede encajar varias máquinas virtuales al mismo tiempo, y cada una de ellas tiene asignada una parte de los medios computacionales del nodo (es aseverar, memoria o almacenamiento) y se ejecuta de forma independiente de las otras máquinas virtuales del nodo. Para que un nodo tenga un maniquí de hardware, un tipo de máquina imaginario para ejecutar y una imagen del sistema operante en esa máquina imaginario, los tres deben ser compatibles entre sí. En el esquema, todos estos fundamentos estarían conectados. Por lo tanto, las configuraciones de nodo válidas se representan mediante grupos (cada uno con un maniquí de hardware, un tipo de máquina imaginario y una imagen del sistema operante) en el esquema.
Un ejemplo del problema de diseño del entorno que resolvemos en AzQualify es la privación de cubrir todos los modelos de hardware, tipos de máquinas virtuales e imágenes de sistemas operativos en el esquema antecedente. Supongamos que nos gustaría que el maniquí de hardware A fuera el 40 % de las máquinas en nuestro prueba, que el tipo de máquina imaginario D fuera el 50 % de las máquinas virtuales que se ejecutan en las máquinas y que la imagen del sistema operante F estuviera en el 10 % de todas las máquinas virtuales. Por zaguero, debemos utilizar exactamente 20 máquinas. Resolver cómo asignar el hardware, los tipos de máquinas virtuales y las imágenes del sistema operante entre esas máquinas de modo que se cumplan las restricciones de compatibilidad de la Figura 1 y nos acerquemos lo más posible a satisfacer los demás requisitos es un ejemplo de un problema en el que no existe un operación competente.
Biblioteca de algoritmos de optimización
Hemos desarrollado un código de propósito genérico a partir de los aprendizajes extraídos de la resolución de problemas NP-hard que empaquetamos en el optimizar Biblioteca. Aunque existen bibliotecas de Python y R para los algoritmos que implementamos, tienen limitaciones que las hacen poco prácticas para usar en este tipo de problemas combinatorios complejos y NP-hard. En Azure, usamos esta biblioteca para resolver diversos tipos dinámicos de problemas de diseño de entornos e implementar rutinas que se pueden usar en cualquier tipo de problema de optimización combinatoria teniendo en cuenta la extensibilidad entre dominios. Nuestro sistema de diseño de entornos, que usa esta biblioteca, nos ha ayudado a cubrir una variedad más amplia de propiedades en las pruebas, lo que nos ha permitido detectar entre cinco y diez regresiones por mes. Al identificar regresiones, podemos mejorar los programas internos de Azure mientras los cambios aún están en preproducción y minimizar la posible estabilidad de la plataforma y el impacto en el cliente una vez que los cambios se implementan ampliamente.
Obtenga más información sobre la biblioteca optimizn
Comprender cómo topar los problemas de optimización es fundamental para las organizaciones que buscan maximizar la eficiencia, someter los costos y mejorar el rendimiento y la confiabilidad. Visite nuestra optimizar Biblioteca para resolver problemas NP-hard en su entorno informático. Para aquellos que son nuevos en optimización o problemas NP-hard, visite el archivo README.md de la biblioteca para ver cómo puede interactuar con los diversos algoritmos. A medida que continuamos aprendiendo de la naturaleza dinámica de la computación en la estrato, realizamos actualizaciones periódicas de algoritmos generales y publicamos nuevos algoritmos diseñados específicamente para trabajar en ciertas clases de problemas NP-hard.
Al topar estos desafíos, las organizaciones pueden conseguir una mejor utilización de los medios, mejorar la experiencia del usufructuario y proseguir una superioridad competitiva en el panorama digital en rápida crecimiento. Modificar en la optimización de la estrato no se tráfico solo de someter costos, sino de construir una infraestructura sólida que respalde los objetivos comerciales a extenso plazo.