2011-01-26 1 views
6

Я исхожу из фона 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. Озабоченность, которую я хотел бы получить здесь, заключается в том, что моя логика обработки работы на самом деле довольно высокого уровня, поэтому я не уверен, насколько это можно сделать, чтобы преобразовать карту. Кроме того, я новичок в МР.

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

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

+1

Akka обеспечивает надежную дистанционную возможность для Scala, поэтому я не уверен, что справедливо сказать, что Scala не масштабируется по горизонтали. (На самом деле даже основная библиотека Scala обеспечивает некоторую поддержку для удаленных участников.) –

+0

Привет, Rex, спасибо, это именно то, что я предполагаю, о чем я мало что знаю. Итак, легко ли распределять задания по узлам с помощью scala и Akka? Не могли бы вы порекомендовать его с помощью кластера JBoss? – Brian

+0

Я боюсь, что не знаю, чтобы рекомендовать; Я просто знаю, что это возможность. –

ответ

0

решение, которое вы ищете, это Akka. Кластеризация является особенностью в стадии разработки, и, как правило, включены в Акку 2,1

  • Отлично Scala и Java Api, чрезвычайно полная
  • Сугубо сообщение-ориентированный шаблон, без общего состояния устойчивы
  • Диагностика и масштабируемой
  • Чрезвычайно легко распределить рабочие места

Пожалуйста, избавиться от J2EE, если вы все еще на время. Вы можете присоединиться к списку рассылки Akka, чтобы задать свои вопросы.

0

Вы должны взглянуть на spark. Это кластерная вычислительная среда, написанная в Scala, целью которой является жизнеспособная альтернатива Hadoop. Он имеет ряд хороших подвигов:

  • In-Memory вычисления: Вы можете контролировать степень кэширования
  • Hadoop Input/Output совместимость: Spark может чтение/запись данных из всех источников входных Hadoop, такие как HDFS, EC2 и т.д.
  • понятие «Плотный Распределенные Datasets» (RDD), который позволяет напрямую выполнить большую часть нагрузки MR типа параллельно на кластере, как вы могли бы сделать локально
  • Первичный API = Scala, опционально python и Java API
  • Он использует of Akka :)

Если я правильно понял ваш вопрос, Spark объединил бы ваши варианты 2) и 3).

Смежные вопросы