Как это узел.JS evented system отличается от модели актера Акка?


Я работал с Node.js на некоторое время и считаю себя довольно хорошо с Java. Но я только что обнаружил Akka и сразу же заинтересовался его картины актер (насколько я понимаю).

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

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

EDIT

похоже, что я получаю близкие голоса. Пожалуйста, не принимайте этот вопрос как "что лучше, узел или акка?". То, что я ищу, - это фундаментальные различия в библиотеках, управляемых событиями, таких как Node и actor, такие как Akka.

3 91

3 ответа:

Не вдаваясь в подробности (о которых я знаю слишком мало в случае узла.js), основное отличие заключается в том, что узел.js поддерживает только параллелизм без параллелизма, в то время как Akka поддерживает оба. Обе системы полностью управляются событиями и могут масштабироваться до больших рабочих нагрузок, но отсутствие параллелизма затрудняет работу в узле.JS (т. е. параллелизм явно кодируется путем запуска нескольких узлов и отправки запросов соответственно; поэтому он негибок во время выполнения), в то время как это довольно легко в Akka из-за его настраиваемых многопоточных исполнителей. Учитывая небольшие изолированные единицы работы (вызовы актеров), Akka автоматически распараллелит выполнение для вас.

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

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

Я еще не использовал Akka, но, похоже, это erlang-like, но на java. В erlang все процессы похожи на актеров в Akka, у них есть почтовые ящики, вы можете отправлять сообщения между ними, у вас есть руководители и т. д.

узел.js использует кооперативный параллелизм. Это означает, что у вас есть параллелизм, когда вы его разрешаете (например, при вызове операции ввода-вывода или некоторого асинхронного события). Когда у вас есть какая-то длинная операция (вычисление чего-то в длинном цикле) целые системные блоки.

Эрланг использует упреждающее переключение задач. Когда у вас есть длинный цикл, система может приостановить его, чтобы запустить другую операцию и продолжить через некоторое время. Для массивного узла параллелизма.js хорош, если вы делаете только короткие операции. Оба поддерживают миллионы клиентов: http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/

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

Я не уверен, что это справедливое сравнение, чтобы рисовать. Я прочитал это больше как "как система на основе evented сравнивается с моделью актера?". Nodejs может поддерживать модель актера так же, как Scala делает в Akka, или C# делает в Орлеане, на самом деле проверить nactor, кто-то, кажется, уже пытались это сделать.

как система эвентед и модель актер сравнивать, я позволил бы мудрее люди описывают это. Несколько кратких моментов об актере модель:

  • модель актера основана на сообщении
  • модели акторов, как правило, хорошо работают с распределенными системами (кластерами). Конечно, системы на основе событий могут быть распределены, но я думаю, что модель актора имеет распределение, встроенное в отношении распределения вычислений. Новый запрос может быть направлен новому субъекту в другом бункере, не зная, как это будет работать в событии.
  • модель актера поддерживает отказ в том, что, если hey cluster 1 apperas будет вниз, то наблюдатель обычно может найти другой бункер для выполнения работы

кроме того, проверьте драма. Это еще одна реализация модели актора nodejs.