Akka 프레임 워크 (Java / Scala 서비스 플랫폼) 에 대해 많은 열망을 들었지만 지금까지 유용한 사용 사례의 많은 예를 보지 못했습니다. 따라서 개발자가 성공적으로 사용한 것에 대해 듣고 싶습니다.
한 가지 제한 사항 : 채팅 서버 작성 사례는 포함하지 마십시오. (왜? 이것은 많은 유사한 것들에 대한 예제로 남용되었으므로)
Akka 프레임 워크 (Java / Scala 서비스 플랫폼) 에 대해 많은 열망을 들었지만 지금까지 유용한 사용 사례의 많은 예를 보지 못했습니다. 따라서 개발자가 성공적으로 사용한 것에 대해 듣고 싶습니다.
한 가지 제한 사항 : 채팅 서버 작성 사례는 포함하지 마십시오. (왜? 이것은 많은 유사한 것들에 대한 예제로 남용되었으므로)
답변:
지금까지 두 개의 실제 프로젝트에서 매우 성공적으로 사용했습니다. 둘 다 거의 실시간 교통 정보 필드 (고속도로 차량과 같은 교통 정보)에 있으며 여러 노드에 분산되어 여러 당사자간에 메시지를 통합하며 안정적인 백엔드 시스템입니다. 나는 고객에 대해 구체적으로 말할 자유가 없다. OK를 얻을 때 아마도 참조로 추가 될 수있다.
Akka는 0.7 버전에서 시작했지만 실제로 프로젝트를 진행했습니다. (우리는 스칼라를 사용하고 있습니다)
가장 큰 장점 중 하나는 보일러 도금이 거의없는 액터 및 메시지로 시스템을 쉽게 구성 할 수 있다는 점입니다. 수동 롤링 스레딩의 모든 복잡성 없이도 매우 잘 확장되며 거의 무료로 객체간에 비동기식 메시지가 전달됩니다.
모든 유형의 비동기 메시지 처리를 모델링하는 데 매우 유용합니다. 다른 스타일보다이 스타일로 모든 유형의 (웹) 서비스 시스템을 작성하는 것을 선호합니다. (JAX-WS를 사용하여 비동기 웹 서비스 (서버 측)를 작성하려고 했습니까? 따라서 모든 것이 암시 적 동기 메소드를 사용하여 호출되고 하나의 구성 요소가 무언가에 잠겨 있기 때문에 구성 요소 중 하나에 매달리고 싶지 않은 시스템을 말합니다. 매우 안정적이며 고장에 대한 let-it-crash + supervisor 솔루션이 실제로 효과적입니다. 프로그래밍 방식으로 설정하기가 쉽고 단위 테스트가 어렵지 않습니다.
그런 다음 우수한 애드온 모듈이 있습니다. Camel 모듈은 실제로 Akka에 잘 연결되며 구성 가능한 엔드 포인트로 비동기 서비스를 쉽게 개발할 수 있습니다.
나는 프레임 워크에 매우 만족하며 우리가 구축 한 커넥 티드 시스템을위한 사실상의 표준이되고있다.
면책 조항 : 나는 Akka의 PO입니다
동시성 smorgasbord를 제공하는 것 외에도 STM 형식의 동시성 제어를 통해 추론 및 수정하기가 훨씬 간단합니다 (액터, 에이전트, 데이터 흐름 동시성).
다음은 고려할 수있는 사용 사례입니다.
우리가 그것을 사용하는 방법의 예는 직불 / 신용 카드 거래의 우선 순위 대기열에 있습니다. 우리는 수백만 가지를 가지고 있으며 작업의 노력은 입력 문자열 유형에 달려 있습니다. 거래 유형이 CHECK 인 경우 처리가 거의 없지만 판매 시점 인 경우 메타 데이터 (카테고리, 레이블, 태그 등)와 병합하고 서비스 (이메일 / SMS 경보, 사기 탐지, 낮은 자금 잔액 등). 입력 유형을 기반으로 작업을 처리하고 작업을 수행하는 데 필요한 다양한 특성 (mixin이라고 함) 클래스를 구성합니다. 이러한 모든 작업은 다른 금융 기관의 실시간 모드에서 동일한 대기열에 들어갑니다. 데이터가 정리되면 지속성, 분석 또는 소켓 연결 또는 푸시 혜성 행위자로 푸시하기 위해 다른 데이터 저장소로 전송됩니다. 작업 행위자는 데이터를 가능한 빨리 처리 할 수 있도록 지속적으로 자체로드 밸런싱 작업을 수행합니다. 추가 서비스, 지속성 모델 및STM 중요한 결정 사항.
JVM에 전달되는 Erlang OTP 스타일 메시지는 기존 라이브러리 및 애플리케이션 서버의 숄더에서 실시간 시스템을 개발하기위한 훌륭한 시스템을 만듭니다.
Akka를 사용하면 전통적인 방식으로 메시지를 전달할 수 있습니다 esb그러나 속도로! 또한 솔루션에 필요한 방대한 양의 액터 풀, 원격 노드 및 내결함성을 관리 할 수있는 도구를 프레임 워크에 제공합니다.
Akka를 사용하여 REST 호출을 비동기식으로 처리합니다. 비동기 웹 서버 (Netty 기반)와 함께 사용자 요청 모델 당 기존 스레드와 비교하여 노드 / 서버 당 서비스되는 사용자 수를 10 배 향상시킬 수 있습니다.
상사에게 AWS 호스팅 청구서가 10 배 줄어든다는 사실을 알려주십시오. ... ...하지만 아마존에 말하지 마라 ... :)
우리는 대규모 Telco 프로젝트에서 Akka를 사용하고 있습니다 (불행히도 자세한 내용은 공개 할 수 없습니다). Akka 액터는 웹 애플리케이션에 의해 원격으로 배치 및 액세스됩니다. 이러한 방식으로 Google 프로토 버퍼를 기반으로 단순화 된 RPC 모델을 보유하고 있으며 Akka Futures를 사용하여 병렬 처리를 수행합니다. 지금까지이 모델은 훌륭하게 작동했습니다. 한 가지 참고 사항 : 우리는 Java API를 사용하고 있습니다.
채팅 서버를 한 단계 높이면 답을 얻을 수 있습니다.
Akka는 Erlang의 "충돌"사고와 유사한 메시징 시스템을 제공합니다.
따라서 예는 메시징의 다양한 수준의 내구성과 신뢰성이 필요한 것들입니다.
Akka의 좋은 점은 지속성, STM 구현, REST 서버 및 내결함성을 제공하는 선택입니다.
채팅 서버의 예에 짜증을 내지 말고 특정 종류의 솔루션의 예라고 생각하십시오.
모든 훌륭한 문서와 함께, 나는이 정확한 질문, 유스 케이스 및 예제라는 격차가 있다고 생각합니다. 예제는 사소한 것이 아니라는 것을 명심하십시오.
(비디오를보고 소스를 가지고 노는 경험만으로 작성된 akka를 사용하여 아무것도 구현하지 않았습니다.)
우리는 직장에서 여러 프로젝트에 Akka를 사용하는데, 그 중 가장 흥미로운 것은 차량 충돌 수리와 관련이 있습니다. 영국에서는 주로 미국, 아시아, 오스트 랄라 시아 및 유럽으로 확장되고 있습니다. 우리는 차량을 안전하고 비용 효율적으로 수리 할 수 있도록 충돌 수리 정보를 실시간으로 제공하기 위해 행위자를 사용합니다.
Akka의 질문은 실제로 'Akka로 할 수없는 것'입니다. 강력한 프레임 워크, 강력한 추상화 및 모든 내결함성 측면과 통합 할 수있는 기능은 매우 포괄적 인 툴킷입니다.
여러 종류의 것들에 Akka를 사용할 수 있습니다.
기술 스택을 Scala와 Akka로 마이그레이션 한 웹 사이트에서 작업하고있었습니다. 우리는 웹 사이트에서 일어난 거의 모든 것에 그것을 사용했습니다. Chat 예제가 잘못되었다고 생각하더라도 기본적으로 모두 동일합니다.
특히 실시간 업데이트는 Chat 예제의 내용으로 요약되기 때문에 쉽습니다. 원격 액터를 사용하도록 간단히 선택할 수 있고 앱이 클러스터되지 않은 경우에도 쉽게 다른 머신에 배포 할 수 있기 때문에 서비스 부분은 또 다른 흥미로운 주제입니다.
또한 랩톱에서 데이터 센터로 확장 할 수 있다는 개념으로 PCB 자동 라우터 응용 프로그램에 Akka를 사용하고 있습니다. 힘을 많이 줄수록 더 좋은 결과를 얻을 수 있습니다. Akka는 위치 투명성을 제공하기 때문에 일반적인 동시성을 사용하려고하면 구현하기가 매우 어렵습니다.
현재는 자유 시간 프로젝트로서 배우 만 사용하여 웹 프레임 워크를 구축하고 있습니다. 다시 한 번 이점은 단일 시스템에서 전체 시스템 클러스터로의 확장 성입니다. 또한 메시지 중심 접근 방식을 사용하면 소프트웨어 서비스가 처음부터 지향적입니다. 서로에게 말을 걸지만 서로를 알 필요는 없으며 동일한 데이터 센터가 아닌 동일한 컴퓨터에 살고있는 멋진 구성 요소가 있습니다.
Google 리더가 종료 된 후 Akka를 사용하여 RSS 리더로 시작했습니다. 그것은 나를 위해 캡슐화 된 서비스에 관한 것입니다. 결론적으로 액터 모델 자체는 가장 먼저 채택해야하는 것이며 Akka는 매우 신뢰할 수있는 프레임 워크로,이를 통해 많은 이점을 얻을 수 있습니다.
낙타 플러그인과 함께 akka를 사용하여 twimpact.com에 대한 분석 및 추세 처리를 배포 합니다. 초당 50에서 1000 개의 메시지를 처리해야합니다. 낙타를 사용한 다중 노드 처리 외에도 성능을 극대화하기 위해 단일 프로세서의 작업을 여러 작업자에게 배포하는 데 사용됩니다. 잘 작동하지만 혼잡을 처리하는 방법에 대한 이해가 필요합니다.
나는 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 지식이 허용하는 한 공정하게 노력했습니다.
우리는 음성 대화 시스템 ( primtalk ) 에서 Akka를 사용 합니다. 내부와 외부 모두. 단일 클러스터 노드에서 많은 전화 채널을 동시에 실행하려면 멀티 스레딩 프레임 워크가 필요합니다. Akka는 완벽하게 작동합니다. 우리는 자바 동시성에 대한 이전의 악몽을 가지고 있습니다. 그리고 Akka는 마치 스윙과 같습니다. 간단하게 작동합니다. 견고하고 신뢰할 수 있습니다. 24 * 7, 논스톱.
채널 내부에는 병렬로 처리되는 실시간 이벤트 스트림이 있습니다. 특히 :-긴 자동 음성 인식 – 배우와 함께 수행됩니다. -몇 가지 오디오 소스 (합성 된 음성 포함)를 믹스하는 오디오 출력 프로듀서; -텍스트 음성 변환은 채널간에 공유되는 별도의 액터 세트입니다. -시맨틱 및 지식 처리.
복잡한 신호 처리를 상호 연결하기 위해 SynapseGrid 를 사용 합니다 . 복잡한 액터 시스템에서 DataFlow의 컴파일 타임 검사 이점이 있습니다.
최근 에 Akka : Word count에서 정식 맵 축소 예제를 구현 했습니다. Akka의 사용 사례 중 하나입니다. 더 나은 성능. JRuby와 Akka의 배우 에 대한 실험보다 더 많았지 만 Akka는 스칼라 또는 Java가 아니라는 것을 보여줍니다 .JVM의 모든 언어에서 작동합니다.