Estou começando um novo projeto (baseado em java). Eu preciso construí-lo como uma arquitetura modular, distribuída e resiliente.
Portanto, gostaria que os processos de negócios se comuniquem entre si, sejam interoperáveis, mas também independentes.
Estou olhando agora para dois frameworks que, além de suas diferenças de idade, expressam 2 visões diferentes:
- Akka ( http://akka.io )
- Reactor ( https://github.com/reactor/reactor )
O que devo considerar ao escolher uma das estruturas acima?
Pelo que eu entendi até agora, Akka ainda é de alguma forma acoplado (de uma forma que eu tenho que 'escolher' o ator para o qual desejo enviar as mensagens), mas muito resiliente. Enquanto o Reactor está solto (com base na postagem do evento)
Alguém pode me ajudar a entender como tomar uma decisão adequada?
ATUALIZAR
Depois de revisar melhor o Event Bus do Akka, acredito que de alguma forma os recursos expressos pelo Reactor já estão incluídos no Akka.
Por exemplo, a assinatura e a publicação do evento, documentadas em https://github.com/reactor/reactor#events-selectors-and-consumers , podem ser expressas em Akka da seguinte forma:
final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
new UntypedActorFactory() {
@Override
public Actor create() throws Exception {
return new UntypedActor() {
final LoggingAdapter log = Logging.getLogger(
getContext().system(), this);
@Override
public void onReceive(Object message)
throws Exception {
if (message instanceof String)
log.info("Received String message: {}",
message);
else
unhandled(message);
}
};
}
}), "actor");
system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");
Portanto, parece-me agora que as principais diferenças entre os dois são:
- Akka, mais maduro, ligado ao Typesafe
- Reator, estágio inicial, vinculado à primavera
Minha interpretação está correta? Mas qual é a diferença conceitual entre o Ator em Akka e o Consumidor em Reactor ?
Respostas:
É difícil dizer neste ponto porque o Reactor ainda é um esboço e eu (líder de tecnologia da Akka) não tenho uma ideia de para onde ele irá. Será interessante ver se o Reactor se tornará um concorrente do Akka, estamos ansiosos por isso.
Pelo que eu posso ver, em sua lista de requisitos, o Reactor está perdendo resiliência (ou seja, o que a supervisão oferece em Akka) e transparência de localização (ou seja, referindo-se a entidades ativas de uma forma que permite abstrair sobre mensagens locais ou remotas; que é o que você implica por “distribuído”). Para “modular”, não sei o suficiente sobre o Reactor, em particular como você pode pesquisar componentes ativos e gerenciá-los.
Se você começar um projeto real agora e precisar de algo que satisfaça sua primeira frase, não acho que seria controverso recomendar Akka neste momento (como Jon também observou). Sinta-se à vontade para fazer perguntas mais concretas sobre o SO ou na lista de e-mail do akka-user .
fonte
O Reactor não está vinculado ao Spring, é um módulo opcional. Queremos que o Reactor seja portátil, uma base como Jon descreveu.
Não vou estar confiante em empurrar para a produção, pois não somos nem mesmo Milestone (1.0.0.SNAPSHOT), a esse respeito, eu daria uma olhada mais profunda no Akka, que é um fantástico framework assíncrono IMO. Considere também Vert.x e Finagle, que podem ser adaptados se você procurar uma plataforma (o primeiro) ou futuros composíveis (o último). Se você procura uma ampla gama de padrões assíncronos, talvez o GPars forneça uma solução mais completa.
No final, podemos certamente ter sobreposições, na verdade, estamos inclinados a uma abordagem mista (eventos combináveis flexíveis, distribuídos e não vinculados a qualquer estratégia de despacho) onde você pode facilmente encontrar bits de RxJava , Vert.x , Akka etc. Não somos nem mesmo opinativos pela escolha do idioma, mesmo que estejamos fortemente comprometidos com Groovy, as pessoas já começaram as portas Clojure e Kotlin . Adicione a essa mistura o fato de que alguns requisitos são orientados pelo Spring XD e Grails .
Muito obrigado pelo seu interesse testemunhado, espero que você tenha mais pontos de comparação em alguns meses :)
fonte
Esta é uma excelente pergunta e a resposta mudará nas próximas semanas. Não podemos fazer nenhuma promessa de como será a comunicação entre os nós agora, só porque é muito cedo. Ainda temos algumas peças a juntar antes de podermos demonstrar o clustering no Reactor.
Com isso dito, só porque o Reactor não faz comunicações OOTB entre nós, não significa que não possa . :) Seria necessário apenas uma camada de rede bastante fina para coordenar entre os reatores usando algo como Redis ou AMQP para dar a ele alguma inteligência em cluster.
Definitivamente, estamos falando e planejando cenários distribuídos no Reactor. É muito cedo para dizer exatamente como isso vai funcionar.
Se você precisa de algo que faça cluster agora, estará mais seguro ao escolher o Akka.
fonte