Я пришел из 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, что, на мой взгляд, значительно упрощает программирование параллелизма. Однако, хотя это масштабируемое по вертикали, это не кластерное / горизонтально масштабируемое решение.
В любом случае, надеюсь, что все это имеет смысл, и большое спасибо за любую оказанную помощь.