Параметры распараллеливания / кластера для выполнения кода

Я ' m, исходящий из фона java, и проблема связана с процессором, которую я пытаюсь распараллелить для повышения производительности. Я разбил свой код на модульное исполнение, чтобы его можно было распределять и запускать параллельно (надеюсь).

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void runMyJob(List<String> some params){
  doComplexEnoughStuffAndWriteToMysqlDB();
}

Теперь я думал о следующих вариантах распараллеливания этой проблемы и хотел бы мысли / опыт людей в этой области.

Варианты, о которых я сейчас думаю:

1) Использовать кластеризацию Java EE (например, JBoss) и MessageDrivenBeans. MDB находятся на подчиненных узлах в кластере. Каждый MDB может выбрать событие, которое запускает работу, как указано выше. AFAIK Java EE MDB поддерживает многопоточность сервером приложений, поэтому мы надеемся, что он также сможет использовать преимущества многоядерности. Таким образом, он должен быть масштабируемым по вертикали и горизонтали.

2) Я мог бы использовать что-то вроде Hadoop и Map Reduce. У меня могут возникнуть опасения, что моя логика обработки заданий на самом деле довольно высока, поэтому я не уверен, насколько это можно перевести в Map Reduce. Кроме того, я новичок в MR.

3) Я мог бы взглянуть на что-то вроде Scala, который, как мне кажется, значительно упрощает параллельное программирование. Однако, хотя это вертикально масштабируемое решение, это не кластерное / горизонтально масштабируемое решение.

В любом случае, надеюсь, что все это имеет смысл, и большое спасибо за любую предоставленную помощь.

6
задан Arjan Tijms 26 May 2013 в 10:24
поделиться