Jak jest Node.system js eventowy inny niż schemat Akka?

Pracowałem z Node.js przez jakiś czas i uważam się za całkiem dobrego w Javie. Ale właśnie odkryłem Akka i od razu zainteresowałem się jego wzorem aktora (z tego co rozumiem).

Teraz, zakładając, że moje umiejętności JavaScript były na równi z moimi umiejętnościami Scala / Java, chcę skupić się na praktyczności obu systemów. Szczególnie w zakresie usług internetowych.

Zrozumiałem, że Node doskonale radzi sobie z wieloma współbieżnymi operacjami. Wyobrażam sobie dobry Usługa sieciowa Node dla systemu zarządzania zasobami byłaby doskonała w obsłudze wielu użytkowników zgłaszających zmiany w tym samym czasie (w dużej aplikacji o dużym natężeniu ruchu).

Ale po przeczytaniu o aktorach w Akce, to jest to samo. I podoba mi się pomysł zmniejszenia pracy do małych kawałków. Plus, lata temu bawiłem się w Erlanga i zakochałem się w systemie przekazywania wiadomości, którego używa.

Pracuję na wielu aplikacjach, które zajmują się skomplikowaną logiką biznesową i jestem myślę, że nadszedł czas, aby przeskoczyć cięższe do jednego lub drugiego. Szczególnie unowocześnianie starszych programów i aplikacji C#.

W każdym razie, unikając świętych wojen, w jaki sposób te dwa systemy różnią się zasadniczo? Wydaje się, że oba są nastawione na ten sam cel. Może z "samouzdrawiającą się" architekturą Akki ma przewagę.

EDIT

Wygląda na to, że zbliżam się do głosowania. Proszę nie traktować tego pytania jako "co jest lepsze, węzeł czy akka?". To czego szukam to podstawowe różnice w bibliotekach opartych na zdarzeniach, takich jak Node i Akka.
Author: cbmeeks, 2012-12-12

3 answers

Bez wchodzenia w szczegóły (o których wiem zbyt mało w przypadku Node.js), główną różnicą jest ten węzeł.js obsługuje tylko współbieżność bez paralelizmu, podczas gdy Akka obsługuje oba. Oba systemy są całkowicie sterowane zdarzeniami i mogą skalować się do dużych obciążeń roboczych, ale brak równoległości utrudnia pracę w węźle.js (tzn. równoległość jest jawnie kodowana przez uruchamianie wielu węzłów i odpowiednio wysyłanie żądań; jest więc nieelastyczna w czasie wykonywania), podczas gdy jest dość łatwy w Akce ze względu na przestrajalne wielowątkowe executory. Biorąc pod uwagę małe odizolowane jednostki pracy (wywoływania aktorów) Akka automatycznie zrównuje wykonanie dla Ciebie.

Kolejną różnicą jest to, że Akka zawiera system do obsługi awarii w uporządkowany sposób (poprzez nadzorowanie każdego aktora przez jego rodzica, co jest obowiązkowe), natomiast Node.js opiera się na konwencjach dla autorów, aby przekazać warunki błędu z callback do callback. Podstawowym problemem jest to, że systemy asynchroniczne nie mogą korzystać ze standardowego podejścia WYJĄTKÓW stosowanych przez systemy oparte na stosie synchronicznym, ponieważ kod "wywołujący" zostanie przeniesiony do różnych zadań do czasu wystąpienia błędu wywołania zwrotnego. Wbudowana obsługa błędów w systemie zwiększa prawdopodobieństwo, że aplikacje zbudowane na tym systemie są solidne.

Powyższe nie ma być wyczerpujące, jestem pewien, że jest o wiele więcej różnic.

 59
Author: Roland Kuhn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-16 10:10:52

Jeszcze nie używałem Akki, ale wygląda na to, że jest podobny do Erlanga, ale w Javie. W erlangu wszystkie procesy są jak aktorzy w Akce, mają skrzynki pocztowe, można wysyłać wiadomości między nimi, masz przełożonych itp.

Node.js używa współbieżności. Oznacza to, że masz współbieżność, gdy na to zezwalasz (na przykład podczas wywoływania operacji io lub jakiegoś zdarzenia asynchronicznego). Gdy masz jakąś długą operację (obliczanie czegoś w długiej pętli) całe bloki systemowe.

Erlang używa prewencyjnego przełączanie zadań. Gdy masz długą pętlę, system może wstrzymać ją, aby uruchomić inną operację i kontynuować po pewnym czasie. Dla ogromnego węzła współbieżności.js jest dobry, jeśli wykonujesz tylko krótkie operacje. Obie obsługują miliony klientów: 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/

W Javie potrzebujesz wątków do wykonania dowolnej współbieżności, w przeciwnym razie nie możesz wstrzymać wykonania wewnątrz funkcji, która erlang tak robi (w rzeczywistości erlang zatrzymuje się między wywołaniami funkcji, ale to dotyczy wszystkich funkcji). Możesz wstrzymać wykonanie między wiadomościami.

 8
Author: yetihehe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 09:49:29

Nie jestem pewien, czy to uczciwe porównanie do rysowania. Czytam to bardziej jako " jak system oparty na WKKW porównuje się z modelem aktora?". Nodejs może obsługiwać model aktora tak jak Scala robi w Akce, czy C# robi w Orleanie, faktycznie sprawdź nactor, ktoś chyba już go próbuje.

Jeśli chodzi o porównanie systemu eventowego z modelem aktora, to pozwolę mądrzejszym ludziom to opisać. Kilka krótkich punktów na temat modelu aktora:

  • Model aktora to wiadomość na podstawie
  • Modele aktorów zwykle dobrze radzą sobie z systemami rozproszonymi (klastrami). Oczywiście systemy oparte na zdarzeniach mogą być dystrybuowane, ale myślę, że model aktora ma dystrybucję wbudowaną w odniesieniu do dystrybucji obliczeń. Nowe żądanie może być kierowane do nowego aktora w innym silosie, Nie wiem, jak to będzie działać w oparciu o zdarzenia.
  • Model aktora wspiera niepowodzenie w tym, że jeśli hey cluster 1 apperas jest w dół, obserwator może ogólnie znaleźć inny silos do zrobienia praca

Zobacz też dramat . Jest to kolejna implementacja modelu NodeJS actor.

 5
Author: stevebot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 17:34:47