Balanceamento de carga no Openstack (Parte 2)

Em artigo anterior Nós discutimos as tentativas de utilizar o Watcher e apresentamos um relatório de testes. Realizamos esses testes periodicamente para balanceamento e outras funções críticas de grandes nuvens corporativas ou de operadores.

A alta complexidade do problema em questão pode exigir vários artigos para descrever nosso projeto. Hoje publicamos o segundo artigo da série, dedicado ao balanceamento de máquinas virtuais na nuvem.

Um pouco de terminologia

A empresa VmWare introduziu a ferramenta DRS (Distributed Resource Scheduler) para balanceamento de carga no ambiente de virtualização que ela desenvolve e oferece.

Como escreve searchvmware.techtarget.com/definition/VMware-DRS
«VMware DRS (Planejador de Recursos Distribuídos) é uma ferramenta que equilibra as cargas de computação com os recursos disponíveis em um ambiente virtual. A ferramenta faz parte do pacote de virtualização denominado VMware Infrastructure.

Com o VMware DRS, os usuários definem regras para a distribuição de recursos físicos entre as máquinas virtuais (VM). A ferramenta pode ser configurada para gerenciamento manual ou automático. Os pools de recursos VMware podem ser facilmente adicionados, removidos ou reorganizados. Se desejado, os pools de recursos podem ser isolados entre diferentes unidades de negócios. Se a carga de trabalho de uma ou mais máquinas virtuais mudar drasticamente, o VMware DRS redistribui as máquinas virtuais entre os servidores físicos. Se a carga de trabalho total diminuir, alguns servidores físicos podem ser desligados temporariamente, e a carga de trabalho pode ser consolidada.»

Por que é necessário o balanceamento?


Na nossa opinião, o DRS é uma funcionalidade obrigatória em nuvens, embora isso não signifique que o DRS deva ser usado sempre e em todos os lugares. Dependendo do propósito e das necessidades da nuvem, podem existir diferentes requisitos para o DRS e para os métodos de balanceamento. Pode haver situações em que o balanceamento não é necessário ou até mesmo prejudicial.

Para entender melhor onde e para quais clientes o DRS é necessário, vamos analisar seus objetivos e demandas. As nuvens podem ser divididas em públicas e privadas. Aqui estão as principais diferenças entre essas nuvens e os objetivos dos clientes.

Nuvens particulares / Grandes clientes corporativos
Nuvens públicas / Pequenas e médias empresas, pessoas

O principal critério e objetivo do operador
Fornecer um serviço ou produto confiável
Redução de custos dos serviços na disputa no mercado competitivo

Requisitos do serviço
Confiabilidade em todos os níveis e em todos os elementos do sistema

Desempenho garantido

Priorização das máquinas virtuais em várias categorias 

Segurança da informação e segurança física dos dados

SLA e suporte 24 horas por dia
Máxima simplicidade para obter o serviço

Serviços relativamente simples

A responsabilidade pelos dados é do cliente

Priorização das VMs não é necessária

Segurança da informação ao nível de serviços padrão, responsabilidade do cliente

Podem ocorrer falhas

Sem SLA, qualidade não garantida

Suporte por e-mail

Backup não é obrigatório

Características do cliente
Uma gama muito ampla de aplicações.

Aplicações legadas herdadas pela empresa.

Arquiteturas complexas personalizadas para cada cliente.

Regras de afinidade.

Funcionamento contínuo do software em modo 7x24. 

Meios de backup 'em tempo real'.

Carga cíclica previsível do cliente.
Aplicações padrão – balanceamento de rede, Apache, WEB, VPN, SQL

Pode haver interrupção temporária da aplicação

Distribuição arbitrária de VMs na nuvem é permitida

Backup realizado pelo cliente

Carga estatisticamente média previsível com um grande número de clientes.

Consequências para a arquitetura
Geoclasificação

Sistema de armazenamento de dados centralizado ou distribuído

SRK reservável
Armazenamento local de dados nos nós computacionais

Objetivos de balanceamento
Distribuição uniforme da carga

Máxima capacidade de resposta das aplicações 

Mínimo tempo de latência no balanceamento

Balanceamento apenas em caso de necessidade explícita

Levantamento de parte do equipamento para manutenção preventiva
Redução dos custos do serviço e despesas do operador 

Desconexão de parte dos recursos em caso de baixa carga

Economia de energia elétrica

Redução dos custos com pessoal

Chegamos às seguintes conclusões:

Para nuvens privadas, fornecidas a grandes clientes corporativos, o DRS pode ser aplicado com as seguintes restrições:

  • segurança da informação e consideração das regras de afinidade no balanceamento;
  • disponibilidade de recursos suficientes em reserva em caso de emergência;
  • os dados das máquinas virtuais estão em um sistema de armazenamento centralizado ou distribuído;
  • distribuição temporal de procedimentos de administração, backup e balanceamento;
  • balanceamento apenas dentro do conjunto de hosts do cliente;
  • balanceamento somente em caso de forte desequilíbrio, as migrações de VMs mais eficazes e seguras (pois a migração pode não ser bem-sucedida);
  • balanceamento em relação a VMs 'tranquilas' (a migração de VMs 'ativas' pode demorar muito);
  • balanceamento levando em conta o 'custo' — carga em armazenamento e rede (em arquiteturas personalizadas para grandes clientes);
  • balanceamento considerando as particularidades do comportamento de cada VM;
  • balanceamento preferencialmente fora do horário de operação (à noite, fins de semana, feriados).

Para nuvens públicas, que fornecem serviços a pequenos clientes, o DRS pode ser aplicado com muito mais frequência, com capacidades expandidas:

  • ausência de restrições de segurança da informação e regras de afinidade;
  • balanceamento dentro da nuvem;
  • balanceamento a qualquer momento razoável;
  • balanceamento de qualquer VM;
  • balanceamento de VMs 'ativas' (para não interferir nas demais);
  • os dados das máquinas virtuais geralmente estão em discos locais;
  • consideração da performance média do armazenamento e da rede (a arquitetura da nuvem é unificada);
  • balanceamento com base em regras generalizadas e na estatística de comportamento do data center.

A complexidade do problema

A complexidade do balanceamento reside no fato de que o DRS deve operar com uma grande quantidade de fatores incertos:

  • o comportamento dos usuários de cada um dos sistemas de informação dos clientes;
  • os algoritmos de funcionamento dos servidores dos sistemas de informação;
  • o comportamento dos servidores do SGBD;
  • carga sobre recursos computacionais, armazenamento, rede;
  • a interação entre servidores na luta por recursos da nuvem.

A carga de um grande número de servidores virtuais de aplicativos e bancos de dados sobre os recursos da nuvem se distribui ao longo do tempo, com consequências que podem se manifestar e se sobrepor com efeitos imprevisíveis em momentos imprevisíveis. Mesmo para gerenciar processos relativamente simples (por exemplo, para controlar um motor, um sistema de aquecimento de água em uma casa), sistemas de controle automático precisam usar complexos algoritmos proporcionais-integral-diferenciais com feedback.

Balanceamento de carga no Openstack (Parte 2)

Nossa tarefa é muito mais complexa e existe o risco de que o sistema não consiga equilibrar a carga em valores estáveis em um tempo razoável, mesmo que não ocorram influências externas por parte dos usuários.

Balanceamento de carga no Openstack (Parte 2)

A história de nossos desenvolvimentos

Para resolver esse problema, decidimos não começar do zero, mas sim basear-nos na experiência existente e começar a interagir com especialistas que já possuem experiência nesta área. Por sorte, nossa compreensão da problemática estava completamente alinhada.

Etapa 1

Utilizamos um sistema baseado em tecnologia de redes neurais e tentamos otimizar nossos recursos com base nele.

O interesse desta etapa estava na experimentação de uma nova tecnologia, e sua importância residia na aplicação de uma abordagem não convencional para resolver a tarefa, na qual, em condições equivalentes, as abordagens padrão praticamente se esgotaram.

Lançamos o sistema e realmente começou a balancear. A escala de nossa nuvem não nos permitiu obter os resultados otimistas anunciados pelos desenvolvedores, mas era evidente que o balanceamento estava funcionando.

Entretanto, tínhamos limitações bastante sérias:

  • Para treinar a rede neural, é necessário que as máquinas virtuais operem sem alterações significativas durante semanas ou meses.
  • O algoritmo é projetado para otimização com base na análise de dados 'históricos' anteriores.
  • Para treinar a rede neural, é necessário um volume considerável de dados e recursos computacionais.
  • A otimização e o balanceamento podem ser realizados relativamente raramente – uma vez a cada várias horas, o que é claramente insuficiente.

Etapa 2

Como não estávamos satisfeitos com a situação, decidimos modificar o sistema e, para isso, responder a a principal questão – para quem estamos fazendo isso?

Primeiramente – para clientes corporativos. Portanto, precisamos de um sistema que opere de forma ágil, com aquelas limitações corporativas que facilitam a implementação.

Segunda pergunta – o que entender por 'ágil'? Após breves debates, decidimos que poderíamos partir do tempo de resposta de 5 a 10 minutos, para que picos momentâneos não colocassem o sistema em ressonância.

A terceira pergunta – qual o tamanho da quantidade de servidores a ser balanceada?
Essa questão se resolveu sozinha. Normalmente, os clientes não tornam os aglomerados de servidores muito grandes, e isso está de acordo com as recomendações do artigo de limitar os aglomerados a 30-40 servidores.

Além disso, ao segmentar o pool de servidores, simplificamos a tarefa do algoritmo de balanceamento.

Quarta questão – até que ponto uma rede neural com seu longo processo de treinamento e raras balanceações nos convém? Decidimos abandoná-la em favor de algoritmos operacionais mais simples, para obter resultados em segundos.

Balanceamento de carga no Openstack (Parte 2)

Você pode se familiarizar com a descrição do sistema que utiliza esses algoritmos e suas desvantagens. aqui

Implementamos e lançamos este sistema e obtivemos resultados promissores – atualmente, ele analisa regularmente a carga da nuvem e fornece recomendações para mover máquinas virtuais, que são em grande parte corretas. Mesmo agora, é visível que podemos conseguir uma liberação de 10-15% dos recursos para novas máquinas virtuais, melhorando a qualidade do trabalho das existentes.

Balanceamento de carga no Openstack (Parte 2)

Ao detectar um desbalanceamento de RAM ou CPU, o sistema envia comandos ao agendador Tionix para realizar a migração ao vivo das máquinas virtuais necessárias. Como pode ser visto no sistema de monitoramento, a máquina virtual foi transferida de um (superior) para outro (inferior) host, liberando memória no host superior (destacada em círculos amarelos), ocupando-a, respectivamente, no inferior (destacada em círculos brancos).

Atualmente, estamos tentando avaliar mais precisamente a eficácia do algoritmo em operação e tentando encontrar possíveis falhas.

Etapa 3

À primeira vista, poderia-se ficar satisfeito, esperar a eficácia comprovada e encerrar o assunto.
Mas somos levados a realizar uma nova fase pelas evidentes oportunidades de otimização.

  1. Estatísticas, por exemplo, aqui e aqui mostram que sistemas com dois e quatro processadores têm desempenho significativamente inferior aos de um único processador. Portanto, todos os usuários obtêm de CPUs, RAM, SSD, LAN e FC comprados em sistemas multiprocessadores um retorno significativamente menor em comparação com os de um único processador.
  2. Os próprios planejadores de recursos podem operar com erros sérios, aqui está um dos artigos sobre este tema.
  3. As tecnologias de monitoramento de RAM e cache oferecidas pelas empresas Intel e AMD permitem estudar o comportamento das máquinas virtuais e organizá-las de forma que os vizinhos "barulhentos" não atrapalhem as máquinas virtuais "tranquilas".
  4. Expansão do conjunto de parâmetros (rede, armazenamento de dados, prioridade da máquina virtual, custo da migração, prontidão para migração).

Total

O resultado do nosso trabalho para aperfeiçoar os algoritmos de balanceamento foi uma conclusão clara de que, por meio de algoritmos modernos, é possível alcançar uma otimização significativa dos recursos (25-30%) dos data centers e, ao mesmo tempo, melhorar a qualidade do atendimento ao cliente.

O algoritmo baseado em redes neurais é, sem dúvida, uma solução interessante, mas que precisa de desenvolvimento adicional e, devido às limitações existentes, não é adequado para resolver esse tipo de tarefa em volumes característicos de nuvens privadas. Entretanto, em nuvens públicas de grande porte, o algoritmo apresentou bons resultados.

Falaremos mais sobre as capacidades dos processadores, escalonadores e balanceamento em alto nível nos próximos artigos.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster