Каковы преимущества / недостатки для распределения многоэтапных задач через JMS или JavaSpaces? - PullRequest
1 голос
/ 24 сентября 2008

При попытке распределить работу, требующую многоэтапного конвейера обработки, каковы ограничения затрат на связь, синхронизацию и пропускную способность в JMS против JavaSpaces?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2008

Если вы хотите, чтобы SEDA отправляла сообщения от этапа к этапу, то реализации JMS обычно намного быстрее и более масштабируемы, поскольку MOM разработаны так, что не требуют блокировок, поэтому они могут быть в высокой степени асинхронными и параллельными. С помощью JMS вы можете настроить потребителя при запуске, и брокер сообщений, как правило, будет отправлять сообщения в ваше приложение как можно скорее, чтобы в любое время было доступно много объектов в памяти для обработки, как только ваше приложение сможет их обработать - избегая любых сетевых обходов. отключения или блокировки и т. д. См., например, , как предварительная выборка работает с ActiveMQ

Использование JavaSpaces для обмена сообщениями имеет тенденцию быть менее эффективным, поскольку они обычно реализуются с использованием более ориентированного на базу данных подхода использования блокировок с чтением / записью в записи и т. Д. Таким образом, вы склонны запрашивать объекты, а затем обрабатывать их с помощью JavaSpaces, что имеет тенденцию будь более болтливым и менее эффективным для обмена сообщениями.

Большая победа подхода JavaSpaces - если вы хотите использовать совместно используемое состояние; Вы можете использовать JavaSpace как своего рода базу данных. Хотя, возможно, если вам действительно нужна база данных, вы можете использовать реляционную базу данных с JMS; но JavaSpace люди любят использовать единую систему для общего состояния и обмена сообщениями.

FWIW часто нет серебряного булла с промежуточным программным обеспечением; иногда в памяти SEDA - это все, что вам нужно, иногда JMS, иногда реляционная база данных, иногда файлы в каталоге. Это полностью зависит от ваших требований, масштабируемости, пропускной способности, надежности и так далее. Я склонен рекомендовать людям скрывать API промежуточного программного обеспечения от своего кода, чтобы они могли легко переключаться на любое промежуточное программное обеспечение с помощью простого однострочного изменения конфигурации, такого как использование Apache Camel

1 голос
/ 24 сентября 2008

JMS - это API, а не продукт. Он не может иметь никаких «затрат на связь, синхронизацию и пропускную способность». Конкретная реализация JMS (Weblogic, JBoss, Tibco, ...) может.

В JMS нет функций синхронизации, кстати - очередь является очередью, вы не можете заставить одно сообщение (в одной очереди) ожидать другое сообщение (в другой очереди).

0 голосов
/ 02 февраля 2009

Еще один момент, на который следует обратить внимание: очереди JMS не обеспечивают возможность блокировки в зависимости от размера, поэтому чистой реализации SEDA трудно работать с чистыми очередями JMS, поскольку она полагается на «заполнение» очередей и применение противодавления. на верхних стадиях.

...