2013-04-17 3 views
1

Я не очень понимаю модель динамического и рабочего процессов Heroku, относящуюся к одному процессу, но многопоточному Java-серверу.Сопоставление модели кедра герою с многопоточным приложением

Например: Как узнать (для одного дино), сколько процессоров доступно для моих фоновых потоков? Нужно ли использовать что-то вроде RabbitMQ и создавать отдельный процесс (приложение) для каждой задачи фоновой обработки и общаться между сервером и этими? Кажется, немного переборщик для некоторых запланированных задач с использованием Thread Cached Executors. Должны ли все фьючерсы меняться на межпроцессные фьючерсы?

Я думаю, это сводится к этому вопросу. Могу ли я больше не писать многопоточный сервер и масштабировать процессоры, доступные для моего серверного процесса, чтобы удовлетворить мою активность потоков? Или мне нужно реорганизовать мою архитектуру для использования отдельных процессов для параллелизма? Если первый, мне нужны рабочие или просто несколько динамиков?

Спасибо.

ответ

1

Heroku поддерживает несколько моделей параллелизма, поэтому вам действительно важно, как вы хотели бы архитектовать свое приложение. У вас есть доступ к полному стеку Java, поэтому, если что-то имеет смысл просто запускать как несколько потоков в ваших веб-процессах, вы можете это сделать, или вы всегда можете ставить задания на что-то вроде RabbitMQ или Redis и обрабатывать их на отдельном рабочий динамик. Многопоточность проще и имеет смысл, если объем работы является легким и пропорциональным вашим веб-запросам, поскольку он будет масштабироваться вместе с веб-динамиками; однако, если работа велика, не пропорциональна и/или должна быть масштабирована независимо, то разбить ее на отдельный процесс будет лучше.

Heroku был изначально только платформой Ruby, которая не имеет таких же возможностей для потоковой передачи, как Java, поэтому использование отдельных рабочих динамических процессоров более важно для Ruby, и это отражено в некоторых документах и ​​примерах там, где может привести к вашей путанице. К счастью, с Java у вас есть больше возможностей, доступных вам, и вы можете использовать то, что лучше всего подходит для работы.

+1

Спасибо! Мне сложно найти, как настроить эти модели потоков. Можете ли вы указать мне документ? –

+0

Здесь нет ничего специфического в Героку, поэтому любой учебник по параллелизму Java будет работать. Вот хорошее место для начала: http://www.vogella.com/articles/JavaConcurrency/article.html. Он проходит через всю гамму, включая потоки нитей низкого уровня и блокировки, которые вы, вероятно, захотите избежать на практике в пользу более новых абстракций в пакете 'java.util.concurrent', но хорошо их понимать, потому что они лежат в основе всего система. Если вы хотите еще более абстрактные абстракции с актерами, взгляните на [Akka] (http://akka.io/). – ryanbrainard

+0

... и если вы хотите посмотреть, как работает многосерийный web-рабочий подход от Heroku с Java на Heroku, посмотрите https://devcenter.heroku.com/articles/asynchronous-web-worker -model-using-rabbitmq-in-java – ryanbrainard

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