Pergunta

Estou escrevendo um aplicativo de pesquisa distribuída com AKKA usando uma simples topologia mestre e múltipla trabalhadora, com o objetivo de implantar para um aglomerado interno de nós ou dentro de uma nuvem corporativa. (Quando Akka 2.1 se torna disponível, eu vou analisar o suporte de cluster)

minha pergunta: Qual é a maneira mais simples / melhor de implantar meu código (na forma de uma pasta contendo um microkernel AKKA) em cada nó, iniciá-lo, deixe-o fazer a coisa, depois derrubar e repetir conforme necessário?

  • O diretório microkernel e executável é idêntico para cada nó trabalhador e apenas alguns MB. Config contém o ip de um mestre que eles vão se conectar.
  • Eu pretendo começar manualmente o mestre.
  • Resiliência não é uma preocupação, pois isso não é uma aplicação crítica de negócios, sim uma problema de pesquisa.
  • Nenhum dado importante é armazenado localmente para os trabalhadores.
  • Após a conclusão do aplicativo, posso desejar reimplementar um aplicativo diferente sem derrubar os nós (por exemplo, tendo refinado a base de código).

update: descobriu que os nós de Condor para suportar trabalhos em execução no modo de toda a máquina. Isso deve suportar a execução do microkernel como um trabalho, e só precisa ter certeza de que os trabalhadores saiam corretamente quando terminar.

update 2: alguém mencionado pelo Zookeeper pode ser bem adequado para isso. Apreciaria a entrada de qualquer pessoa com experiência.

Foi útil?

Solução

Aqui estão algumas idéias. Eu não tenho experiência com AKKA, mas sei sobre computação em grade e implantação.

    .
  1. Use uma ferramenta de grade existente, como http://www.gridgain.com (que tenha uma versão GPL). Também ouvi falar de pessoas construindo uma grade com http://www.hazelast.com/

  2. use uma nuvem em caixa, como airframe, http://www.pistoncloud.com/press-releases/Piston-cloud-Launches-free-openstack-Distribution/ . Tenho certeza de que deve haver outros.

  3. airframe vem com a nuvem de fundição, eu acredito, mas você poderia olhar para usá-lo diretamente: https:// micro.cloudfoundry.com/ Mas não tenho certeza de como essa versão é escalada.

  4. Role seu próprio sistema, instale em uma imagem de VM, depois clone para seus outros nós.

  5. Quando se trata de rolar o seu próprio, você poderia fazer isso como segue, o que é muito semelhante a algo que eu já desenvolvi e funciona bem.

    • Construa seu aplicativo usando o Maven, usando o que sempre bibliotecas que você gosta.

    • empurre binários construídos no sonatype nexus.

    • Construa um lançador personalizado, que dado as coordenadas do Maven de um módulo podem executá-lo. Meu Laucher primeiro verifica um repo de maven local para os frascos, se eles não existem, então ele faz o download do Nexus. Em seguida, constrói um classpath de todos os frascos na árvore de dependência transitiva. Em seguida, cria um novo carloader com o novo classpath, e lançadores da classe principal através do volloader.

    • Escreva um serviço, usando Java-Service-Wrappe ou similar, que na inicialização verifica qual versão do código é executado lendo algumas coordenadas de Maven e o nome de uma classe principal da configuração. A configuração pode ser um arquivo na unidade de rede, URL pré-configurada ou até mesmo zookeeper. Em seguida, passa isso para o lançador que faz o download e executa o código.

    • Instale este serviço em muitas máquinas, manualmente ou via clonando uma VM.

    • lucro!

    Eu não estou mencionando Akka Especificamente, pois a maior parte do seu problema parece ser como obter código em execução em nós de mulitple.

    A rota personalizada funcionou bem para mim, mas só eu tenho alguns servidores usando isso, e toda a minha computação de grade adequada é feita em data-sinapse. Mas eu me pergunto se era para começar de novo se um desses paas de código aberto seria um bom ajuste.

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