2013-05-16 3 views
77

새 프로젝트 (Java 기반)를 시작하는 중입니다. 모듈 형, 분산 및 복원력있는 아키텍처로 구축해야합니다.Akka 또는 Reactor

따라서 비즈니스 프로세스간에 상호 통신이 가능하고 상호 운용 가능하지만 독립적이어야합니다.

나는 시대에 자신의 차이 외에 2 개 개의 다른 의견 표현이,이 프레임 워크에서 지금 당장 찾고 있어요 :

를 내가 위의 프레임 워크 중 하나를 선택할 때 고려해야 할 사항은 무엇입니까?

내가 지금까지 이해하고있는 한, Akka는 여전히 (내가 메시지를 보내려는 배우를 '선택'해야하는 방식으로) 어떻게 든 결합되어 있지만 매우 탄력적입니다. Reactor가 느슨한 동안 (이벤트 게시를 기반으로 함).

누군가 적절한 결정을 내리는 데 도움이 될 수 있습니까?

UPDATE

더 검토 한 후 Akka의 Event Bus, 나는 features expressed by Reactor 이미 Akka에 포함 된 어떤 방법으로 생각합니다. 따라서이 둘 사이의 주요 차이점이라는 것을 지금 나에게 보인다

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"); 

을 :

예를 들어 https://github.com/reactor/reactor#events-selectors-and-consumers에 문서화 가입 및 이벤트 발행은 다음과 같은 Akka으로 표현 될 수있다

  • Akka, 더 성숙한, 봄에 바인딩,
  • 원자로, 초기 단계를 형태 보증 할 의무

제 해석이 맞습니까? 그러나 Akka의 액터와 Reactor의 소비자 인의 개념적 차이점은 무엇입니까?

+8

Akka는 스칼라가 사용하는 바인드되어 있지 :) 몇 달 더 비교 포인트를해야합니다 사실, 대부분의 자바에서 그것을 사용할 수 있습니다. –

+0

Hello Viktor, 예, 저는 Java에서도 Akka를 사용하고 있습니다. 제가 의미하는 바는 Akka가 Typesafe 생태계의 일부이며, Reactor to Spring입니다. Scala에서 개발할 때 Akka가 아마도 가장 적절한 선택 일 것입니다. –

+0

빅토르는, 나는 우리가 Akka가 (이벤트 버스, Dispatcher 및 사서함 포함)은 Reactor 패턴을 구현 말할 수 있으리라 생각 나는 수정입니까? –

답변

30

이것은 훌륭한 질문이며 앞으로 몇 주 동안 대답이 바뀔 것입니다. 우리는 노드 간 통신이 너무 이른 것 같아서 지금과 같이 될지에 대한 어떤 약속도 할 수 없습니다. 우리는 Reactor에서 클러스터링을 시연하기 전에 아직 조립할 조각이 있습니다.

Reactor가 노드 간 통신을하지 않기 때문에 OOTB가 의미하지는 않습니다. 이 될 수 없습니다. :) 하나는 클러스터 된 현명함을주기 위해 Redis 또는 AMQP와 같은 것을 사용하여 원자로 사이를 조정하는 데 상당히 얇은 네트워크 계층 만 필요합니다.

우리는 Reactor의 분산 시나리오에 대해 분명히 이야기하고 있습니다. 어떻게 작동하는지 정확히 말하기는 너무 이르다.

클러스터링이 필요한 항목이 있으면 Akka를 선택하는 것이 안전합니다.

+0

감사합니다 존, 나는 Reactor가 매우 유망하다고 생각합니다. 그러나 Reactor와 Akka 사이에 개념상의 차이점이 있는지, Reactor가없는 기능 (초기 단계 임) 외에도 이해해야합니다. 요약하면 Akka의 배우와 Reactor의 소비자 사이의 개념적 차이는 무엇입니까? 나는 또한 Reka GitHub 페이지에서 이벤트 구독/파견과 흡사하다고 생각하는 Akka의 샘플 이벤트로 내 질문을 업데이트했습니다. 감사. –

+0

존, 귀하의 답변을 여기 읽었습니다 : http://blog.springsource.org/2013/05/13/reactor-a-foundation-for-asynchronous-applications-on-the-jvm/#comment-345867 - so 우리는 장기적으로 Akka와 Reactor가 Reactor 패턴과 Actor 모델을 지원하는 유사한 프레임 워크라고 가정 할 수 있습니다. –

+0

위의 설명은 다음 사항으로 인해 정확하지 않습니다. http://stackoverflow.com/questions/16595393/akka-or-reactor/16674388#comment23991745_16663953 및 http://stackoverflow.com/a/16674388/565110 –

41

이 원자로는 여전히 스케치 내가 (Akka 기술 리드) 갈 곳 통찰력이 없기 때문에이 시점에서 얘기하기 어렵다. Reactor가 Akka의 경쟁자가되는지 알아 보는 것은 흥미로울 것입니다. 우리는 기대하고 있습니다.

요구 사항 목록에서 Reactor가 복원력 (즉, 감독이 Akka에서 제공하는 것)과 위치 투명성 (즉, 로컬 또는 원격 메시징을 통해 추상화 할 수있는 방식으로 활성 엔터티를 참조합니다. 그것은 당신이 "분산"이라고 암시하는 것입니다). "모듈 식"의 경우 Reactor에 대해 충분히 알지 못합니다. 특히 활성 구성 요소를 검색하고 관리하는 방법에 대해 충분히 알지 못합니다.

실제 프로젝트를 시작하고 첫 번째 문장을 만족시키는 무언가가 필요한 경우 지금 시점에서 Akka를 추천하는 것이 논란의 여지가 없다고 생각합니다 (Jon도 언급했듯이). SO 또는 akka-user mailing list에 대해 구체적으로 질문하십시오.

+0

감사합니다 Roland, 저는 두 프로젝트의 사람들이 답변에 기여하고 있음을 알고 있습니다. 나는 현재 Akka를 시험하고있다. 예상했던대로 Reactor가 아직 초기 단계에 있기 때문에 질문에 대한 최종 답을 제공하는 것이시기 상조이므로 아직 비교가되지 않습니다. 자, 어떻게 진화하는지 보도록하겠습니다. 감사합니다, David –

+7

답변 해 주셔서 감사합니다, 롤랜드. Reactor가 Akka 경쟁자가 아니라는 것을 분명히 밝히고 싶었습니다. 비동기 응용 프로그램과 관련하여 겹쳐지는 문제로 인해 유사점이 있습니다. 그러나 Reactor는 다른 시스템을 구축 할 수있는 기반이되는 프레임 워크입니다. 다른 시스템은 Reactor 자체보다 Akka와 훨씬 더 겹칠 수 있습니다. 그러나 가까운 장래에 Reactor는 다른 시스템을 가능하게하고 전체 스택 프레임 워크가되지 않는 프레임 워크로 남을 것입니다. Reactor/Akka 총격 사건에 대한 만족을 늦춰야합니다. ;) –

+0

걱정하지 마라. 나는 잘 할거라 생각한다. 더 많은 도서관이이 분야에 들어서면서 교차 수분을 보게 될 것이다. –

35

원자로가 봄에 구속되지 않으며,이 옵션 모듈입니다. Jon이 설명한 것처럼 Reactor를 휴대 할 수 있기를 바랍니다. 우리는 심지어 마일스톤 (1.0.0.SNAPSHOT가), 그 점에서 나는 IMO 환상적인 비동기 프레임 워크입니다 Akka에 깊은 모양을 것 아니기 때문에

나는 생산 추진에 대해 확신 할 수 없습니다. 당신이 플랫폼 (이전) 또는 합성 가능한 선물 (후자)에 대한 중 하나를 보면 또한 적응 될 수있는 변통Vert.x을 고려하십시오. 비동기 패턴의 다양한 후에 보면, 어쩌면 GPars는 당신에게 더 완벽한 솔루션을 제공 할 것입니다. 결국

, 우리는 확실히 사실 우리는 (유연한 작성 가능 이벤 팅은, 분산 및 파견 전략에 얽매이지) 쉽게 RxJava에서 비트를 찾을 수있는 혼합 방식으로 기울고있어, 중복이있을 수 있습니다 Vert.x, Akka 등 우리는 심지어 우리가 강력하게 그루비하기 위해 최선을 다하고 있습니다 경우에도 언어 선택에 의해 의견을 고집하지 않는, 사람들이 이미Clojure의 및 코 틀린 포트를 시작했습니다. 이 믹스에 몇 가지 요구 사항이 Spring XDGrails에 의해 구동된다는 사실을 추가합니다. 당신의 목격 관심을

많은 감사, 희망 당신은

+0

Stephane에게 감사드립니다. 귀하의 답변 (및 Jon의 의견, http://stackoverflow.com/questions/16595393/akka-or-reactor/16674388#comment23991745_16663953)이 훨씬 더 명확한 시각을 제공한다고 생각합니다. 내가 대답 할 질문을 표시하기 전에 아직 보류 하겠지만, 말했듯이, 가까운 미래에 어떤 것이 튀어 나오는지 보자. 다시 한 번 두 프로젝트에 참여한 사람들이 유용한 통찰력을 제공하는데 시간을 할애 해 주셔서 감사드립니다. –

+0

Vert.x에 동의합니다. Vertex.x를 프로덕션 환경에서 두 프로젝트에서 사용하여 구성 요소 간 통신을 수행했으며 완벽하게 작동합니다. – Wins