Bardzo podoba mi się te narzędzia, jeśli chodzi o poziom współbieżności, z jakim mogą sobie poradzić.
Erlang / OTP wygląda na znacznie bardziej stabilne rozwiązanie, ale wymaga dużo więcej nauki i dużo nurkowania w funkcjonalnym paradygmacie języka. I wygląda na to, że Erlang / OTP znacznie poprawia to, jeśli chodzi o wielordzeniowe procesory (popraw mnie, jeśli się mylę).
Ale co mam wybrać? Który z nich jest lepszy w perspektywie krótko- i długoterminowej?
Moim celem jest nauczenie się narzędzia, które ułatwi skalowanie moich projektów internetowych pod dużym obciążeniem niż tradycyjne języki.
concurrency
erlang
multicore
node.js
user80805
źródło
źródło
Odpowiedzi:
Spróbowałbym Erlangowi. Nawet jeśli będzie to bardziej stroma krzywa uczenia się, wyciągniesz z niej więcej, ponieważ będziesz uczyć się funkcjonalnego języka programowania. Ponadto, ponieważ Erlang jest specjalnie zaprojektowany do tworzenia niezawodnych, wysoce współbieżnych systemów, dowiesz się wiele o tworzeniu wysoce skalowalnych usług w tym samym czasie.
źródło
Nie mogę mówić w imieniu Erlanga, ale kilka rzeczy, o których nie wspomniano o node:
Obejrzyj wideo na blogu Yahoo autorstwa Ryana Dahla, gościa, który napisał Node. Myślę, że pomoże ci to lepiej zrozumieć, gdzie jest węzeł i dokąd zmierza.
Należy pamiętać, że węzeł wciąż jest na późnym etapie rozwoju, a więc przeszedł kilka zmian - zmian, które zepsuły wcześniejszy kod. Jednak podobno jest to punkt, w którym można oczekiwać, że interfejs API nie zmieni się zbytnio. Więc jeśli szukasz czegoś fajnego, powiedziałbym, że node to świetny wybór.
źródło
Jestem wieloletnim programistą Erlang i to pytanie skłoniło mnie do przyjrzenia się node.js. Wygląda cholernie dobrze.
Wygląda na to, że aby skorzystać z wielu rdzeni, musisz uruchomić wiele procesów. Nie widzę jednak nic o ustawianiu koligacji procesora. Możesz użyć zestawu zadań na Linuksie, ale prawdopodobnie powinien być sparametryzowany i ustawiony w programie.
Zauważyłem też, że obsługa platformy może być trochę słabsza. W szczególności wygląda na to, że musisz działać pod obsługą Cygwin dla Windows.
Wygląda jednak dobrze.
Edytować
Node.js ma teraz natywną obsługę systemu Windows.
źródło
Patrzę na te same dwie alternatywy dla wielu projektów.
Jak dotąd najlepszą brzytwą, jaką wymyśliłem, aby zdecydować między nimi dla danego projektu, jest to, czy muszę używać Javascript. Jeden istniejący system, który chcę migrować, jest już napisany w Javascript, więc jego następna wersja prawdopodobnie zostanie wykonana w node.js. Inne projekty będą wykonywane w niektórych frameworkach internetowych Erlang, ponieważ nie ma istniejącej bazy kodu do migracji.
Inną kwestią jest to, że Erlang skaluje się znacznie poza wiele rdzeni, może być skalowany do całego centrum danych. Nie widzę wbudowanego mechanizmu w node.js, który pozwala mi wysłać komunikat innemu procesowi JS bez dbania o to, na której maszynie jest on, ale jest on wbudowany bezpośrednio w Erlang na najniższych poziomach. Jeśli Twój problem nie jest wystarczająco duży, aby potrzebować wielu maszyn lub jeśli nie wymaga wielu współpracujących procesów, ta zaleta prawdopodobnie nie będzie miała znaczenia, więc powinieneś ją zignorować.
Erlang to rzeczywiście głęboki basen do nurkowania. Sugerowałbym napisanie samodzielnego programu funkcjonalnego, zanim zaczniesz tworzyć aplikacje internetowe. Jeszcze łatwiejszym pierwszym krokiem, ponieważ wydaje się, że dobrze radzisz sobie z Javascriptem, jest wypróbowanie programowania JS w bardziej funkcjonalnym stylu. Jeśli używasz jQuery lub Prototype, już rozpocząłeś tę ścieżkę. Spróbuj przejść pomiędzy czystym programowaniem funkcyjnym w Erlangu lub jednym z jego krewnych (Haskell, F #, Scala ...) a funkcjonalnym JS.
Gdy już zaznajomisz się z programowaniem funkcjonalnym, poszukaj jednego z wielu frameworków internetowych Erlang; prawdopodobnie nie powinieneś pisać aplikacji bezpośrednio na coś niskiego poziomu, jak
inets
na tak późnym etapie. Spójrz na przykład na azot .źródło
Chociaż osobiście wybrałbym Erlanga, przyznaję, że jestem trochę stronniczy w stosunku do JavaScript. Moja rada jest taka, aby ocenić kilka punktów:
Erlang ma naprawdę dopracowany system współbieżności i równoległy, przejrzysty dla sieci. W zależności od tego, jaki dokładnie jest projekt, dostępność dojrzałej implementacji takiego systemu może przeważyć wszelkie problemy związane z nauką nowego języka. Istnieją również dwa inne języki, które działają na Erlang VM, których możesz używać, Reia w stylu Ruby / Python i Erlang o smaku Lisp .
Jeszcze inną opcją jest użycie obu, zwłaszcza gdy Erlang jest używany jako swego rodzaju „hub”. Nie jestem pewien, czy Node.js ma system interfejsu funkcji obcych, ale jeśli tak, Erlang ma bibliotekę C dla procesów zewnętrznych, które mogą współpracować z systemem, tak jak każdy inny proces Erlang.
źródło
Wygląda na to, że Erlang działa lepiej przy wdrażaniu na stosunkowo niskim serwerze (512 MB 4-rdzeniowej maszyny wirtualnej 2,4 GHz AMD). Wynika to z doświadczenia firmy SyncPad w zakresie porównywania implementacji Erlang i Node.js ich aplikacji serwera wirtualnej tablicy.
źródło
Na tej samej maszynie wirtualnej jest jeszcze jeden język, którym jest erlang -> Elixir
To bardzo interesująca alternatywa dla Erlanga, sprawdź tę.
Posiada również szybko rozwijający się framework sieciowy oparty na nim-> Phoenix Framework
źródło
whatsapp nigdy nie osiągnąłby poziomu skalowalności i niezawodności bez erlang https://www.youtube.com/watch?v=c12cYAUTXXs
źródło
Wolę Erlanga od Node. Jeśli chcesz współbieżności, Node można zastąpić Erlang lub Golang ze względu na ich lekkie procesy.
Erlang nie jest łatwy do nauczenia, więc wymaga dużo wysiłku, ale jego społeczność jest aktywna, więc może uzyskać pomoc, to tylko powód, dla którego ludzie wolą Node.
źródło