Какие дизайнерские решения предпочтут актеры Scala вместо JMS?

В чем разница с использованием Scala Actors вместо JMS?

Например, с точки зрения производительности и масштабируемости, что добавляет модель Scala Actor по сравнению с JMS? В каких случаях имеет смысл использовать Actors, а не JMS, т.е. какие проблемы решает Actors, которые JMS не может охватить?

1 ответ

Решение

Актеры JMS и Scala имеют теоретическое сходство, но не думают, что они обязательно решают одни и те же проблемы архитектурно. Считается, что действующие лица - это легкая альтернатива параллелизму с разделяемой памятью, где случайные расы и тупики, как правило, труднее создать случайно. JMS - это сложный API, предназначенный для охвата прямого обмена сообщениями, публикации / подписки, транзакций, интеграции EJB и т. Д.

Ближайшим JMS-эквивалентом для субъекта будет управляемый сообщениями компонент, поддерживаемый непостоянной, нетранзакционной, не паб / подпоследовательностью. Я назову это "простым компонентом JMS".

Теперь на ваши вопросы.

Трудно говорить о производительности, поскольку JMS - это спецификация, а не реализация. Тем не менее, при использовании простого компонента JMS, я ожидаю, что производительность будет примерно одинаковой, возможно, с небольшим преимуществом для актера во времени и памяти. Когда вы добавляете в JMS такие возможности, как паб / саб, транзакции и т. Д., Производительность естественным образом снижается еще больше, но затем вы пытаетесь сравнить яблоки с апельсинами.

Что касается масштабируемости, простые компоненты JMS должны масштабироваться почти так же, как и актеры. Добавление транзакций в JMS, естественно, повредит масштабируемости на величину, зависящую от объема транзакций.

Более широкий вопрос о том, что делают актеры, чего не может JMS. Ну, без встроенного паба или транзакций может показаться, что актеры отнимают JMS - и в целом это правда. Но вот в чем дело: актерам требуется так мало кода, что я с радостью могу использовать их для очень тонкого параллелизма. В обычном Java-коде я могу сказать: "Я не чувствую желания разбираться с JMS и его зависимостями или кодом, который требуется, и т. Д., Поэтому я просто создаю поток, использую блокировку и делюсь структурой данных". С актерами Scala у меня гораздо больше шансов сказать: "Я просто соберу актера и продолжу".

Есть также философская разница в дизайне. Актеры имеют простую, встроенную концепцию иерархий супервизоров. Актеры, как правило, используются в дизайне "пусть разбиваются". Если актер по какой-то причине умирает, то другой актер отвечает за решение, что с ним делать, например, перезапуск этого актера, убийство группы актеров и перезапуск всех из них, или убийство группы актеров и самого себя, чтобы какой-то другой актер мог разобраться с проблемой. Такие вещи могут добавляться в JMS, но это не ядро ​​API и должно каким-то образом управляться извне.

Кстати, для актерской библиотеки Scala, которая больше перемещается в области, которые охватывает JMS, см. Akka. Акка также привносит декларативный подход ко многим распространенным стратегиям иерархии субъектов.

Другие вопросы по тегам