Akka 또는 원자로 [닫힘]


94

새 프로젝트 (자바 기반)를 시작하는 중입니다. 모듈 식, 분산 형, 탄력적 인 아키텍처로 구축해야합니다.

따라서 비즈니스 프로세스가 서로 통신하고 상호 운용 가능할뿐만 아니라 독립적이기를 원합니다.

저는 지금 나이 차이 외에도 두 가지 다른 관점을 표현하는 두 가지 프레임 워크를보고 있습니다.

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

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

누군가가 적절한 결정을 내리는 방법을 이해하도록 도울 수 있습니까?

최신 정보

Akka 의 Event Bus 를 더 잘 검토 한 결과 , Reactor에서 표현한 기능 이 이미 Akka에 포함되어 있다고 생각 합니다.

예를 들어 https://github.com/reactor/reactor#events-selectors-and-consumers에 문서화 된 구독 및 이벤트 게시 는 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");

따라서 두 가지의 주요 차이점은 다음과 같습니다.

  • Akka, 더 성숙하고 Typesafe에 바인딩
  • 원자로, 초기 단계, 봄에 바인딩

내 해석이 맞습니까? 그러나 Akka의 Actor와 Reactor의 Consumer의 개념적 차이점은 무엇 입니까?


8
Akka는 Scala에서 사용하도록 제한되어 있지 않습니다. 사실 대부분은 Java에서 사용합니다.
Viktor Klang 2013 년

1
David : 같은 것 : Akka Actors와 함께 Akka EventBus API가 Reactor 패턴을 구현합니다
Viktor Klang

9
명확히하기 위해서 : Reactor는 Spring과 전혀 관련이 없습니다. 기본 프레임 워크로서 Spring 사용자에게만 사용을 제한하는 것은 의미가 없기 때문에 의도적으로 Spring 종속성을 제거합니다. Actor와 Consumer의 차이점은 Reactor에 관한 한 Consumer는 Stateful이거나 그렇지 않을 수 있습니다. 상태 비 저장 익명 클래스 또는 Java 8 람다를 사용한다고 가정하지만 필수 사항은 아닙니다. 그리고 제 답변에서 언급했듯이 Reactor 도구 세트는 초기 반복을 위해 의도적으로 간결합니다. 우리는 "다음 Akka"를 만들려고하지 않습니다.
Jon Brisbin

8
vertx.io에 대한 언급은 제가 연구하는 사람들을 위해 비슷한 맥락에서 몇 가지 흥미로운 개념과 함께 동일한 이벤트 주도 분야에 있다고 생각합니다.
Opentuned

1
몇 년 후, 저도 비슷한 상황에 처해 있습니다. 제 애플리케이션은 주로 스프링 기반이며 이제 이벤트 기반 기능을 처리해야합니다. Akka와 Spring-reactor에 대한 명확한 승자가 있습니까? 더 복잡한 시나리오에 도달 할 경우를 대비하여 활성 사용자 커뮤니티가있는 프레임 워크를 찾고 있습니다.
tintin 15.

답변:


47

Reactor는 아직 스케치이고 나 (Akka 기술 책임자)는 그것이 어디로 갈지에 대한 통찰력이 없기 때문에이 시점에서 말하기는 어렵습니다. Reactor가 Akka의 경쟁자가되는지 보는 것은 흥미로울 것입니다. 우리는 그것을 기대하고 있습니다.

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

지금 실제 프로젝트를 시작하고 첫 번째 문장을 만족시키는 무언가가 필요하다면,이 시점에서 Akka를 추천하는 것이 논란의 여지가 없다고 생각합니다 (Jon도 언급했듯이). SO 또는 akka-user 메일 링리스트 에 더 구체적인 질문을 자유롭게 물어보십시오 .


Roland에게 감사합니다. 두 프로젝트의 사람들이 답변에 기여하고 있다는 것을보고 싶습니다. 나는 현재 Akka를 시험하고 있습니다. 예상했듯이 Reactor가 아직 초기 단계에 있으므로 아직 비교에 적합하지 않다는 점을 제외하면 질문에 대한 최종 답변을 제공하는 것은 매우 시기상조입니다. 그러니 기다렸다가 어떻게 진화하는지 보자 :-) 감사합니다, David
David Riccitelli

7
답변 해주셔서 감사합니다, Roland. Reactor가 Akka 경쟁자가 아님을 명확히하고 싶었습니다. 비동기 애플리케이션과 관련된 관심 영역이 겹치기 때문에 유사점이 있습니다. 그러나 Reactor는 다른 시스템을 구축 할 수있는 기반 프레임 워크입니다. 이러한 다른 시스템은 Reactor 자체보다 Akka와 더 많이 겹칠 수 있습니다. 그러나 가까운 미래에 Reactor는 다른 시스템을 가능하게하는 프레임 워크로 남을 것이며 풀 스택 프레임 워크가 아닐 것입니다. Reactor / Akka 총격전에서 만족감을 늦춰야합니다. ;)
Jon Brisbin

걱정하지 마세요. 잘하실 수있을 것 같습니다. 더 많은 도서관이이 분야에 진입함에 따라 교차 수분을 보게 될 것이라고 확신합니다.
Roland Kuhn

37

Reactor는 Spring에 묶여 있지 않으며 선택적 모듈입니다. 우리는 Reactor가 Jon이 설명한 것처럼 휴대용이되기를 원합니다.

우리는 Milestone (1.0.0.SNAPSHOT)도 아니기 때문에 프로덕션을 추진하는 것에 대해 확신하지 못할 것입니다. 그런 점에서 환상적인 비동기 프레임 워크 IMO 인 Akka 를 더 자세히 살펴 보겠습니다 . 또한 플랫폼 (전자) 또는 구성 가능한 미래 (후자)를 찾는 경우 적용될 수있는 Vert.xFinagle 을 고려 하십시오 . 광범위한 비동기 패턴을 살펴보면 GPars가보다 완벽한 솔루션을 제공 할 것입니다.

결국, 우리는 확실히 겹치는 부분이있을 수 있습니다. 사실 우리는 RxJava , Vert.x , Akka 등에서 비트를 쉽게 찾을 수있는 혼합 된 접근 방식 (유연한 구성 가능한 이벤트, 분산 및 디스패치 전략에 얽매이지 않음)으로 기울고 있습니다 . 우리는 Groovy에 강하게 헌신하더라도 사람들은 이미 ClojureKotlin 포트를 시작했습니다 . 여기에 일부 요구 사항이 Spring XDGrails 에 의해 주도된다는 사실을 추가하십시오 .

관심을 가져 주셔서 감사합니다. 몇 달 안에 더 많은 비교 포인트를 얻을 수 있기를 바랍니다. :)


감사합니다 Stephane, 귀하의 답변 (및 Jon의 의견, stackoverflow.com/questions/16595393/akka-or-reactor/… )이 훨씬 더 명확한 관점을 제공 한다고 믿습니다 . 질문에 답변을 표시하기 전에 계속 기다리겠습니다. 말씀하신대로 가까운 장래에 무엇이 나올지 봅시다. 다시 한 번 두 프로젝트에 참여한 사람들이 유용한 통찰력을 제공하는 데 시간을 할애 해 주셔서 감사합니다.
David Riccitelli

Vert.x에 동의합니다. 몇 가지 프로젝트에서 프로덕션 환경에서 Vert.x를 사용하여 구성 요소간에 통신했으며 원활하게 작동합니다.
승리

33

이것은 훌륭한 질문이며 대답은 앞으로 몇 주 동안 바뀔 것입니다. 노드 간 통신이 너무 이르다고 지금 당장 어떤 모습 일지 약속 할 수 없습니다. Reactor에서 클러스터링을 시연하기 전에 아직 조립할 부분이 있습니다.

즉, Reactor가 노드 간 통신 OOTB를 수행하지 않는다고해서 OOTB를 수행 할 수 없다는 의미 는 아닙니다 . :) Redis 또는 AMQP와 같은 것을 사용하여 Reactor간에 조정하기 위해 상당히 얇은 네트워크 레이어 만 있으면 클러스터링 된 스마트를 제공 할 수 있습니다.

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

지금 클러스터링을 수행하는 것이 필요하다면 Akka를 선택하는 것이 더 안전 할 것입니다.


감사합니다 Jon, Reactor가 매우 유망하다고 생각합니다. 그러나 Reactor가 누락 된 기능 외에도 Reactor와 Akka 사이에 개념적 차이가 있는지 이해해야합니다 (물론 초기 단계에 있음). 요약하면 Akka의 Actor와 Reactor의 Consumer의 개념적 차이점은 무엇입니까? 또한 Reactor GitHub 페이지의 이벤트 구독 / 파견과 유사한 Akka의 샘플 이벤트로 질문을 업데이트했습니다. 감사.
David Riccitelli

Jon, 여기에서 귀하의 답변을 읽었습니다 : blog.springsource.org/2013/05/13/…- 따라서 장기적으로 Akka와 Reactor가 Reactor 패턴과 Actor 모델을 모두 지원하는 유사한 프레임 워크가 될 것이라고 가정 할 수 있습니다.
David Riccitelli

위의 설명은 다음으로 인해 더 이상 정확하지 않습니다. stackoverflow.com/questions/16595393/akka-or-reactor/…stackoverflow.com/a/16674388/565110
David Riccitelli

이 댓글이 이제 어떻게 잘못되었는지 이해가 안 되나요? 여기서 원자로의 전략적 방향에 대한 설명과 모순되는 것은 없습니다.
Jon Brisbin 2013 년

1
잡았다. 예, 올바르게 이해합니다. 질문 해 주셔서 감사합니다! :)
Jon Brisbin 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.