[SCALA] Akka위한 좋은 유스 케이스 [폐쇄]
SCALAAkka위한 좋은 유스 케이스 [폐쇄]
나는 Akka 프레임 워크 (자바 / 스칼라 서비스 플랫폼)에 대한 헛소리를 많이 들었지만, 지금까지이 좋은 것 사용 사례의 많은 실제 사례를 보지 못했다. 그래서 개발자가 성공적으로 그것을 사용한 것들에 대해 청문회에 관심이있을 것입니다.
하나 개의 제한 : 채팅 서버를 작성하는 경우를 포함하지 마십시오. (그 이유는 무엇입니까?이 비슷한 일을 많이하는 예로서 남용 되었기 때문에)
해결법
-
==============================
1.나는 매우 성공적이 개 실제 프로젝트에 지금까지 사용했다. 둘은 거의 실시간 교통 정보 분야에서 여러 파티, 신뢰할 수있는 백엔드 시스템간에 메시지를 통합하는 여러 노드에 분산 (고속도로에서 자동차와 같은 교통)이다. 나는 어쩌면이 참조로 추가 할 수있는 확인을받을 수 있나요 때, 아직 클라이언트에 대한 세부 사항을 제공하는 자유에 아니에요.
나는 매우 성공적이 개 실제 프로젝트에 지금까지 사용했다. 둘은 거의 실시간 교통 정보 분야에서 여러 파티, 신뢰할 수있는 백엔드 시스템간에 메시지를 통합하는 여러 노드에 분산 (고속도로에서 자동차와 같은 교통)이다. 나는 어쩌면이 참조로 추가 할 수있는 확인을받을 수 있나요 때, 아직 클라이언트에 대한 세부 사항을 제공하는 자유에 아니에요.
Akka는 정말 버전 0.7에 때 우리가 시작에도 불구하고, 그 프로젝트를 통해 뽑아했다. (우리는 방법으로 스칼라를 사용하는)
가장 큰 장점 중 하나는 당신이 거의 boilerplating 배우 및 메시지에서 시스템을 구성 할 수있는 용이성, 그것은 손으로 압연 스레딩의 모든 복잡성없이 매우 잘 확장하고 거의 무료로 객체 사이를 통과하는 비동기 메시지가 표시됩니다.
그것은 비동기 메시지 처리의 모든 유형을 모델링에 매우 좋다. 나는 다른 스타일에 비해이 스타일 (웹) 서비스 시스템의 모든 유형을 작성하는 것을 선호합니다. (혹시 JAX-WS와 비동기 웹 서비스 (서버 측)을 작성하는 시도? 그 배관의 많은입니다). 그래서 나는 모든 것을 암시 동기 방법을 사용하여 호출되기 때문에 구성 요소 중 하나에 걸어 싶어하지 않는 시스템을 말하는 것이고, 하나 개의 구성 요소는 무엇인가에 고정된다. 그것은 매우 안정적이고 실패로 할 - 그것 - 충돌 + 슈퍼 바이저 솔루션은 정말 잘 작동합니다. 모든 설정을 프로그래밍 방식이 아닌 하드 단위 테스트에 용이하다.
그리고 우수한 애드온 모듈이있다. 낙타 모듈은 정말 Akka에 잘 플러그 및 구성 엔드 포인트와 비동기 서비스 등 쉽게 개발할 수 있습니다.
나는 프레임 워크에 매우 행복 해요 그리고 우리가 구축 연결된 시스템을위한 사실상의 표준이되고있다.
-
==============================
2.면책 조항 : 나는 Akka의 PO입니다
면책 조항 : 나는 Akka의 PO입니다
추론하기와 올바른 (배우, 에이전트, 흐름 동시성) 및 STM의 형태로 동시성 제어를 얻기 위해 훨씬 간단 동시성 바이킹을 제공 게다가.
여기 당신이 고려해야 수있는 몇 가지 사용 사례는 다음과 같습니다
-
==============================
3.우리가 그것을 사용하는 방법의 예는 직불 / 신용 카드 거래의 우선 순위 큐에있을 것입니다. 우리는이 수백만을 가지고 작품의 노력은 입력 문자열의 유형에 따라 달라집니다. 거래 유형의 CHECK의 경우 우리는 거의 처리가 있지만 판매 시점 인 경우, 많은 등의 메타 데이터 (카테고리, 라벨, 태그 등)와 병합으로 수행 및 서비스 (이메일 / SMS 알림을 제공 할 수있다, 사기 탐지, 낮은 자금의 균형, 등). 입력 유형에 따라 우리는 작업을 처리하는 데 필요한 다양한 특성 (라고 유지 mixin)의 클래스를 작성하고 다음 작업을 수행합니다. 이러한 작업은 모두 다른 금융 기관에서 실시간 모드에서 동일한 큐에 온다. 데이터가 정화되면 그 지속성 분석하는 다른 데이터 저장소로 보내거나 소켓 연결 푸시 또는 혜성 배우 리프트한다. 근무 행위자는 지속적으로 우리가 가능한 한 빨리 데이터를 처리 할 수 있도록 작업을 균형 자기 부하입니다. 우리는 또한 중요한 결정 포인트 추가 서비스, 지속성 모델, STM에 스냅 할 수 있습니다.
우리가 그것을 사용하는 방법의 예는 직불 / 신용 카드 거래의 우선 순위 큐에있을 것입니다. 우리는이 수백만을 가지고 작품의 노력은 입력 문자열의 유형에 따라 달라집니다. 거래 유형의 CHECK의 경우 우리는 거의 처리가 있지만 판매 시점 인 경우, 많은 등의 메타 데이터 (카테고리, 라벨, 태그 등)와 병합으로 수행 및 서비스 (이메일 / SMS 알림을 제공 할 수있다, 사기 탐지, 낮은 자금의 균형, 등). 입력 유형에 따라 우리는 작업을 처리하는 데 필요한 다양한 특성 (라고 유지 mixin)의 클래스를 작성하고 다음 작업을 수행합니다. 이러한 작업은 모두 다른 금융 기관에서 실시간 모드에서 동일한 큐에 온다. 데이터가 정화되면 그 지속성 분석하는 다른 데이터 저장소로 보내거나 소켓 연결 푸시 또는 혜성 배우 리프트한다. 근무 행위자는 지속적으로 우리가 가능한 한 빨리 데이터를 처리 할 수 있도록 작업을 균형 자기 부하입니다. 우리는 또한 중요한 결정 포인트 추가 서비스, 지속성 모델, STM에 스냅 할 수 있습니다.
JVM상에서 통과 한 얼랑 OTP 스타일의 메시지가 기존 라이브러리와 애플리케이션 서버의 어깨에 실시간 시스템 개발에 적합한 최고의 시스템이됩니다.
Akka는 메시지가 전통적인 ESB뿐만 속도에서와 같이 통과 할 수 있습니다! 그것은 또한 당신이 당신의 솔루션을 필요로하는 광대 한 배우 풀, 원격 노드의 양 및 내결함성을 관리하는 프레임 워크에 당신에게 도구를 제공합니다.
-
==============================
4.우리는 REST는 비동기 적으로 호출 Akka를 처리하는 데 사용할 - 함께 비동기 웹 서버 (의 Netty 기반) 우리는 사용자 요청 모델에 따라 기존의 스레드에 비해, 노드 / 서버 당 봉사 사용자의 수를 10 배 향상을 달성 할 수있다.
우리는 REST는 비동기 적으로 호출 Akka를 처리하는 데 사용할 - 함께 비동기 웹 서버 (의 Netty 기반) 우리는 사용자 요청 모델에 따라 기존의 스레드에 비해, 노드 / 서버 당 봉사 사용자의 수를 10 배 향상을 달성 할 수있다.
당신의 AWS이 법안을 호스팅 당신의 상사에게 말해 10의 비율로 감소 할 것입니다 그리고 그것은 생각할 필요 없다! 쉿 ...하지만 아마존에 얘기 해달라고 ... :)
-
==============================
5.우리는 대규모 통신 회사 프로젝트에 Akka를 사용하고 (불행하게도 나는 많은 세부 사항을 공개 할 수 없습니다). Akka의 배우 배포하고 웹 응용 프로그램에서 원격으로 액세스 할 수 있습니다. 이러한 방법으로, 우리는 구글의 프로토 버퍼를 기반으로 단순화 된 RPC 모델을 가지고 우리는 Akka 선물을 사용하여 병렬 처리를 얻을 수 있습니다. 지금까지,이 모델은 훌륭하게 일했다. 하나의 참고 사항 : 우리는 자바 API를 사용하고 있습니다.
우리는 대규모 통신 회사 프로젝트에 Akka를 사용하고 (불행하게도 나는 많은 세부 사항을 공개 할 수 없습니다). Akka의 배우 배포하고 웹 응용 프로그램에서 원격으로 액세스 할 수 있습니다. 이러한 방법으로, 우리는 구글의 프로토 버퍼를 기반으로 단순화 된 RPC 모델을 가지고 우리는 Akka 선물을 사용하여 병렬 처리를 얻을 수 있습니다. 지금까지,이 모델은 훌륭하게 일했다. 하나의 참고 사항 : 우리는 자바 API를 사용하고 있습니다.
-
==============================
6.당신이 추상적 채팅 서버 최대 수준을 경우에, 당신은 답을 얻을.
당신이 추상적 채팅 서버 최대 수준을 경우에, 당신은 답을 얻을.
Akka는 정신을 "이 충돌하자"얼랑의에 가깝다 메시징 시스템을 제공합니다.
그래서 예는 내구성과 메시지의 신뢰성을 다양한 수준의 필요 사항은 다음과 같습니다
Akka의 좋은 일이이 지속성 준다 선택이다, 그것은 STM 구현, REST 서버 및 결함 허용합니다.
채팅 서버의 예에 의해 화가하지 마세요, 솔루션의 특정 클래스의 예로서 생각합니다.
간격이 정확한 질문, 사용 사례 및 예처럼 모든 훌륭한 문서로, 나는 생각합니다. 명심 예는 사소하다.
(나는 akka를 사용하여 아무것도 구현되지 않은 비디오를보고하고 소스와 함께 연주의 경험 글.)
-
==============================
7.우리는 차량 사고 수리 관련이 가장 흥미있는 직장에서 여러 프로젝트에 Akka를 사용합니다. 주로 영국에서하지만 지금은 미국, 아시아, 호주 및 유럽으로 확대. 우리는 충돌 수리 정보는 차량의 안전하고 비용 효율적인 복구를 가능하게하는 실시간을 제공하기 위해 배우를 사용합니다.
우리는 차량 사고 수리 관련이 가장 흥미있는 직장에서 여러 프로젝트에 Akka를 사용합니다. 주로 영국에서하지만 지금은 미국, 아시아, 호주 및 유럽으로 확대. 우리는 충돌 수리 정보는 차량의 안전하고 비용 효율적인 복구를 가능하게하는 실시간을 제공하기 위해 배우를 사용합니다.
Akka와 문제는 정말 더 '당신이 Akka 무엇을 할 수 없다'입니다. 강력한 프레임 워크, 강력한 추상화 및 결함 허용 모든 측면을 통합 할 수있는 능력은 매우 포괄적 인 툴킷합니다.
-
==============================
8.당신은 사물의 여러 가지 다른 종류의 Akka를 사용할 수 있습니다.
당신은 사물의 여러 가지 다른 종류의 Akka를 사용할 수 있습니다.
나는 스칼라와 Akka에 기술 스택을 마이그레이션 웹 사이트에 일하고 있었다. 우리는 웹 사이트에 일어난 거의 모든 위해 그것을 사용했다. 당신이 채팅 예 나쁜 생각하더라도, 모두가 기본적으로 동일 :
특히 라이브 업데이트는 아래 무엇 채팅 예를 경악에 끓인 쉽다. 당신은 단순히 원격 배우를 사용하도록 선택할 수 있으며, 앱이 클러스터되지 않은 경우에도, 당신은 쉽게 다른 컴퓨터에 배포 할 수 있기 때문에 서비스 부분은 또 다른 흥미로운 주제입니다.
또한 데이터 센터에 노트북에서 확장 할 수있는 아이디어와 PCB의 autorouter 응용 프로그램 Akka를 사용하고 있습니다. 당신이 그것을주고 더 많은 전력, 더 나은 결과가 될 것입니다. 이것은 당신이 Akka는 위치 투명성을 제공하기 때문에 일반적인 동시성을 사용하려고하면 구현하기가 매우 어렵습니다.
현재 자유 시간 프로젝트로, 난 단지 배우를 사용하여 웹 프레임 워크를 구축하고있다. 다시 이점은 기계의 전체 클러스터에 하나의 시스템에서 확장 성입니다. 게다가, 메시지 중심의 접근 방식을 사용하여 처음부터 지향 소프트웨어 서비스를합니다. 당신은 심지어 같은 데이터 센터에, 동일한 시스템에 살고, 서로 이야기하지만, 반드시 서로를 모르고, 모든 좋은 구성 요소를 가지고있다.
구글 리더가 종료 이후 그리고 물론 Akka를 사용하여 RSS 리더와 함께 시작했다. 그것은 모든 약 나를 위해 서비스를 캡슐화된다. 결론적으로 : 액터 모델 자체 먼저 채택해야 무엇이며 Akka 당신이 길을 따라 받게됩니다 혜택을 많이 그것을 구현하는 데 도움이 매우 신뢰할 수있는 프레임 워크입니다.
-
==============================
9.우리는 우리의 분석을 배포하기 위해 낙타 플러그인 akka를 사용하고 twimpact.com 처리를 추세된다. 우리는 초당 50 1000 메시지 사이에 처리해야합니다. 낙 멀티 노드 프로세싱 외에 또한 최대 성능에 대한 다수의 근로자 단일 프로세서에 작업을 분배하기 위해 사용된다. 아주 잘 작동하지만, 혼잡을 처리하는 방법에 대한 몇 가지 이해가 필요합니다.
우리는 우리의 분석을 배포하기 위해 낙타 플러그인 akka를 사용하고 twimpact.com 처리를 추세된다. 우리는 초당 50 1000 메시지 사이에 처리해야합니다. 낙 멀티 노드 프로세싱 외에 또한 최대 성능에 대한 다수의 근로자 단일 프로세서에 작업을 분배하기 위해 사용된다. 아주 잘 작동하지만, 혼잡을 처리하는 방법에 대한 몇 가지 이해가 필요합니다.
-
==============================
10.나는 Akka (자바 API)에 내 손을 시도하고 있었다. 내가 노력하는 것은 일반 자바 동시성 모델 (java.util.concurrent의 클래스)의 그것과 Akka의 배우 기반 동시성 모델을 비교하는 것이다.
나는 Akka (자바 API)에 내 손을 시도하고 있었다. 내가 노력하는 것은 일반 자바 동시성 모델 (java.util.concurrent의 클래스)의 그것과 Akka의 배우 기반 동시성 모델을 비교하는 것이다.
유스 케이스는 간단한 정규 맵 글자 수의 구현을 줄일 수 있었다. 데이터 세트는 임의로 생성 된 문자열 (길이 400 개 문자)의 집합이고, 이들의 모음의 수를 계산한다.
Akka를 들어 나는 BalancedDispatcher 및 RoundRobinRouter (부하 스레드 사이에 균형을위한) (내 함수 배우에 제한을 유지하기 위해) 사용. 자바, 나는 간단한 포크 /지도 포크 실행을 줄이고 결과를 결합 할 것입니다 (모든 작업 훔치는 알고리즘없이 구현) 기술을 결합 사용했다. 중간 결과는 가능한 한 병렬로 결합도 할 큐를 차단에서 개최되었다. 내가 잘못 아니에요 경우 아마, 그것은 어떻게 든 그들이 메시지를받을 Akka 배우의 "사서함"개념을 모방한다.
관찰, 관측: 중간 부하 (~ 50000 문자열 입력)까지 결과는 다른 반복에 약간 변화, 비교했다. 나는 ~ 100000 내 부하를 증가하지만, 그것은 자바 솔루션을 놀았어요. 나는이 상태에서 20 ~ 30 개 스레드 자바 솔루션을 구성하며 모든 반복에 실패했습니다.
1000000에 부하를 증가뿐만 아니라, Akka 치명적이었다. 나는 크로스 체크를 가지고 관심있는 사람들과 코드를 공유 할 수 있습니다.
나를 위해 그래서, Akka는 기존의 자바 멀티 스레드 솔루션보다 더 나은 확장됩니다 보인다. 그리고 아마도 그 이유는 스칼라의 후드 마법 아래입니다.
내가 하나를 통과하는 이벤트 기반의 메시지로 문제 도메인을 모델링 할 수 있다면, 나는 Akka는 JVM을위한 좋은 선택이라고 생각합니다.
테스트에 수행 : Java 버전 : 1.6 IDE : 3.7 이클립스 윈도우 비스타 32 비트. 3기가바이트 램. 인텔 코어 i5 프로세서, 2.5GHz의 클록 속도
주의 시험에 사용 문제 도메인은 논의 할 수 있으며, 내 자바 지식 :-) 허용만큼 공정하게하려고 노력하십시오
-
==============================
11.우리는 음성 대화 시스템 (primetalk)에 Akka를 사용합니다. 둘 다 내부와 외부. 동시에 하나의 클러스터 노드에서 전화 채널을 많이 실행하려면이 일부 멀티 스레딩 프레임 워크를 가지고 분명히 필요하다. Akka는 완벽하게 작동합니다. 우리는 자바 동시성과 이전의 악몽이있다. 그리고 Akka으로 그냥 스윙처럼 - 그것은 간단하게 작동합니다. 견고하고 신뢰할 수있는. 24 * 7 직행.
우리는 음성 대화 시스템 (primetalk)에 Akka를 사용합니다. 둘 다 내부와 외부. 동시에 하나의 클러스터 노드에서 전화 채널을 많이 실행하려면이 일부 멀티 스레딩 프레임 워크를 가지고 분명히 필요하다. Akka는 완벽하게 작동합니다. 우리는 자바 동시성과 이전의 악몽이있다. 그리고 Akka으로 그냥 스윙처럼 - 그것은 간단하게 작동합니다. 견고하고 신뢰할 수있는. 24 * 7 직행.
채널의 내부에서 우리는 병렬로 처리되는 이벤트의 실시간 스트림이있다. 특히: - 긴 자동 음성 인식은 - 배우로 이루어집니다; - (합성 음성 포함) 몇 가지 오디오 소스를 믹스 오디오 출력 생산; 텍스트 - 음성 변환 채널 공유 액터 별도 세트이고; - 의미와 지식 처리.
복잡한 신호 처리의 상호 우리가 SynapseGrid를 사용을합니다. 그것은 복잡한 배우 시스템에서 데이터 흐름의 컴파일 시간 확인의 이익이있다.
-
==============================
12.내가 최근 Akka의 정식지도-감소 예를 구현했습니다 : 단어 개수. 더 나은 성능 : 그래서 Akka의 한 유스 케이스입니다. 그것은 JRuby를하고 무엇보다도 Akka의 배우의 실험을 더했지만, 그것은 또한 Akka 스칼라 또는 Java는 아니라고 보여줍니다은 JVM의 상단에 모든 언어에서 작동합니다.
내가 최근 Akka의 정식지도-감소 예를 구현했습니다 : 단어 개수. 더 나은 성능 : 그래서 Akka의 한 유스 케이스입니다. 그것은 JRuby를하고 무엇보다도 Akka의 배우의 실험을 더했지만, 그것은 또한 Akka 스칼라 또는 Java는 아니라고 보여줍니다은 JVM의 상단에 모든 언어에서 작동합니다.
from https://stackoverflow.com/questions/4493001/good-use-case-for-akka by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라의 타입 클래스는 유용 무엇입니까? (0) | 2019.11.01 |
---|---|
[SCALA] 스칼라의 경로에 의존하는 유형은 무엇을 의미합니까? (0) | 2019.11.01 |
[SCALA] 스칼라 스파크, listbuffer가 비어 있습니다 (0) | 2019.11.01 |
[SCALA] 왜 스파크 코드는 NullPointerException이 만드는가? (0) | 2019.10.31 |
[SCALA] org.apache.spark.sql.Dataset에서 java.lang.NullPointerException이 :에 의해 발생 (0) | 2019.10.31 |