Когда это не хорошо, чтобы использовать актеров в Akka/Эрланг?

Я'вэ работает с акка на 7-8 месяцев ежедневно. Когда я начинал, я работал бы на приложения и заметил, что актеры будут использованы в основном в любом месте оказавшись внутри, вдруг для связи между объектами. Так что я сделал то же самое - спина еще актер Для х/г/з.

Мне кажется, что это может быть слишком неразборчивы, добавив сложности, где это'т нужна - но я могу'т найти любые дискуссии о том, где актеры против обычного синхронного или асинхронного логики даже с помощью фьючерсов должно быть использовано. Я начал обдумывать свою позицию после того, как мой коллега упоминал нечто подобное. Я понял, что несколько случаев в последнее время когда я размышлял над задачей, а потом избежать создания еще одного актера, потому что я мог бы достичь того же результата безопасно в неизменяемом реализации - например, что-то как получить значения параметров из БД или файл, где вы к очень нечасто и будем ждать результат является фактическое использование случае.

В частности, мне кажется, что любой случай, когда вы'вновь играет с неизменным состоянием, актеры создают сложности и ограничения пропускной способности - это чистое назначение объекта, например, можно назвать одновременно без риска с любым уровнем параллелизма, но актер может обрабатывать только одно сообщение за раз. Альтернативное соображение-вы'МР-парк-нить, Если вам нужно ждать результат, если вы начнете использовать фьючерсы, но случаи, когда вы не'т нужно беспокоиться о async сообщения или данные, кажется, это может быть излишним нанимать актера.

Итак, мой вопрос - есть ли плохое время, чтобы использовать актеров? Я'м любопытное, как Эрланг выглядит и нравится другим людям'с проницательностью. Или если есть некоторые принципы, на основе использования актера.

Комментарии к вопросу (5)

Этот вопрос меня заинтересовал и я провел небольшое исследование. Для других точек зрения, увидеть в этом своем блоге Ноэль Уолш или этот вопрос на переполнение стека. У меня есть некоторые мнения, я хотел бы предложить:

  • Я думаю, Акка, потому что он работает с сообщениями, поощряет и "выталкивания" по. Часто, для параллелизма, я утверждаю, что это не то, что вы хотите. Тянуть намного безопаснее. Например один общий шаблон для распределенных систем-это набор рабочие обработки информации в очереди. Очевидно, что такое возможно в Акко но это вовсе'т должен показаться первый подход люди пробуют. Акка также предлагает прочный почтовых ящиков но опять же это зависит, как вы используете их - одна общая очередь гораздо более гибкими, чем в очередях работника для балансировки / переназначаю работы.
  • Это's легкий для того чтобы попасть в мышлении заменить занятия с актерами. На самом деле некоторые люди даже, кажется, адвокат, сказав, актеры должны делать только одну вещь. Принято это'ы логический вывод это увеличивает сложность кода, как Джейсон описывает, потому что, если каждый класс является актер, что's большое экстренные сообщения и получать / отправлять блоков. Это также делает это тяжелее, чтобы понять и протестировать код, потому что вы теряете формальность интерфейсов - и я не уверен, что комментарии решение. Также, несмотря на Акка'легендарный эффективности S, я подозреваю, что распространение актер не является хорошей идеей с точки зрения производительности - когда мы используем Java-потоки мы знаем, что они являются драгоценными и сохранить их соответственно.
  • Это'ы, связанные с предыдущим пунктом, но очередная неприятность-это потеря информации о типе, что Ноэль и Пино событием, а для многих из нас, что's, почему мы используем Scala, чем на других языках, таких как Python. Есть некоторые способы обойти это, но они либо нестандартный, не рекомендуется или экспериментальные.
  • Наконец, параллелизм, даже если у вас есть"Давайте его аварии на"]13 мышлением, сложно. Альтернативные модели программирования может помочь, но они не'т сделать проблемы уходят - они их меняют - что's, почему это's хороший к думать о них официально. Это's также, почему Джо средний разработчик тянется к готовые встроенные инструменты, как в RabbitMQ, шторм, Hadoop и искры, Кафка или NoSQL баз данных. На акке есть готовые инструменты и компоненты, это здорово, но он также чувствует себя довольно низком уровне, так еще готова причине общих элементов распределенных систем поможет разработчикам и обеспечения системы строятся правильно.

Как и Джейсон, я хотел бы услышать других людей'ы инсайт. Как я могу решить некоторые из проблем выше, и использовать Акка лучше?

Комментарии (7)

Это's стоит, учитывая то, что актер модель используется для: актер, модель

  1. в модели параллелизма
  2. что исключает одновременный доступ к изменяемым состоянием
  3. используя асинхронной коммуникации механизмы обеспечения параллелизма.

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

  • Вы Дон'т допустить параллелизма, или
  • Вы Дон'т позвольте изменяемое состояние (как в функциональном программировании), или
  • Вы должны полагаться на какой-то механизм синхронного общения,

тогда модель актер не будет давать гораздо (если таковые имеются) пользу.

Надеюсь, что помогает.

Комментарии (4)

Ваша интуиция верна, ИМХО. С помощью актеров везде как пресловутый молоток и видит только гвозди.

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

Комментарии (1)

В целях ввода/вывода обмена сообщениями:

Недавно я встречался с акка-приложений, где модели акторов на самом деле причиной проблемы параллелизма, более простой модели хватило бы и лучше под нагрузкой.

Проблема заключалась в том, что входящие сообщения двигались в разных 'полосы' (по разным актер путей), но код взял на сообщения прибудут в конечный пункт назначения в том же порядке, в котором они приехали. Пока данные поступили с достаточно большими интервалами, это работает, потому что там будет только один конфликтующих сообщение гонок до места назначения. Когда интервалы сократились, они начали прибывать из строя и вызывает странное поведение.

Эта проблема могла бы быть решена правильно с немного меньше участников, но это'ы легко ошибиться, когда злоупотребляют их.

Комментарии (1)

На мой взгляд есть два варианта использования для актеров. Общие ресурсы, такие как порты и тому подобное, и большие государства. Первой была покрыта и дискуссии до сих пор, но большие государства тоже является уважительной причиной.

Большая структура передается при каждом вызове процедуры можно использовать много стека. Это состояние может быть помещен в отдельный процесс, структура заменяется идентификатором процесса, и этот процесс запрашиваются по мере необходимости.

Баз данных, таких как mnesia можно рассматривать как хранение состояние внешне на процесс опроса.

Комментарии (2)