Wiki¶
Maybe start reading here
Ver aqui "o que significa o load average no Linux"
Limitação: A MIB UCD não indica o número de cores, e o load não está ajustado a este parâmetro!
Proposta de algoritmo de balanceamento¶
- Um sistema composto por N hosts, N >= 1.
- Cada host classificado com duas métricas:
- load, a leitura por snmp da carga de processador no último minuto;
- round-trip, o tempo que levou a fazer essa leitura para um determinado host.
- Normalizam-se as duas métricas num valor apenas, com alguma fórmula, que permita ordenar os hosts por ordem de "mais livre" a "menos livre".
- Não interessa seleccionar "o mais livre", pois
- Seria necessário avaliar em tempo real, a cada pedido, qual o mais livre.
- Não é exequível, aumentaria imenso o tempo de resposta.
- A avaliação é feita de "tempos a tempos"
- Logo seleccionar "o mais livre" causaria que, num período entre avaliações, seria sempre o mesmo servidor a receber todos os pedidos.
- Então é preciso criar uma relação entre o valor resultado da avaliação e uma percentagem, o que permite dizer algo como:
- "novos pedidos serão encaminhados para o"
- "servidor mais livre com probabilidade 60%"
- "segundo servidor mais livre com probabilidade 20%"
- "terceiro servidor mais livre com probabilidade 10%"
- etc.
- "novos pedidos serão encaminhados para o"
- É necessário criar uma fórmula, com base no "load" e no "round trip" que nos permita algo como:
- Quantificar a carga máxima possível do sistema (todos os hosts)
- Quantificar a carga de uma máquina, logo determinar a carga livre dessa máquina
- Concluir que "a máquina X só está a contribuir com 40%, logo devia receber 60% dos pedidos a seguir"
- É preciso ter em conta que uma máquina pode ser mais potente que outra, as percentagens já têm de ser "normalizadas", pois uma máquina a contribuir 40% absolutos pode de facto estar na sua carga máxima!
dizer que, de toda a carga do sistema, 60% está livre num servidor
loads[0].load = 41l; loads[0].round_trip = 41l; loads[1].load = 40l; loads[1].round_trip = 40l; loads[2].load = 4l; loads[2].round_trip = 4l; loads[3].load = 5l; loads[3].round_trip = 5l; loads[4].load = 10l; loads[4].round_trip = 10l; loads[5].load = 50l; loads[5].round_trip = 50l; sum_load = 100l; sum_rt = 100l; n_up_servers = 5; peers->number = 5;