Akka 프레임워크의 가장 좋은 사용 사례는 무엇입니까?
Akka 프레임워크(Java/Scala 서비스 플랫폼)에 대해 많은 찬사를 들었지만, 지금까지 Aka 프레임워크가 유용한 실제 사용 사례는 많지 않았습니다.그래서 개발자들이 그것을 성공적으로 사용했다는 것에 대해 듣고 싶습니다.
단, 채팅서버를 쓰는 경우는 포함하지 말아 주세요.(왜요? 많은 유사한 것들에 대한 예시로 너무 많이 사용되었기 때문에)
지금까지 2개의 실제 프로젝트에서 매우 성공적으로 사용해 왔습니다.둘 다 실시간에 가까운 트래픽 정보 필드(고속도로의 자동차와 같은 트래픽)에서 여러 노드에 분산되어 여러 당사자 간의 메시지를 통합하고 신뢰할 수 있는 백엔드 시스템입니다.아직 고객에 대한 자세한 내용은 말씀드릴 수 없습니다.확인되면 참고용으로 추가해도 될 것 같습니다.
Akka는 버전 0.7에서 시작했는데도 이러한 프로젝트를 성공적으로 완수했습니다.(그런데 우리는 스칼라를 사용하고 있습니다)
가장 큰 장점 중 하나는 보일러 플레이팅 없이 액터나 메시지로 시스템을 구성할 수 있다는 것입니다.또한 수동 스레드의 복잡함 없이 확장성이 뛰어나고 오브젝트 간에 거의 무료로 비동기 메시지를 주고받을 수 있습니다.
모든 유형의 비동기 메시지 처리 모델링에 매우 적합합니다.어떤 (Web) 서비스 시스템도 다른 어떤 스타일보다 이 스타일로 쓰고 싶습니다.(JAX-WS를 사용하여 비동기 웹 서비스(서버 측)를 작성하려고 한 적이 있습니까?그것은 많은 배관 작업입니다.)즉, 모든 것이 동기 방식을 사용하여 암묵적으로 호출되고 하나의 컴포넌트가 무언가에 잠겨 있기 때문에 컴포넌트 중 하나에 걸리고 싶지 않은 시스템은 어떤 컴포넌트에도 걸리고 싶지 않습니다.매우 안정적이고 장애에 대한 let-it-crash + 슈퍼바이저 솔루션이 제대로 작동합니다.모든 것을 프로그래밍 방식으로 쉽게 셋업할 수 있으며 유닛 테스트도 어렵지 않습니다.
그리고 뛰어난 애드온 모듈도 있습니다.Camel 모듈은 실제로 Akka에 잘 연결되며 구성 가능한 엔드포인트를 가진 비동기 서비스를 쉽게 개발할 수 있습니다.
프레임워크에 매우 만족하고 있으며, 델이 구축한 접속 시스템의 표준이 되고 있습니다.
면책사항:저는 Akka의 PO입니다.
또한 STM 형식의 동시성 제어와 함께 추론 및 수정(액터, 에이전트, 데이터 흐름 동시성)이 훨씬 간편하고 동시성 제어가 가능한 동시성 Smorgasbord를 제공합니다.
다음은 고려할 수 있는 몇 가지 사용 사례입니다.
- 트랜잭션 처리(온라인 게임, 금융, 통계, 베팅, 소셜 미디어, 통신 등)
- 스케일업, 스케일아웃, 폴트 톨러런스/HA
- 서비스 백엔드(업계, 애플리케이션)
- 서비스 REST, SOAP, cometd 등
- 메시지 허브/통합 레이어로서 기능하다
- 스케일업, 스케일아웃, 폴트 톨러런스/HA
- 스냅인 동시성/병렬성(모든 앱)
- 맞아요.
- 사용하기 쉽고 이해하기 쉽다
- 기존 JVM 프로젝트에 jar만 추가하면 됩니다(Scala, Java, Groovy 또는 JRuby 사용).
- 배치 처리(모든 산업)
- 배치 데이터 소스와 연계하기 위한 통합이 용이함
- 작업자는 배치 워크로드를 분할하고 정복합니다.
- 통신 허브(통신, 웹 미디어, 모바일 미디어)
- 스케일업, 스케일아웃, 폴트 톨러런스/HA
- 게임 서버(온라인 게임, 베팅)
- 스케일업, 스케일아웃, 폴트 톨러런스/HA
- BI/데이터 생성/범용 크런치
- 스케일업, 스케일아웃, 폴트 톨러런스/HA
- 여기에 다른 유용한 사용 사례를 삽입하십시오.
예를 들어 직불/신용 카드 거래의 우선 순위 큐에 있습니다.수백만 개가 있으며 입력 문자열 유형에 따라 작업량이 달라집니다.CHECK 타입의 거래라면 처리가 거의 없지만, 판매점의 경우 메타데이터(카테고리, 라벨, 태그 등)와의 통합이나 서비스 제공(이메일/sms 경보, 사기 탐지, 저자금 잔액 등) 등 할 일이 많습니다.입력 타입에 근거해, 작업 처리에 필요한 다양한 특성(믹스인이라고 불린다)의 클래스를 구성하고 있습니다.이러한 모든 작업은 다른 금융 기관에서 실시간 모드로 동일한 대기열에 들어갑니다.데이터가 정리되면 지속성, 분석 또는 소켓 연결 또는 Lift comet actor에 푸시하기 위해 다른 데이터스토어로 전송됩니다.작업 담당자는 데이터를 최대한 빨리 처리할 수 있도록 항상 작업 부하를 스스로 분산합니다.또한 중요한 의사 결정 지점을 위해 추가 서비스, 지속성 모델 및 stm을 스냅할 수 있습니다.
JVM에 전달되는 Erlang OTP 스타일 메시지는 기존 라이브러리와 애플리케이션 서버의 어깨 위에서 실시간 시스템을 개발하기 위한 훌륭한 시스템입니다.
Akka는 기존 esb처럼 빠르게 메시지 전달을 할 수 있습니다!또한 솔루션에 필요한 방대한 액터 풀, 원격 노드 및 폴트 톨러런스를 관리할 수 있는 툴도 프레임워크에 포함되어 있습니다.
Akka를 사용하여 REST 콜을 비동기식으로 처리합니다.또, 비동기 Web 서버(Netty 베이스)를 조합하면, 유저 요구 모델 마다의 종래의 스레드보다 노드/서버 마다의 서비스 유저수를 10배 향상할 수 있습니다.
당신의 상사에게 당신의 AWS 호스팅 요금이 10배 떨어질 것이며, 그것은 쉬운 일이라고 말하세요!쉿... 아마존에 말하지 마...:)
Akka를 대규모 Telco 프로젝트에 사용하고 있습니다(자세한 내용은 공개할 수 없습니다).Akka 액터는 웹 애플리케이션을 통해 원격으로 배포 및 액세스됩니다.이와 같이 구글 프로토버퍼를 기반으로 한 단순화된 RPC 모델이 있으며, Akka Futures를 사용하여 병렬화를 실현합니다.지금까지 이 모델은 훌륭하게 동작하고 있습니다.주의: Java API를 사용하고 있습니다.
채팅 서버를 한 단계 끌어올리면 답이 나옵니다.
Akka는 Erlang의 "충돌하게 놔둬" 사고방식과 유사한 메시징 시스템을 제공합니다.
예를 들어 다양한 수준의 내구성 및 신뢰성을 필요로 하는 메시징을 들 수 있습니다.
- 채팅 서버
- MMO의 네트워크층
- 금융 데이터 펌프
- 한iPhone/mobile/whatever 앱을 알림 시스템이다.
- REST 서버
- 뭔가 WebMachine(추측하)과 유사하다.
그것은 지속성을 위해 제공한다 Akka의 멋진 것들 선택을, STM구현, REST 서버왐에 따라 무결함.
채팅 서버의 예로, 해결의 특정 클래스의 예로 생각한다 화가 나지 마세요.
그들의 모든 훌륭한 설명서와 함께, 난 격차 같은 것은 정확한 이 질문, 유스 케이스와 예를 들어.마음 속에 명심하는 것은 예들은 있다.
(원본을 가지고 노는 비디오를 본 유일한 경험과, 나는 아무것도 akka을 사용 시행하고 있다.).
우리는 직장에서 Akka를 여러 프로젝트에 사용하고 있는데, 그 중 가장 흥미로운 것은 차량 충돌 수리입니다.주로 영국에서 제공되지만 현재는 미국, 아시아, 오스트랄라시아 및 유럽으로 확대되고 있습니다.당사에서는 관계자를 활용하여 충돌 복구 정보를 실시간으로 제공하여 안전하고 비용 효율적인 차량 수리를 가능하게 합니다.
Akka의 질문은 'Akka로 무엇을 할 수 없는가'에 더 가깝다.강력한 프레임워크와 통합할 수 있는 기능, 강력한 추상화 및 모든 폴트 톨러런스 측면에서 매우 포괄적인 툴킷입니다.
악카는 여러 가지 용도로 사용할 수 있습니다.
저는 웹 사이트에서 기술 스택을 Scala와 Akka로 마이그레이션했습니다.우리는 웹사이트에서 일어나는 거의 모든 일에 그것을 사용했다.채팅의 예가 나쁘다고 생각되는 경우도 있습니다만, 기본적으로는 모두 같습니다.
- 웹 사이트의 라이브 업데이트(예: 보기, 좋아요 등)
- 라이브 사용자 코멘트 표시
- 알림 서비스
- 검색 및 기타 모든 종류의 서비스
특히 라이브 업데이트는 채팅의 예시로 요약되기 때문에 간단합니다.서비스 부분도 흥미로운 토픽입니다.리모트 액터를 사용하는 것만으로, 애플리케이션이 클러스터 되어 있지 않아도, 다른 머신에 간단하게 도입할 수 있기 때문입니다.
PCB 오토라우터 애플리케이션에도 Akka를 사용하고 있습니다.노트북에서 데이터센터로 확장할 수 있다는 아이디어입니다.힘을 더 주면 줄수록 더 좋은 결과를 얻을 수 있습니다.Akka는 위치 투명성도 제공하기 때문에 일반적인 동시성을 사용하려고 하면 구현이 매우 어렵습니다.
현재 자유시간 프로젝트로 배우만을 사용하여 웹 프레임워크를 구축하고 있습니다.여기서도 단일 머신에서 전체 머신 클러스터로 확장성이라는 이점이 있습니다.또한 메시지 기반 접근 방식을 사용하면 소프트웨어 서비스가 처음부터 지향적이 됩니다.서로 대화하지만 서로에 대해 알 필요는 없으며, 같은 데이터 센터에서도 같은 머신에 살고 있는 우수한 컴포넌트가 있습니다.
Google Reader가 종료된 후 RSS 리더로 시작했습니다. 물론 Akka를 사용했죠.이것은 모두 캡슐화된 서비스에 관한 것입니다.결론:배우 모델 자체는 당신이 가장 먼저 채택해야 하는 것이고, 아크카는 당신이 그것을 실행하는데 도움을 주는 매우 신뢰할 수 있는 프레임워크이며, 당신이 그 과정에서 얻을 수 있는 많은 이점을 가지고 있다.
I was trying out my hands on Akka (Java api). What I tried was to compare Akka's actor based concurrency model with that of plain Java concurrency model (java.util.concurrent classes).
The use case was a simple canonical map reduce implementation of character count. The dataset was a collection of randomly generated strings (400 chars in length), and calculate the number of vowels in them.
For Akka I used a BalancedDispatcher(for load balancing amongst threads) and RoundRobinRouter (to keep a limit on my function actors). For Java, I used simple fork join technique (implemented without any work stealing algorithm) that would fork map/reduce executions and join the results. Intermediate results were held in blocking queues to make even the joining as parallel as possible. Probably, if I am not wrong, that would mimic somehow the "mailbox" concept of Akka actors, where they receive messages.
Observation: Till medium loads (~50000 string input) the results were comparable, varying slightly in different iterations. However, as I increased my load to ~100000 it would hang the Java solution. I configured the Java solution with 20-30 threads under this condition and it failed in all iterations.
Increasing the load to 1000000, was fatal for Akka as well. I can share the code with anyone interested to have a cross check.
So for me, it seems Akka scales out better than traditional Java multithreaded solution. And probably the reason is the under the hood magic of Scala.
If I can model a problem domain as an event driven message passing one, I think Akka is a good choice for the JVM.
Test performed on: Java version:1.6 IDE: Eclipse 3.7 Windows Vista 32 bit. 3GB ram. Intel Core i5 processor, 2.5 GHz clock speed
Please note, the problem domain used for the test can be debated and I tried to be as much fair as my Java knowledge allowed :-)
We are using akka with its camel plugin to distribute our analysis and trending processing for twimpact.com. We have to process between 50 and 1000 messages per second. In addition to multi-node processing with camel it is also used to distribute work on a single processor to multiple workers for maximum performance. Works quite well, but requires some understanding of how to handle congestions.
We use Akka in spoken dialog systems (primetalk). Both internally and externally. In order to simultaneously run a lot of telephony channels on a single cluster node it is obviously necessary to have some multithreading framework. Akka works just perfect. We have previous nightmare with the java-concurrency. And with Akka it is just like a swing — it simply works. Robust and reliable. 24*7, non-stop.
Inside a channel we have real-time stream of events that are processed in parallel. In particular: - lengthy automatic speech recognition — is done with an actor; - audio output producer that mixes a few audio sources (including synthesized speech); - text-to-speech conversion is a separate set of actors shared between channels; - semantic and knowledge processing.
To make interconnections of complex signal processing we use SynapseGrid. It has the benefit of compile-time checking of the DataFlow in the complex actor systems.
I've recently implemented the canonical map-reduce example in Akka: Word count. So it's one use case of Akka: better performance. It was more of a experiment of JRuby and Akka's actors than anything else, but it also shows that Akka is not Scala or Java only: it works on all languages on top of JVM.
ReferenceURL : https://stackoverflow.com/questions/4493001/what-are-the-best-use-cases-for-akka-framework
'programing' 카테고리의 다른 글
vue 2 소품 정의 안 됨 (0) | 2022.07.17 |
---|---|
SSLHandShakeException을 통해 handshake_failure 치명적인 경고를 수신했습니다. (0) | 2022.07.17 |
Vue JS의 상위 구성 요소에서 하위 구성 요소로 업데이트된 값을 보내는 방법 (0) | 2022.07.17 |
이것이 Vue.js 컴포넌트에서 ID를 설정하는 올바른 방법입니까? (0) | 2022.07.16 |
왜 GCC 컴파일된 C 프로그램에 .eh_frame 섹션이 필요한가? (0) | 2022.07.16 |