[java] Akka에 대한 유용한 사용 사례


5 Answers

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

추론하고 STM의 형태로 동시성 제어를 통해 올바른 (액터, 에이전트, 데이터 흐름 동시성) 정보를 얻을 수있는 동시성 smorgasbord를 제공하는 것 외에도.

다음은 고려할만한 유스 케이스입니다.

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

Akka 프레임 워크 (Java / Scala 서비스 플랫폼)에 대해 많은 것을 들었다. 그러나 지금까지 사용 사례에 대한 많은 예제를 보지 못했습니다. 그래서 개발자들이 성공적으로 사용해온 것에 대해 듣고 싶습니다.

한 가지 제한 사항 : 채팅 서버 작성의 경우를 포함하지 마십시오. (왜? 비슷한 것들이 많은 예제로 남용 되었기 때문에)




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

저는 웹 사이트에서 기술 스택을 Scala와 Akka로 마이그레이션했습니다. 우리는 웹 사이트에서 일어난 모든 일들을 위해이 도구를 사용했습니다. 채팅 예제가 좋지 않다고 생각할 수도 있지만 기본적으로 모두 같습니다.

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

특히 실시간 업데이트는 채팅 예제가 무엇인지 알 수 없기 때문에 쉽습니다. 단순히 원격 액터를 사용하도록 선택할 수 있기 때문에 서비스 부분은 또 다른 흥미로운 주제입니다. 앱이 클러스터되지 않아도 쉽게 다른 시스템에 배치 할 수 있습니다.

또한 랩톱에서 데이터 센터까지 확장 할 수있는 아이디어로 PCB 자동 라우터 응용 프로그램에 Akka를 사용하고 있습니다. 더 많은 힘을 주면 더 나은 결과를 얻을 수 있습니다. Akka가 위치 투명성을 제공하기 때문에 평범한 동시성을 사용하려고하면 구현하기가 매우 어렵습니다.

현재 자유 시간 프로젝트로서 배우 만 사용하여 웹 프레임 워크를 구축하고 있습니다. 다시 장점은 단일 시스템에서 전체 시스템 클러스터로의 확장 성입니다. 게다가 메시지 중심 접근 방식을 사용하면 처음부터 소프트웨어 서비스를 지향 할 수 있습니다. 모든 구성 요소가 멋지지만, 서로 이야기하면서도 서로를 아는 것은 아니며, 동일한 데이터 센터 에서조차도 같은 머신에서 생활합니다.

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




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

귀하의 상사에게 귀하의 AWS 호스팅 청구액이 10 배만큼 떨어질 것임을 알려주는 것은 간단합니다! 쉿 ... 아마존 말하지 말아라 ... :)




나는 Akka (자바 API)에서 내 손을 시험해보고 있었다. 내가 시도한 것은 Akka의 액터 기반 동시성 모델을 평범한 Java 동시성 모델 (java.util.concurrent 클래스)과 비교하는 것이 었습니다.

유스 케이스는 문자 수의 구현을 줄이는 간단한 표준 맵이었다. 데이터 세트는 무작위로 생성 된 문자열 (400 자의 길이)의 모음이었고, 그 안에있는 모음의 수를 계산합니다.

Akka의 경우 BalancedDispatcher (스레드 간로드 밸런싱)와 RoundRobinRouter (함수 액터에 대한 제한을 유지하기 위해)를 사용했습니다. Java의 경우, map / reduce 실행을 포크하고 결과에 참여하는 간단한 포크 조인 기술 (작업 도난 알고리즘없이 구현 됨)을 사용했습니다. 블로킹 큐에서 중간 결과가 유지되어 가능한 한 병렬로 조인을 만들었습니다. 아마도, 내가 잘못하지 않았다면, Akka 배우들의 "사서함"개념을 어떻게 든 모방하여 메시지를받는 곳일 것입니다.

관찰 : 중간 정도의 하중 (~ 50000 문자열 입력)까지는 결과가 비슷했고, 반복마다 약간 씩 차이가있었습니다. 그러나 부하를 100,000 개로 늘리면 Java 솔루션이 중단됩니다. 이 조건에서 Java 솔루션을 20-30 스레드로 구성했는데 모든 반복에서 실패했습니다.

하중을 1000000으로 높이는 것은 아카에게도 치명적이었습니다. 나는 십자가 수표에 관심이있는 사람과이 코드를 공유 할 수 있습니다.

따라서 나에게는 Akka가 기존의 Java 다중 스레드 솔루션보다 확장 성이 좋습니다. 그리고 아마도 스칼라의 두포 마술이 그 이유 일 것입니다.

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

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

테스트에 사용 된 문제 도메인은 논쟁의 여지가 있으며 Java 지식이 허용되는 한 많은 노력을 기울였습니다 :-)




채팅 서버를 한 레벨 위로 추상화하면 대답을 얻을 수 있습니다.

Akka는 얼랑 (Erlang)의 "추락 시키자"정신과 비슷한 메시징 시스템을 제공합니다.

따라서 사례는 다양한 수준의 내구성과 신뢰성을 필요로하는 것입니다.

  • 채팅 서버
  • MMO를위한 네트워크 계층
  • 금융 데이터 펌프
  • iPhone / 모바일 / 어떤 앱을위한 알림 시스템
  • REST 서버
  • 어쩌면 WebMachine (추측)과 비슷한 것일 수 있습니다.

Akka에 대한 좋은 점은 지속성, STM 구현, REST 서버 및 내결함성을위한 선택입니다.

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

훌륭한 문서를 모두 사용하여이 정확한 질문, 유스 케이스 및 예제가 부족한 것처럼 느껴집니다. 예제는 아주 드문 사항입니다.

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




저는 Akka의 표준 map-reduce 예제를 최근에 implemented 했습니다 : 단어 수. Akka의 사용 사례 중 하나입니다. 성능이 좋습니다. 그것은 JRuby와 Akka의 액터 에 대한 실험 이었지만 Akka는 Scala 나 Java 만이 아니라 JVM 위에있는 모든 언어에서 작동합니다.




Related