Como balancear a carga em relação à memória, uso do disco e outros atributos

4

Encontrei balanceadores de carga, como o NGINX, mas eles parecem funcionar apenas com o uso da CPU e o tráfego de rede. Como eu carregaria o saldo em relação a outras variáveis, como a quantidade de disco disponível em cada nó ou a quantidade de memória disponível?

Eu teria que escrever meu próprio serviço de manipulação de solicitações para aproveitar essas variáveis ao decidir para qual nó enviar a solicitação?

Este é o meu caso de uso, estou construindo um sistema de arquivos distribuído para apagar códigos e gostaria que o balanceador de carga enviasse uma gravação de um arquivo para o nó que pudesse manipular o tráfego, carga da CPU, disco suficiente para a operação IO e tem memória suficiente para a operação esperada. Pelo que entendi, ter um balanceador de carga só pode lidar com o tráfego e as partes da CPU, mas como eu aumentaria ainda mais os requisitos do balanceador de carga?

Obrigado por ajudar na minha primeira pergunta.

    
por user3325789 21.04.2016 / 10:05

3 respostas

5

Rob-d menciona que os balanceadores de carga devem executar verificações de integridade nos servidores de back-end para garantir que eles sejam saudáveis e possam atender às solicitações. Isso é absolutamente verdade e acho que é o que permitiria que você fizesse o que queria (verificando outras métricas e fazendo o LB fazer escolhas de roteamento com base nelas).

Supondo que você seja HTTP de balanceamento de carga, a maioria dos balanceadores de carga executará um HTTP GET ou HEAD para uma determinada página para verificar seu status como um back-end viável. Esta página pode ser uma imagem estática, um arquivo CSS ou até mesmo uma página HTML.

Mas também pode ser uma página PHP / ASP / Java / Python. Alguns podem argumentar que deve ser até mesmo uma página que pode executar algum tipo de verificação de integridade na pilha do seu aplicativo (SQL, NoSQL, serviços auxiliares, etc.).

Não há motivo para você não poder escrever um script que implemente seu algoritmo complexo de balanceamento de carga e simplesmente retorne um HTTP/1.1 200 OK ou HTTP/1.1 503 Service Unavailable dependendo se o servidor pode ou não atender às solicitações.

Eu conheço pelo menos um load-balancer que pode executar um agent-check secundário, que é capaz de retornar mais detalhes do que simplesmente UP / DOWN, permitindo que o peso de um servidor seja dinamicamente alterado em intervalos configurados baseado em qualquer coisa agente decide. Eu acho que isso seria exatamente o que você está procurando.

    
por 21.04.2016 / 14:19
3

Normalmente, o componente de balanceamento de carga do balanceador de carga só está ciente do número de conexões de rede ativas e / ou solicitações que enviou a um servidor de back-end e não sabe nada da carga real gerada no sistema de back-end .

O algoritmo de balanceamento de carga que você seleciona determina qual servidor back-end manipulará a próxima nova conexão / solicitação que o balanceador de carga recebe.

O mais simples é o round robin, em que cada nova conexão / solicitação subseqüente vai para o próximo servidor back-end disponível.

Além do round-robin, a maioria dos balanceadores de carga também oferece suporte a determinados algoritmos ponderados de balanceamento de carga que enviam podem enviar proporcionalmente mais ou menos solicitações / conexões a servidores back-end predefinidos específicos. (isto é, com servidores back-end A com peso 1 e B com peso 2, o servidor A conseguirá processar 1/3 de todas as solicitações e o servidor B 2/3 das novas solicitações )

Ao adicionar um componente de monitoramento, alguns balanceadores de carga são capazes de ajustar dinamicamente esse peso. ou seja, quando um servidor back-end começa a abrandar em comparação com os outros, irá receber dinamicamente menos novas ligações ou menos novos pedidos.

Eu diria que ajustar o balanceador de carga com base no espaço em disco disponível em um servidor de back-end é definitivamente uma métrica de desempenho não padrão. :)

Com relação ao balanceamento de carga baseado em "requisitos para a operação esperada" que requer profundo entendimento do protocolo que você está projetando e você realmente deseja duplicar essa lógica no balanceador de carga?

    
por 21.04.2016 / 11:09
3

A pergunta que você está fazendo é uma questão extremamente importante em relação ao balanceamento de carga, há duas razões principais pelas quais carregamos o equilíbrio, primeiro e mais óbvio é dividir as solicitações do cliente em dois ou mais servidores, segundo para fazer esse serviço altamente disponível. Tendo configurado o balanceador de carga com esses dois resultados em mente, entramos no reino do whatif? - digamos que você equilibre a carga de dois servidores web e o Apache trava no host um, usando apenas um algoritmo de balanceamento de carga como round robin o balanceador de carga ainda enviaria solicitações de clientes ao servidor com falha, portanto também precisamos monitorar os clientes com verificações de integridade '- a principal razão para isso é tomar ações evasivas quando uma verificação de integridade falha - você pode imaginar as verificações de integridade que o balanceador de carga precisa executar em nosso exemplo do Apache - o Apache está ativo? você pode pingar seu gateway? o disco está cheio? você pode acessar seu servidor de banco de dados? etc etc.

Existem muitas outras vantagens para balanceamento de carga, como armazenamento em cache, sessões fixas, descarregamento de SSL e roteamento de rede com base em IP de clientes, localização geográfica ou navegador, você pode usar o http para reescrever e redirecionar, modificar cabeçalhos e basicamente qualquer outra coisa que queira mencionar (a temperatura do servidor, por exemplo).

Quanto às métricas que você mencionou, elas não são verificações de integridade, mas 'verificações de desempenho' ou 'estes estados' - o balanceador de carga pode pesquisar o servidor para qualquer métrica que você como e ele roteará solicitações com base nos parâmetros que você definiu - mas os balanceadores de carga são principalmente dispositivos de rede, não pesquisam ram e cpu, alguma outra coisa faz (externa) e informam ao balanceador de carga que um limite foi cruzado (por exemplo, RAM > 90% usado), o balanceador de carga, em seguida, gera um semáforo 'não roteie novas solicitações para o servidor1' e (o serviço externo) continua a pesquisar o servidor1 até que a RAM < 90% - mas e se todos os servidores reportarem RAM > 90% - você pode ver a rapidez com que fica complicado, no balanceamento de carga da nuvem essas métricas são usadas para aumentar e diminuir o pool de servidores por trás do balanceador de carga dinamicamente.

dê uma olhada aqui para uma visão geral link

-Eu votei sua pergunta de volta, as pessoas devem comentar quando perguntas de votação.

    
por 21.04.2016 / 12:17