“No cenário digital em rápida evolução de hoje, vemos um número crescente de serviços e ambientes (nos quais esses serviços são executados) que nossos clientes utilizam no Azure. Garantir o desempenho e a segurança do Azure significa que nossas equipes estão vigilantes sobre manutenção common e atualizações para acompanhar as necessidades do cliente. Estabilidade, confiabilidade e atualizações contínuas e oportunas permanecem
“No cenário digital em rápida evolução de hoje, vemos um número crescente de serviços e ambientes (nos quais esses serviços são executados) que nossos clientes utilizam no Azure. Garantir o desempenho e a segurança do Azure significa que nossas equipes estão vigilantes sobre manutenção common e atualizações para acompanhar as necessidades do cliente. Estabilidade, confiabilidade e atualizações contínuas e oportunas continuam sendo nossa principal prioridade ao testar e implantar alterações. Ao minimizar o impacto para clientes e serviços, devemos levar em conta o cenário multifacetado de software program, {hardware} e plataforma. Este é um exemplo de um problema de otimização, um conceito do setor que gira em torno de encontrar a melhor maneira de alocar recursos, gerenciar cargas de trabalho e garantir o desempenho, mantendo os custos baixos e aderindo a várias restrições. Dada a complexidade e a natureza em constante mudança dos ambientes de nuvem, essa tarefa é crítica e desafiadora.
Pedi a Rohit Pandey, gerente principal de ciência de dados, e Akshay Sathiya, cientista de dados da equipe de ciência de dados do Azure Core Insights para discutir abordagens para problemas de otimização na computação em nuvem e compartilhar um recurso que desenvolvemos para os clientes usarem para resolver esses problemas em seus próprios ambientes.“—Mark Russinovich, CTO, Azure
Problemas de otimização em computação em nuvem
Problemas de otimização existem em todo o setor de tecnologia. Os produtos de software program de hoje são projetados para funcionar em uma ampla gama de ambientes, como websites, aplicativos e sistemas operacionais. Da mesma forma, o Azure deve ter um bom desempenho em um conjunto diversificado de servidores e configurações de servidor que abrangem modelos de {hardware}, tipos de máquina digital (VM) e sistemas operacionais em uma frota de produção. Sob as limitações de tempo, recursos computacionais e complexidade crescente à medida que adicionamos mais serviços, {hardware} e VMs, pode não ser possível alcançar uma solução preferrred. Para problemas como esses, um algoritmo de otimização é usado para identificar uma solução quase preferrred que usa uma quantidade razoável de tempo e recursos. Usando um problema de otimização que encontramos ao configurar o ambiente para uma plataforma de teste de software program e {hardware}, discutiremos a complexidade de tais problemas e apresentaremos uma biblioteca que criamos para resolver esses tipos de problemas que podem ser aplicados em todos os domínios.
Design de ambiente e testes combinatórios
Se você fosse projetar um experimento para avaliar um novo medicamento, você testaria em uma demografia diversa de usuários para avaliar potenciais efeitos negativos que podem afetar um grupo seleto de pessoas. Na computação em nuvem, precisamos similarmente projetar uma plataforma de experimentação que, idealmente, seria representativa de todas as propriedades do Azure e testaria suficientemente todas as configurações possíveis em produção. Na prática, isso tornaria a matriz de teste muito grande, então temos que mirar nas importantes e arriscadas. Além disso, assim como você pode evitar tomar dois medicamentos que podem afetar negativamente um ao outro, as propriedades dentro da nuvem também têm restrições que precisam ser respeitadas para uso bem-sucedido em produção. Por exemplo, o {hardware} um pode funcionar apenas com os tipos de VM um e dois, mas não três e quatro. Por fim, os clientes podem ter restrições adicionais que devemos considerar em nosso ambiente.
Com todas as combinações possíveis, precisamos projetar um ambiente que possa testar as combinações importantes e que leve em consideração as várias restrições. O AzQualify é nossa plataforma para testar programas internos do Azure, onde aproveitamos a experimentação controlada para verificar quaisquer alterações antes que elas sejam implementadas. No AzQualify, os programas são testados A/B em uma ampla gama de configurações e combinações de configurações para identificar e mitigar problemas potenciais antes da implantação da produção.
Embora fosse preferrred testar o novo medicamento e coletar dados sobre cada usuário possível e cada interação possível com cada medicamento em cada cenário, não há tempo ou recursos suficientes para fazer isso. Enfrentamos o mesmo problema de otimização restrita na computação em nuvem. Esse problema é um problema NP-difícil.
Problemas NP-difíceis
Um problema NP-difícil, ou Não-Determinístico Polinomial de Tempo, é difícil de resolver e até mesmo de verificar (se alguém lhe deu a melhor solução). Usando o exemplo de um novo medicamento que pode curar várias doenças, testar esse medicamento envolve uma série de testes incrivelmente complexos e interconectados em diferentes grupos de pacientes, ambientes e condições. O resultado de cada teste pode depender de outros, tornando-o não apenas difícil de conduzir, mas também muito desafiador para verificar todos os resultados interconectados. Não somos capazes de saber se esse medicamento é o melhor nem confirmar se é o melhor. Na ciência da computação, ainda não foi provado (e é considerado improvável) que as melhores soluções para problemas NP-difíceis sejam obtidas de forma eficiente.
Outro problema NP-difícil que consideramos no AzQualify é a alocação de VMs em {hardware} para balancear a carga. Isso envolve atribuir VMs de clientes a máquinas físicas de uma forma que maximize a utilização de recursos, reduce o tempo de resposta e evite sobrecarregar qualquer máquina física única. Para visualizar a melhor abordagem possível, usamos um gráfico de propriedades para representar e resolver problemas envolvendo dados interconectados.
Gráfico de propriedade
O gráfico de propriedades é uma estrutura de dados comumente usada em bancos de dados de gráficos para modelar relacionamentos complexos entre entidades. Neste caso, podemos ilustrar diferentes tipos de propriedades com cada tipo usando seus próprios vértices e Edges para representar relacionamentos de compatibilidade. Cada propriedade é um vértice no gráfico e duas propriedades terão uma aresta entre elas se forem compatíveis entre si. Este modelo é especialmente útil para visualizar restrições. Além disso, expressar restrições neste formato nos permite alavancar conceitos e algoritmos existentes ao resolver novos problemas de otimização.
Abaixo está um exemplo de gráfico de propriedades que consiste em três tipos de propriedades (modelo de {hardware}, tipo de VM e sistemas operacionais). Os vértices representam propriedades específicas, como modelos de {hardware} (A, B e C, representados por círculos azuis), tipos de VM (D e E, representados por triângulos verdes) e imagens de SO (F, G, H e I, representadas por losangos amarelos). As arestas (linhas pretas entre os vértices) representam relacionamentos de compatibilidade. Os vértices conectados por uma aresta representam propriedades compatíveis entre si, como modelo de {hardware} C, tipo de VM E e imagem de SO I.

Figura 1: Um exemplo de gráfico de propriedades mostrando compatibilidade entre modelos de {hardware} (azul), tipos de VM (verde) e sistemas operacionais (amarelo)
No Azure, os nós estão fisicamente localizados em datacenters em várias regiões. Os clientes do Azure usam VMs que são executadas em nós. Um único nó pode hospedar várias VMs ao mesmo tempo, com cada VM alocada em uma parte dos recursos computacionais do nó (ou seja, memória ou armazenamento) e sendo executada independentemente das outras VMs no nó. Para que um nó tenha um modelo de {hardware}, um tipo de VM para executar e uma imagem do sistema operacional nessa VM, todos os três precisam ser compatíveis entre si. No gráfico, todos eles estariam conectados. Portanto, as configurações de nó válidas são representadas por cliques (cada um tendo um modelo de {hardware}, um tipo de VM e uma imagem do sistema operacional) no gráfico.
Um exemplo do problema de design de ambiente que resolvemos no AzQualify é a necessidade de cobrir todos os modelos de {hardware}, tipos de VM e imagens de sistema operacional no gráfico acima. Digamos que gostaríamos que o modelo de {hardware} A fosse 40% das máquinas em nosso experimento, o tipo de VM D fosse 50% das VMs em execução nas máquinas e a imagem do SO F estivesse em 10% de todas as VMs. Por fim, precisamos usar exatamente 20 máquinas. Resolver como alocar o {hardware}, os tipos de VM e as imagens do sistema operacional entre essas máquinas para que as restrições de compatibilidade na Figura um sejam satisfeitas e cheguemos o mais perto possível de satisfazer os outros requisitos é um exemplo de um problema em que não existe um algoritmo eficiente.
Biblioteca de algoritmos de otimização
Desenvolvemos algum código de uso geral a partir de aprendizados extraídos da resolução de problemas NP-difíceis que empacotamos no otimização biblioteca. Embora existam bibliotecas Python e R para os algoritmos que implementamos, elas têm limitações que as tornam impraticáveis para uso nesses tipos de problemas complexos combinatórios e NP-difíceis. No Azure, usamos essa biblioteca para resolver vários tipos dinâmicos de problemas de design de ambiente e implementar rotinas que podem ser usadas em qualquer tipo de problema de otimização combinatória com consideração à extensibilidade entre domínios. Nosso sistema de design de ambiente, que usa essa biblioteca, nos ajudou a cobrir uma variedade maior de propriedades em testes, o que nos levou a capturar de cinco a dez regressões por mês. Por meio da identificação de regressões, podemos melhorar os programas internos do Azure enquanto as mudanças ainda estão em pré-produção e minimizar a estabilidade potencial da plataforma e o impacto no cliente quando as mudanças forem amplamente implantadas.
Saiba mais sobre a biblioteca optimizn
Entender como abordar problemas de otimização é essencial para organizações que buscam maximizar a eficiência, reduzir custos e melhorar o desempenho e a confiabilidade. Visite nosso otimização biblioteca para resolver problemas NP-difíceis em seu ambiente de computação. Para aqueles que são novos em otimização ou problemas NP-difíceis, visite o arquivo README.md da biblioteca para ver como você pode interagir com os vários algoritmos. À medida que continuamos aprendendo com a natureza dinâmica da computação em nuvem, fazemos atualizações regulares em algoritmos gerais, bem como publicamos novos algoritmos projetados especificamente para trabalhar em certas courses de problemas NP-difíceis.
Ao abordar esses desafios, as organizações podem obter melhor utilização de recursos, aprimorar a experiência do usuário e manter uma vantagem competitiva no cenário digital em rápida evolução. Investir na otimização da nuvem não é apenas cortar custos; é construir uma infraestrutura robusta que suporte objetivos de negócios de longo prazo.