Java 백그라운드에서 실행 중이며 성능 향상을 위해 병렬 처리하려고하는 CPU 바인딩 문제가 있습니다. 필자는 코드를 모듈 방식으로 분해하여 병렬 방식으로 배포하고 실행할 수 있도록했습니다 (잘하면).코드 실행을위한 병렬화/클러스터 옵션
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void runMyJob(List<String> some params){
doComplexEnoughStuffAndWriteToMysqlDB();
}
는 지금, 나는이 문제를 병렬화를 위해 다음의 옵션으로 생각되었고, 나는이 지역에있는 사람들의 생각/경험을하고 싶습니다.
옵션 내가 현재 생각하고 :
1)을 사용하여 자바 EE (예 : 보스) 클러스터링 및 MessageDrivenBeans. MDB는 클러스터의 슬레이브 노드에 있습니다. 각 MDB는 위와 같이 작업을 시작하는 이벤트를 선택할 수 있습니다. AFAIK Java EE MDB는 응용 프로그램 서버에 의해 멀티 스레드되어 있으므로 멀티 코어를 활용할 수 있어야합니다. 따라서 수직 및 수평 확장이 가능해야합니다.
2) Hadoop 및 Map Reduce와 같은 것을 사용하여 볼 수 있습니다. 여기서 내가 염두에 두어야 할 사항은 제 작업 처리 로직이 실제로 상당히 높은 수준이어서지도 축소 방법에 대한 번역 방법이 확실하지 않다는 것입니다. 또한, 나는 MR에 총 초보자입니다.
3) 저는 동시성 프로그래밍을 훨씬 단순하게 만드는 Scala와 같은 것을 볼 수 있습니다. 그러나 수직 확장이 가능하지만 클러스터/수평 확장 솔루션은 아닙니다.
어쨌든 모든 것이 의미가 있고 제공되는 도움에 감사드립니다.
Akka는 스칼라에 강력한 원격 액터 기능을 제공하므로 스칼라가 수평 확장이 가능하지 않다는 것이 확실하지는 않습니다. 실제로 스칼라의 핵심 라이브러리도 원격 액터에 대한 지원을 제공합니다. –
안녕하세요. Rex 님, 제가 정확히 알지 못하는 것의 유형입니다. 따라서 스칼라와 아카 (Akka)가있는 노드에서 작업을 배포하기가 쉽니 까? JBoss 클러스터를 사용하는 것 이상으로 권장할까요? – Brian
둘 중 하나를 권유하기에 충분하지 않을까 걱정됩니다. 나는 그것이 가능성을 안다. –