Akka를위한 좋은 사용 사례


605

Akka 프레임 워크 (Java / Scala 서비스 플랫폼) 에 대해 많은 열망을 들었지만 지금까지 유용한 사용 사례의 많은 예를 보지 못했습니다. 따라서 개발자가 성공적으로 사용한 것에 대해 듣고 싶습니다.

한 가지 제한 사항 : 채팅 서버 작성 사례는 포함하지 마십시오. (왜? 이것은 많은 유사한 것들에 대한 예제로 남용되었으므로)


10
솔루션을 가지고 문제를 적용하는 것보다 문제를 시작하고 해결 방법을 찾는 것이 쉽지 않습니까? RMI를 사용하는 대신 Akka와 그 액터는 코드를 작성하는 것이 훨씬 쉽고 간단합니다.
Kennet

67
예, 해결해야 할 특정 문제가 있다면. 나는 "Akka를 사용하는 변명"을 찾고 있지 않지만 조금 더 배우고 싶습니다. 이것은 미래의 문제를 해결하는 데 도움이 될 수 있지만 대부분 지속적인 학습 과정을위한 것입니다.
StaxMan

관련 응용 프로그램이 있지만 기존 응용 프로그램 및 일부 사용 사례에 AKKA를 적용하는 방법에 대해서는 stackoverflow.com/questions/16595685/…
ses

2
Akka는 JMS 또는 MQ 스타일 분산 메시지 대기열 시스템보다 나은 솔루션입니다. 이것이 바로 똑같은 질문을하고있는 나 자신을 위해 그것을 이해하는 가장 좋은 방법입니다. Akka의 핵심 설계 가정은 특히 프로세스 격리, 잠금없는 설계 및 재시도 / 실패 처리와 관련하여 JMS / MQ의 가정보다 훨씬 낫습니다. 둘째, API는 JMS / MQ 도구보다 훨씬 우아합니다.
user2684301

2
@ user2684301 흠. 나는 사과에 오렌지 방식으로 대답이 불공평하다는 것을 알았습니다. MQ는 (논리적으로) Akka보다 훨씬 적은 간단한 빌딩 블록이며, 나란히 비교하지는 않을 것입니다. 그러나 필자가 "JMS를 사용하여 구축 한 분산 시스템과 비교하여 선언적으로 작성"과 같은 내용을 읽는다면 더 의미가있을 것입니다.
StaxMan

답변:


321

지금까지 두 개의 실제 프로젝트에서 매우 성공적으로 사용했습니다. 둘 다 거의 실시간 교통 정보 필드 (고속도로 차량과 같은 교통 정보)에 있으며 여러 노드에 분산되어 여러 당사자간에 메시지를 통합하며 안정적인 백엔드 시스템입니다. 나는 고객에 대해 구체적으로 말할 자유가 없다. OK를 얻을 때 아마도 참조로 추가 될 수있다.

Akka는 0.7 버전에서 시작했지만 실제로 프로젝트를 진행했습니다. (우리는 스칼라를 사용하고 있습니다)

가장 큰 장점 중 하나는 보일러 도금이 거의없는 액터 및 메시지로 시스템을 쉽게 구성 할 수 있다는 점입니다. 수동 롤링 스레딩의 모든 복잡성 없이도 매우 잘 확장되며 거의 무료로 객체간에 비동기식 메시지가 전달됩니다.

모든 유형의 비동기 메시지 처리를 모델링하는 데 매우 유용합니다. 다른 스타일보다이 스타일로 모든 유형의 (웹) 서비스 시스템을 작성하는 것을 선호합니다. (JAX-WS를 사용하여 비동기 웹 서비스 (서버 측)를 작성하려고 했습니까? 따라서 모든 것이 암시 적 동기 메소드를 사용하여 호출되고 하나의 구성 요소가 무언가에 잠겨 있기 때문에 구성 요소 중 하나에 매달리고 싶지 않은 시스템을 말합니다. 매우 안정적이며 고장에 대한 let-it-crash + supervisor 솔루션이 실제로 효과적입니다. 프로그래밍 방식으로 설정하기가 쉽고 단위 테스트가 어렵지 않습니다.

그런 다음 우수한 애드온 모듈이 있습니다. Camel 모듈은 실제로 Akka에 잘 연결되며 구성 가능한 엔드 포인트로 비동기 서비스를 쉽게 개발할 수 있습니다.

나는 프레임 워크에 매우 만족하며 우리가 구축 한 커넥 티드 시스템을위한 사실상의 표준이되고있다.


14
의견을 전달하는 메시지에 메시징 백엔드 (예 : ActiveMQ)를 사용하는 것과 비교하여이 방법의 이점은 무엇입니까?
magiconair

27
MQ 제품은 실제로 다른 사용 사례를위한 것입니다. 다른 보증과 매우 다른 성능. MQ 제품에는 많은 설정이 필요하므로 오브젝트를 사용하는 것과 같은 방식으로 해당 제품에서 큐를 사용하지 않습니다. 액터는 akka에서 일류 시민이며, 객체를 사용하는 방법과 유사하게 원하는대로 사용하므로 설정과 같이 프로그래밍 모델에서 오버 헤드가 훨씬 적습니다. MQ 제품은 액터를 사용할 시스템의 '내부'를 빌드하지 않고 다른 외부 시스템과 통합하기 위해 더 많이 사용합니다.
Raymond Roestenburg

26
DBP 사례 연구의 새로운 URL은 downloads.typesafe.com/website/casestudies/…입니다.
Bas

2
@RaymondRoestenburg re : MQ 시스템 및 대안 구축. RabbitMQ는, 예를 들어, 구축 배우 기반 프로그래밍 언어, 얼랑. 액터와 MQ의 관계 (및 구별)를 생각하는 한 가지 방법입니다. 한편 Apache Spark 는 작업자 및 큐 기반이 아니며 액터 기반이 아니며 BUT은 Akka와 함께 사용할 수 있습니다. Typesafe는 Akka와 함께 Spark Streaming을 사용하는 방법을 보여줍니다 .
driftcatcher

6
@RaymondRoestenburg 액터 모델은 그대로 스파게티와 같은 구조를 촉진한다고 언급하지 않았습니다. 귀하가 작성한 "Akka in Action"책은이 "기능"에 대한 최고의 데모입니다. 코드 예제는 상당히 기본적인 이야기를 다룹니다. 그러나 워크 플로는 코드를 이해하고 따르는 것이 매우 어렵습니다. 관련된 문제는 Akka 코드가 상상할 수있는 가장 방해가되지 않는 방식으로 비즈니스 로직 전반에 걸쳐 엄청나게 많아 질 것입니다. 다른 비-액터 프레임 워크보다 훨씬 더. 기본 워크 플로를 별도의 섹션으로 나누지 않고 작성하는 것은 불가능합니다.
황홀한

222

면책 조항 : 나는 Akka의 PO입니다

동시성 smorgasbord를 제공하는 것 외에도 STM 형식의 동시성 제어를 통해 추론 및 수정하기가 훨씬 간단합니다 (액터, 에이전트, 데이터 흐름 동시성).

다음은 고려할 수있는 사용 사례입니다.

  1. 거래 처리 (온라인 게임, 금융, 통계, 베팅, 소셜 미디어, 통신 등)
    • 스케일 업, 스케일 아웃, 내결함성 / HA
  2. 서비스 백엔드 (모든 산업, 모든 앱)
    • 서비스 REST, SOAP, 혜성 등
    • 메시지 허브 / 통합 레이어 역할
    • 스케일 업, 스케일 아웃, 내결함성 / HA
  3. 스냅인 동시성 / 병렬 (모든 앱)
    • 옳은
    • 작업하기 쉽고 이해하기 쉽다
    • 기존 JVM 프로젝트에 항아리를 추가하기 만하면됩니다 (Scala, Java, Groovy 또는 JRuby 사용)
  4. 일괄 처리 (모든 산업)
    • 배치 데이터 소스와 연결하기위한 낙타 통합
    • 액터는 배치 워크로드를 분할하고 정복합니다.
  5. 통신 허브 (통신, 웹 미디어, 모바일 미디어)
    • 스케일 업, 스케일 아웃, 내결함성 / HA
  6. 게임 서버 (온라인 게임, 베팅)
    • 스케일 업, 스케일 아웃, 내결함성 / HA
  7. BI / 데이터 마이닝 / 범용 크 런칭
    • 스케일 업, 스케일 아웃, 내결함성 / HA
  8. 다른 유용한 사용 사례를 여기에 삽입

10
나는 Futures와 STM의 이점을 이해하지만 배우들에게 좋은 사용 사례를 찾지 못했습니다. 게임 또는 베팅 서버의 경우로드 밸런서 뒤에있는 여러 앱 서버와 액터를 사용하면 어떤 이점이 있습니까?
Martin Konicek

8
@ViktorKlang POs! = 기술 책임자. 그들은 함께 일하지만 다른 역할입니다.
taylorcressy

79

우리가 그것을 사용하는 방법의 예는 직불 / 신용 카드 거래의 우선 순위 대기열에 있습니다. 우리는 수백만 가지를 가지고 있으며 작업의 노력은 입력 문자열 유형에 달려 있습니다. 거래 유형이 CHECK 인 경우 처리가 거의 없지만 판매 시점 인 경우 메타 데이터 (카테고리, 레이블, 태그 등)와 병합하고 서비스 (이메일 / SMS 경보, 사기 탐지, 낮은 자금 잔액 등). 입력 유형을 기반으로 작업을 처리하고 작업을 수행하는 데 필요한 다양한 특성 (mixin이라고 함) 클래스를 구성합니다. 이러한 모든 작업은 다른 금융 기관의 실시간 모드에서 동일한 대기열에 들어갑니다. 데이터가 정리되면 지속성, 분석 또는 소켓 연결 또는 푸시 혜성 행위자로 푸시하기 위해 다른 데이터 저장소로 전송됩니다. 작업 행위자는 데이터를 가능한 빨리 처리 할 수 ​​있도록 지속적으로 자체로드 밸런싱 작업을 수행합니다. 추가 서비스, 지속성 모델 및 중요한 결정 사항.

JVM에 전달되는 Erlang OTP 스타일 메시지는 기존 라이브러리 및 애플리케이션 서버의 숄더에서 실시간 시스템을 개발하기위한 훌륭한 시스템을 만듭니다.

Akka를 사용하면 전통적인 방식으로 메시지를 전달할 수 있습니다 그러나 속도로! 또한 솔루션에 필요한 방대한 양의 액터 풀, 원격 노드 및 내결함성을 관리 할 수있는 도구를 프레임 워크에 제공합니다.


1
따라서 요청 당 단일 스레드가 제대로 확장되지 않는 (일부) 긴 대기 시간 요청이라고 말하는 것이 공정합니까?
StaxMan

7
액터 프로그래밍의 중요한 부분은 일반적으로 메시지 흐름이라고 생각합니다. 부작용이없는 데이터 플로우에서 개념화를 시작하면 노드 당 가능한 많은 플로우가 발생하기를 원합니다. 이것은 메시지를 보내지 않고 처리하는 데 오랜 시간이 걸리는 반 균일 작업이 있었기 때문에 고성능 컴퓨팅과는 매우 다릅니다. 액터 기반 피보나치 구현은 액터를 사용해야하는 이유를 보여주지 않고 액터가 탁을 마비시키기 때문에 매우 제한적인 예라고 생각합니다. 사용 사례를위한 이벤트 중심 아키텍처를 생각해보십시오.
웨이드 아놀드

4
이벤트 중심 아키텍처는 문제에 대한 다른 사고 방식입니다. Akka의 코딩에 대해 생각하고 있다면 Erlang OTP in Action을 매닝에서 읽을 가치가 있습니다. akka의 많은 구성은 Erlang OTP의 영향을받으며이 책은 Jonas Boner가 왜 akka api를 그랬는지에 대한 원리를 알려줍니다. Akka는 당신이 서있는 큰 산입니다! 액터가 상태 변경을 통해 지속되는 경우 실제로 10k 쓰기가 필요합니다.
Wade Arnold

8
웨이드, 어떻게 메시지 보증을 처리합니까? 당신은 언급 : (이메일 / SMS 경보, 사기 탐지, 낮은 자금 잔액 등), 나는 잠재적으로 원격 행위자에게 전송된다고 가정합니까? 이러한 작업이 실제로 이루어 지도록하려면 어떻게해야합니까? 사기 경보를 처리하는 동안 노드가 실패하면 어떻게됩니까? 영원히 사라 졌습니까? 시스템을 정리하는 일관된 시스템이 있습니까? 감사!
James

2
좋은 질문 제임스. 응답이 긴급하게 필요하지 않은 시스템에 적합하다는 것은 분명합니다. 예를 들어 신용 카드 청구서를 처리 할 수 ​​있습니다. 계산하다; 이메일 등을 보내십시오. 답장이 필요할 때 이러한 것들 (거래)이 어떻게 처리되는지 궁금합니다. 결국; 외부에서 요청한 경우 (인터넷 사용자, 콜센터 담당자 등) 응답을 기다립니다. 하위 작업 (비동기 적으로 실행 됨)이 실행되는지 어떻게 확인할 수 있습니까? xa 거래에서 회신을 반환 할 수 있습니까?
Kaan Yy

44

Akka를 사용하여 REST 호출을 비동기식으로 처리합니다. 비동기 웹 서버 (Netty 기반)와 함께 사용자 요청 모델 당 기존 스레드와 비교하여 노드 / 서버 당 서비스되는 사용자 수를 10 배 향상시킬 수 있습니다.

상사에게 AWS 호스팅 청구서가 10 배 줄어든다는 사실을 알려주십시오. ... ...하지만 아마존에 말하지 마라 ... :)


3
그리고 훨씬 깔끔한 병렬 코드로 이어지는 수천 개의 코드 유지 관리에 도움이되는 Akka 선물의 전형적인 성격을 언급하는 것을 잊었습니다.
piotrga

8
대기 시간이 길고 처리량이 적은 것으로 가정합니다. 다른 서버로 전화를 걸거나 응답을 기다리는 것처럼 (프록시)?
StaxMan

38

우리는 대규모 Telco 프로젝트에서 Akka를 사용하고 있습니다 (불행히도 자세한 내용은 공개 할 수 없습니다). Akka 액터는 웹 애플리케이션에 의해 원격으로 배치 및 액세스됩니다. 이러한 방식으로 Google 프로토 버퍼를 기반으로 단순화 된 RPC 모델을 보유하고 있으며 Akka Futures를 사용하여 병렬 처리를 수행합니다. 지금까지이 모델은 훌륭하게 작동했습니다. 한 가지 참고 사항 : 우리는 Java API를 사용하고 있습니다.


좀 더 말씀해 주시겠습니까? Afaik 선물은 전신을 통해 전송할 수 없습니다 (직렬화). 당신은 많은 선물과 소수의 배우를 사용합니까 아니면 둘 사이의 혼합을 사용합니까? 모든 직렬화에 protobuf를 사용하고 액터에게 메시지로 보냅니 까?
Aktau

이것은 Akka없이 쉽게 처리 할 수 ​​있었던 것 같습니다.
Erik Kaplun

1
TDC는 Fiaddesio의 경우 Telco 회사입니다.
로마 카간

37

채팅 서버를 한 단계 높이면 답을 얻을 수 있습니다.

Akka는 Erlang의 "충돌"사고와 유사한 메시징 시스템을 제공합니다.

따라서 예는 메시징의 다양한 수준의 내구성과 신뢰성이 필요한 것들입니다.

  • 채팅 서버
  • MMO를위한 네트워크 계층
  • 재무 데이터 펌프
  • iPhone / mobile / 무엇이든 앱 알림 시스템
  • REST 서버
  • 아마도 WebMachine과 비슷한 것 (추측)

Akka의 좋은 점은 지속성, STM 구현, REST 서버 및 내결함성을 제공하는 선택입니다.

채팅 서버의 예에 짜증을 내지 말고 특정 종류의 솔루션의 예라고 생각하십시오.

모든 훌륭한 문서와 함께, 나는이 정확한 질문, 유스 케이스 및 예제라는 격차가 있다고 생각합니다. 예제는 사소한 것이 아니라는 것을 명심하십시오.

(비디오를보고 소스를 가지고 노는 경험만으로 작성된 akka를 사용하여 아무것도 구현하지 않았습니다.)


2
고맙습니다-채팅 서버가 반드시 나쁘다는 것을 의미하지는 않았습니다. 단지 보완적인 예를 원할 것입니다. 잠재력에 대한 더 나은 아이디어를 얻는 것이 더 쉽습니다.
StaxMan

REST 서버가 여기에 어떻게 적합한 지 궁금하십니까? Node.js 스타일 비동기 서버와 관련하여 언급하고 있습니까? 예제 사용 사례를 공유해 주셔서 감사합니다. 나는 그것들이 유용하다는 것을 알았다.
software.wikipedia

24

우리는 직장에서 여러 프로젝트에 Akka를 사용하는데, 그 중 가장 흥미로운 것은 차량 충돌 수리와 관련이 있습니다. 영국에서는 주로 미국, 아시아, 오스트 랄라 시아 및 유럽으로 확장되고 있습니다. 우리는 차량을 안전하고 비용 효율적으로 수리 할 수 ​​있도록 충돌 수리 정보를 실시간으로 제공하기 위해 행위자를 사용합니다.

Akka의 질문은 실제로 'Akka로 할 수없는 것'입니다. 강력한 프레임 워크, 강력한 추상화 및 모든 내결함성 측면과 통합 할 수있는 기능은 매우 포괄적 인 툴킷입니다.


당신이 선택해야한다면 가장 좋아하는 부분은 무엇입니까? 다른 프레임 워크, 자동 내결함성 또는 다른 것에 대한 기존 통합?
StaxMan

6
개인적 관점에서 볼 때 그것은 Akka가 내가 가장 좋아하는 테이블로 가져 오는 추상화 수준입니다. 엔터프라이즈 관점에서는 통합 기능입니다. 생계를 유지하고 Akka는 비즈니스와 즐거움을 매우 훌륭하게 다루고 있습니다 :-)
rossputin

메시지 흐름이 어떤지 자세히 설명해 주시겠습니까? 사용자가 수리점에있는 사람이며 충돌에 대한 세부 사항을 http 양식에 입력 한 다음 서버로 데이터를 보냅니다. 이것은 akka가 처리하는 메시지를 작성합니까? 이 메시지로 무엇을 하시겠습니까? 입력 한 정보를 추출하여 데이터베이스를 쿼리 한 다음 웹 프론트 엔드로 다시 보내도록 응답을 큐에 넣습니까?
surfmuggle

24

여러 종류의 것들에 Akka를 사용할 수 있습니다.

기술 스택을 Scala와 Akka로 마이그레이션 한 웹 사이트에서 작업하고있었습니다. 우리는 웹 사이트에서 일어난 거의 모든 것에 그것을 사용했습니다. Chat 예제가 잘못되었다고 생각하더라도 기본적으로 모두 동일합니다.

  • 웹 사이트의 실시간 업데이트 (예 :보기, 좋아요 등)
  • 실시간 사용자 의견 표시
  • 알림 서비스
  • 검색 및 기타 모든 종류의 서비스

특히 실시간 업데이트는 Chat 예제의 내용으로 요약되기 때문에 쉽습니다. 원격 액터를 사용하도록 간단히 선택할 수 있고 앱이 클러스터되지 않은 경우에도 쉽게 다른 머신에 배포 할 수 있기 때문에 서비스 부분은 또 다른 흥미로운 주제입니다.

또한 랩톱에서 데이터 센터로 확장 할 수 있다는 개념으로 PCB 자동 라우터 응용 프로그램에 Akka를 사용하고 있습니다. 힘을 많이 줄수록 더 좋은 결과를 얻을 수 있습니다. Akka는 위치 투명성을 제공하기 때문에 일반적인 동시성을 사용하려고하면 구현하기가 매우 어렵습니다.

현재는 자유 시간 프로젝트로서 배우 만 사용하여 웹 프레임 워크를 구축하고 있습니다. 다시 한 번 이점은 단일 시스템에서 전체 시스템 클러스터로의 확장 성입니다. 또한 메시지 중심 접근 방식을 사용하면 소프트웨어 서비스가 처음부터 지향적입니다. 서로에게 말을 걸지만 서로를 알 필요는 없으며 동일한 데이터 센터가 아닌 동일한 컴퓨터에 살고있는 멋진 구성 요소가 있습니다.

Google 리더가 종료 된 후 Akka를 사용하여 RSS 리더로 시작했습니다. 그것은 나를 위해 캡슐화 된 서비스에 관한 것입니다. 결론적으로 액터 모델 자체는 가장 먼저 채택해야하는 것이며 Akka는 매우 신뢰할 수있는 프레임 워크로,이를 통해 많은 이점을 얻을 수 있습니다.


안녕하세요, 사이트 업데이트에 메시지가 어떻게 사용되는지 설명해 주시겠습니까? 컨텐츠 작성자를위한 하나의 시스템이 있습니까? 그는 새 기사를 작성하고 저장합니다. 들어오는 트래픽을 처리하는 여러 서버로 보내는 메시지를 만듭니다. 각 서버는 가능한 빨리 업데이트 메시지를 처리합니다. 브라우저를 새로 요청하면 업데이트 된 버전의 페이지가 표시됩니까? 감사합니다
surfmuggle

18

낙타 플러그인과 함께 akka를 사용하여 twimpact.com에 대한 분석 및 추세 처리를 배포 합니다. 초당 50에서 1000 개의 메시지를 처리해야합니다. 낙타를 사용한 다중 노드 처리 외에도 성능을 극대화하기 위해 단일 프로세서의 작업을 여러 작업자에게 배포하는 데 사용됩니다. 잘 작동하지만 혼잡을 처리하는 방법에 대한 이해가 필요합니다.


Akka의 내결함성도 사용하고 있습니까?
Erik Kaplun

Spark 클러스터에 액세스 할 수 있으면 Spark Streaming은 어떻습니까?
skjagini

18

나는 Akka (Java api)에 손을 대고 있었다. 내가 시도한 것은 Akka의 액터 기반 동시성 모델을 일반 Java 동시성 모델 (java.util.concurrent 클래스)의 모델과 비교하는 것이 었습니다.

유스 케이스는 단순한 표준 맵으로 문자 수의 구현을 줄였습니다. 데이터 세트는 임의로 생성 된 문자열 (길이 400 자)의 모음이며 모음의 수를 계산합니다.

Akka의 경우 BalancedDispatcher (스레드 간로드 밸런싱)와 RoundRobinRouter (함수 액터 제한을 유지하기 위해)를 사용했습니다. Java의 경우 맵을 줄이고 실행을 줄이고 결과를 결합하는 간단한 포크 결합 기술 (작업 도용 알고리즘없이 구현)을 사용했습니다. 중간 결과는 블로킹 큐에 유지되어 결합을 가능한 한 병렬로 만들었습니다. 아마도 내가 틀리지 않으면 아마 Akka 행위자들의 "사서함"개념을 모방하여 메시지를받을 것이다.

관찰 : 중간로드 (~ 50000 개의 문자열 입력)까지 결과는 서로 다른 반복에서 약간 씩 차이가났습니다. 그러나 부하를 ~ 100000으로 늘리면 Java 솔루션이 중단됩니다. 이 조건에서 20-30 스레드로 Java 솔루션을 구성했으며 모든 반복에서 실패했습니다.

부하를 1000000으로 늘리면 Akka도 치명적이었습니다. 교차 확인을 원하는 사람과 코드를 공유 할 수 있습니다.

따라서 Akka는 전통적인 Java 멀티 스레드 솔루션보다 확장 성이 뛰어납니다. 그리고 아마도 그 이유는 스칼라의 핵심 마법입니다.

문제 도메인을 이벤트 기반 메시지로 전달할 수 있다면 Akka가 JVM에 적합한 선택이라고 생각합니다.

Java 버전 : 1.6 IDE : Eclipse 3.7 Windows Vista 32 비트에서 테스트를 수행했습니다. 3GB 램. Intel Core i5 프로세서, 2.5GHz 클럭 속도

테스트에 사용되는 문제 영역에 대해 토론 할 수 있으며 Java 지식이 허용하는 한 공정하게 노력했습니다.


3
"크로스 체크를 원하는 사람과 코드를 공유 할 수 있습니다." 상관 없으면하고 싶습니다.
n1r3

3
나는 또한 코드를 원한다 .github 링크를 게시 할 수 있습니까?
Gautam

관심을 가져 주셔서 감사합니다. 불행히도 github 저장소를 설정하는 데 문제가 있습니다. 이메일을 보내 주시면 소스 코드를 통해 우편으로 보내 주시기 바랍니다. 답장이 늦어서 후회합니다!
sutanu dalui

@sutanudalui 이메일을 공유 할 수 있다면 여전히 코드가 있습니까?
Jay

16

우리는 음성 대화 시스템 ( primtalk ) 에서 Akka를 사용 합니다. 내부와 외부 모두. 단일 클러스터 노드에서 많은 전화 채널을 동시에 실행하려면 멀티 스레딩 프레임 워크가 필요합니다. Akka는 완벽하게 작동합니다. 우리는 자바 동시성에 대한 이전의 악몽을 가지고 있습니다. 그리고 Akka는 마치 스윙과 같습니다. 간단하게 작동합니다. 견고하고 신뢰할 수 있습니다. 24 * 7, 논스톱.

채널 내부에는 병렬로 처리되는 실시간 이벤트 스트림이 있습니다. 특히 :-긴 자동 음성 인식 – 배우와 함께 수행됩니다. -몇 가지 오디오 소스 (합성 된 음성 포함)를 믹스하는 오디오 출력 프로듀서; -텍스트 음성 변환은 채널간에 공유되는 별도의 액터 세트입니다. -시맨틱 및 지식 처리.

복잡한 신호 처리를 상호 연결하기 위해 SynapseGrid 를 사용 합니다 . 복잡한 액터 시스템에서 DataFlow의 컴파일 타임 검사 이점이 있습니다.


14

최근 에 Akka : Word count에서 정식 맵 축소 예제를 구현 했습니다. Akka의 사용 사례 중 하나입니다. 더 나은 성능. JRuby와 Akka의 배우 에 대한 실험보다 더 많았지 만 Akka는 스칼라 또는 Java가 아니라는 것을 보여줍니다 .JVM의 모든 언어에서 작동합니다.


더 나은 성능의 책임이 무엇인지 (그리고 어떤 대안과 비교) 알고 있습니까? JVM에서 JRuby를 사용하기 때문에 (기본 루비), 비 블로킹 I / O 또는 기타로 인해 확장 성이 있습니까?
StaxMan

2
내가 쓴 비교는 다음과 같습니다 .Jruby sequence vs Jruby with actors. 따라서 더 빠른 실행을 담당 할 수있는 유일한 것은 배우의 참여입니다. 실험에 I / O가 참여하지 않았습니다 (파일은 디스크에서로드되지만 벤치 마크 타이머가 설정되기 전에 수행됩니다).
Daniel Ribeiro

최근에 맵 축소 예제도 구현했지만 일반 바닐라 java github.com/chaostheory/jibenakka
chaostheory
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.