Implantação akka de curto prazo em vários nós
-
12-12-2019 - |
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.
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.
- .
-
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/
-
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.
-
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.
-
Role seu próprio sistema, instale em uma imagem de VM, depois clone para seus outros nós.
-
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!
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.
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.