Pergunta

Eu estava olhando para os módulos escravo / piscina e parece semelhante ao que eu quer, mas também parece que eu tenho um ponto único de falha na minha aplicação (se o nó mestre vai para baixo).

O cliente tem uma lista de gateways (por causa do recuo - tudo que a mesma coisa) que aceitar conexões, e um é escolhido aleatoriamente pelo cliente. Quando o cliente se conecta todos os nós são examinados para ver qual tem a menor carga e, em seguida, o IP do menos- servidor carregado é enviada de volta para o cliente. O cliente, em seguida, Conecta a esse servidor e tudo é executado lá.

Em resumo, eu quero que todos os nós para agir como ambos os gateways e, na verdade, processar solicitações do cliente. O balanceamento de carga é feito somente quando o cliente inicialmente conecta - todos os pacotes reais e processados ??em nó "casa" do cliente.

Como eu faria isso?

Foi útil?

Solução

Eu não sei se há esta módulos implementados ainda, mas o que posso dizer, o equilíbrio de carga é superestimada. O que posso argumentar é, colocação aleatória de empregos é melhor aposta se você não sabe muito mais informações como carga virá no futuro e na maioria dos casos, você realmente não. O que você escreveu:

Quando o cliente se conecta todos os nós são examinados para ver qual tem a menor carga e, em seguida, o IP do servidor carregado menos- é ??encaminhado de volta ao cliente.

Como você sabe que todos aqueles nó menos carregado não será mais carregado apenas no próximos ms? Como você sabe que todas essas altas nós carregadas que você não vai incluir em lista não vai cair carga apenas no próximos ms? Você realmente não pode saber a menos que você tem caso muito raro.

Apenas medida (ou computação) o desempenho do seu nó e probabilidade conjunto do nó ser escolhido dependerá dele. Escolha nó aleatoriamente, independentemente da carga atual. Use isso como abordagem inicial. Quando você configurá-lo, então você pode tentar tornar-se um algoritmo mais sofisticado. Aposto que ele vai ser um trabalho muito difícil de bater esta abordagem inicial. Confie em mim, muito difícil.

Editar : Para ser mais claro em um detalhe sutil, defendo fortemente que você não pode prever a carga futura de carga atual e histórico, mas você deve usar o conhecimento sobre tarefas durações probabilidade e decomposição atual de a vida de tarefa. Este trabalho é tão duro para tentar conseguir.

Outras dicas

O objetivo de uma árvore de supervisão é gerenciar os processos não necessariamente encaminhar solicitações. Não há nenhuma razão você não pode usar código diferente para enviar pedidos diretamente aos membros da lista de processos disponíveis. Ver a piscina: get_nodes ou piscina:. Get_node () funções para uma maneira de obter essas listas

Você pode deixar o módulo piscina lidar com a gestão dos processos (reiniciando, monitoramento e matando processamento) e usar algum outro módulo para pedidos transparente de redirecionamento para o pool de processos. Talvez você estava procurando piscinas distribuídos embora? Vai ser difícil ficar longe do processo mestre em erlang whithout indo para nós distribuídos. O sistema em execução todo é praticamente uma grande árvore supervisão.

Recentemente, lembrou-se do módulo pg que permite grupos de processo de configuração. mensagens enviadas para o grupo ir para cada processo no grupo. Ele pode levá-lo a meio caminho em direção ao que você quer. você teria que escrever o código para decidir alças que processar a solicitação para real, mas você teria uma piscina sem um mestre de usá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top