Akka ou reator [fechado]


94

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:

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 ?


8
A Akka não é obrigada a ser usada pelo Scala, na verdade, a maioria usa a partir do Java.
— Viktor Klang

1
David: Algo como: Akka EventBus API em conjunto com Akka Actors implementa o Reactor Pattern
— Viktor Klang

9
Só para esclarecer: o Reactor não está vinculado ao Spring. Nós intencionalmente evitamos quaisquer dependências do Spring porque, como uma estrutura básica, não faz sentido restringir seu uso apenas aos usuários do Spring. Quanto à diferença entre um Ator e um Consumidor: no que diz respeito ao Reactor, o seu Consumidor pode ter estado ou não. Presume-se que você deseje usar uma classe anônima sem estado ou lambda Java 8, mas isso não é um requisito. E, como mencionei em minha resposta, o conjunto de ferramentas Reactor é, para as primeiras iterações, intencionalmente sucinto. Não estamos tentando criar "o próximo Akka".
— Jon Brisbin

8
Apenas deixando de mencionar o vertx.io, pois acredito que esteja no mesmo campo orientado a eventos, com alguns conceitos interessantes em veia semelhante para aqueles que estão pesquisando.
— Opentuned

1
Passando alguns anos, também estou em uma situação semelhante. Meu aplicativo é principalmente baseado em molas e agora preciso lidar com um recurso orientado a eventos. Existe um vencedor claro b / w Akka e Spring-reactor? Estou procurando um framework com comunidades de usuários ativos, caso chegue a cenários mais complicados.
— tintin

Respostas:


47

É 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 .


Obrigado Roland, adoro ver que as pessoas de ambos os projetos estão contribuindo para a resposta. Atualmente, estou testando o Akka. Como você previu, é muito prematuro fornecer uma resposta final para a pergunta, exceto que o Reactor ainda está nos estágios iniciais, portanto, ainda não é adequado para uma comparação. Então, vamos esperar e ver como as coisas evoluem :-) Obrigado, David
— David Riccitelli

7
Obrigado pela sua resposta, Roland. Eu só queria esclarecer que o Reactor não é um concorrente Akka. Existem semelhanças devido a uma área de preocupação sobreposta em relação aos aplicativos assíncronos. Mas o Reactor deve ser uma estrutura básica sobre a qual outros sistemas podem ser construídos. Esses outros sistemas podem se sobrepor ainda mais ao Akka do que o próprio Reactor. Mas no futuro próximo, o Reactor continuará sendo uma estrutura que permite outros sistemas e não será uma estrutura completa. Você terá que adiar a gratificação no tiroteio Reactor / Akka. ;)
— Jon Brisbin

Não se preocupe, acho que você se sairá bem e estou certo de que veremos a polinização cruzada à medida que mais bibliotecas entrarem neste campo.
— Roland Kuhn

37

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 :)


Obrigado, Stephane, acredito que sua resposta (e o comentário de Jon, stackoverflow.com/questions/16595393/akka-or-reactor/… ) dão uma perspectiva muito mais clara. Ainda vou esperar antes de marcar a pergunta respondida, como você disse, vamos ver o que acontece em um futuro próximo. Novamente, eu realmente aprecio que as pessoas envolvidas em ambos os projetos gastaram tempo fornecendo idéias úteis.
— David Riccitelli

Eu concordaria com Vert.x. Eu usei o Vert.x no ambiente de produção em alguns projetos para se comunicar entre os componentes e ele funciona perfeitamente.
— Vence em

33

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.


Obrigado Jon, acho o Reactor muito promissor. Ainda assim, preciso entender se há uma diferença conceitual entre o Reactor e o Akka, além dos recursos que o Reactor está faltando (é claro, estando em seu estágio inicial). Em resumo, qual é a diferença conceitual entre um Ator no Akka e um Consumidor no Reactor? Também atualizei minha pergunta com um exemplo de evento em Akka que, acredito, se assemelha à inscrição / envio de evento na página Reactor do GitHub. Obrigado.
— David Riccitelli

Jon, eu estava lendo sua resposta aqui: blog.springsource.org/2013/05/13/… - então podemos supor que no longo prazo Akka e Reactor serão frameworks semelhantes, ambos suportando o padrão Reactor e o modelo Actor.
— David Riccitelli


Não entendo como este comentário agora está incorreto? Nada aqui contradiz a explicação da direção estratégica do Reactor.
— Jon Brisbin

1
Peguei vocês. Sim, você entendeu corretamente. Obrigado por fazer essas perguntas! :)
— Jon Brisbin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.