2011-01-26 4 views
6

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와 같은 것을 볼 수 있습니다. 그러나 수직 확장이 가능하지만 클러스터/수평 확장 솔루션은 아닙니다.

어쨌든 모든 것이 의미가 있고 제공되는 도움에 감사드립니다.

+1

Akka는 스칼라에 강력한 원격 액터 기능을 제공하므로 스칼라가 수평 확장이 가능하지 않다는 것이 확실하지는 않습니다. 실제로 스칼라의 핵심 라이브러리도 원격 액터에 대한 지원을 제공합니다. –

+0

안녕하세요. Rex 님, 제가 정확히 알지 못하는 것의 유형입니다. 따라서 스칼라와 아카 (Akka)가있는 노드에서 작업을 배포하기가 쉽니 까? JBoss 클러스터를 사용하는 것 이상으로 권장할까요? – Brian

+0

둘 중 하나를 권유하기에 충분하지 않을까 걱정됩니다. 나는 그것이 가능성을 안다. –

답변

0

찾고있는 해결책은 Akka입니다. 클러스터링은 개발중인 기능이며, 일반적으로 Akka에 포함됩니다 2.1

  • 우수 매우 완전한 스칼라 및 Java API를
  • 순수한 메시지 지향
  • 오류 방지 및
  • 확장 성이없는 공유 상태로, 패턴
  • 매우 배포하기 쉬운 작업

아직 정시에 J2EE를 제거하십시오. 질문을하기 위해 Akka 메일 링리스트에 가입하는 것은 대단히 환영합니다.

0

너는 spark을 봐야한다. 스칼라로 작성된 클러스터 컴퓨팅 프레임 워크로 Hadoop을 대체 할 수 있습니다.

  • 인 - 메모리 계산 : 그것은 좋은 업적을 가지고 있습니다 당신은 캐시의 정도를 제어 할 수 있습니다
  • 하둡 입력/출력 상호 운용성 : 불꽃 같은 모든 하둡 입력 소스에서/쓰기 데이터를 읽을 수 있습니다 HDFS, EC2 등
  • 로컬에서 할 것처럼 클러스터에서 대부분의 MR 스타일 작업 부하를 병렬로 직접 실행할 수있게 해주는 RDD (Resilient Distributed Datasets) 개념
  • 기본 API = 스칼라, 선택 사항 파이썬 및 Java API
  • Akka의 :

귀하의 질문을 올바르게 이해한다면, 귀하의 옵션 2)과 3)을 결합하게됩니다.

관련 문제