Eu realmente gosto dessas ferramentas quando se trata do nível de simultaneidade com que elas podem lidar.
Erlang / OTP parece uma solução muito mais estável, mas requer muito mais aprendizado e muito mergulho no paradigma da linguagem funcional. E parece que Erlang / OTP o torna muito melhor quando se trata de CPUs multi-core (corrija-me se estiver errado).
Mas qual devo escolher? Qual é o melhor na perspectiva de curto e longo prazo?
Meu objetivo é aprender uma ferramenta que torne o dimensionamento de meus projetos da Web sob alta carga mais fácil do que as linguagens tradicionais.
concurrency
erlang
multicore
node.js
user80805
fonte
fonte
Respostas:
Eu daria uma chance a Erlang. Mesmo que seja uma curva de aprendizado mais íngreme, você aproveitará melhor, pois estará aprendendo uma linguagem de programação funcional. Além disso, como Erlang foi projetado especificamente para criar sistemas confiáveis e altamente simultâneos, você aprenderá muito sobre como criar serviços altamente escaláveis ao mesmo tempo.
fonte
Não posso falar por Erlang, mas algumas coisas que não foram mencionadas sobre o nó:
Confira o vídeo no blog do yahoo por Ryan Dahl, o cara que realmente escreveu o node. Acho que isso ajudará a ter uma ideia melhor de onde o nó está e para onde está indo.
Lembre-se de que o nó ainda está em estágios finais de desenvolvimento e, portanto, está passando por algumas mudanças - mudanças que quebraram o código anterior. No entanto, supostamente está em um ponto em que você pode esperar que a API não mude muito mais. Então, se você está procurando algo divertido, eu diria que o node é uma ótima escolha.
fonte
Sou um programador de Erlang de longa data e essa pergunta me levou a dar uma olhada em node.js. Parece muito bom.
Parece que você precisa gerar vários processos para tirar proveito de vários núcleos. Não consigo ver nada sobre como definir a afinidade do processador. Você pode usar o conjunto de tarefas no Linux, mas provavelmente deve ser parametrizado e definido no programa.
Também notei que o suporte da plataforma pode ser um pouco mais fraco. Especificamente, parece que você precisa executar o suporte Cygwin para Windows.
Parece bom.
Editar
Node.js agora tem suporte nativo para Windows.
fonte
Estou olhando para as mesmas duas alternativas que você está, entendido, para vários projetos.
Até agora, a melhor máquina de barbear que descobri para decidir entre eles para um determinado projeto é se eu preciso usar Javascript. Um sistema existente que estou tentando migrar já está escrito em Javascript, então sua próxima versão provavelmente será feita em node.js. Outros projetos serão feitos em alguma estrutura da web Erlang porque não há base de código existente para migrar.
Outra consideração é que Erlang pode ser dimensionado muito além de apenas vários núcleos, ele pode ser dimensionado para um datacenter inteiro. Não vejo um mecanismo embutido em node.js que me permite enviar uma mensagem a outro processo JS sem me importar em qual máquina está, mas isso está embutido em Erlang nos níveis mais baixos. Se o seu problema não for grande o suficiente para precisar de várias máquinas ou se não exigir vários processos de cooperação, essa vantagem provavelmente não fará diferença, portanto, você deve ignorá-la.
Erlang é de fato um poço profundo para se mergulhar. Eu sugeriria escrever um programa funcional autônomo antes de começar a construir aplicativos da web. Um primeiro passo ainda mais fácil, já que você parece confortável com Javascript, é tentar programar JS em um estilo mais funcional. Se você usa jQuery ou Prototype, você já começou a trilhar esse caminho. Tente alternar entre a programação funcional pura em Erlang ou um de seus parentes (Haskell, F #, Scala ...) e JS funcional.
Quando estiver confortável com a programação funcional, procure uma das muitas estruturas da Web Erlang; você provavelmente não deveria escrever seu aplicativo diretamente para algo de baixo nível como
inets
neste estágio final. Veja algo como Nitrogênio , por exemplo.fonte
Embora eu pessoalmente prefira Erlang, admito que sou um pouco preconceituoso contra o JavaScript. Meu conselho é que você avalie alguns pontos:
Erlang realmente aperfeiçoou a concorrência e o sistema distribuído paralelo transparente para a rede. Dependendo do que exatamente é o projeto, a disponibilidade de uma implementação madura de tal sistema pode superar quaisquer problemas relacionados ao aprendizado de um novo idioma. Existem também duas outras linguagens que funcionam em Erlang VM que você pode usar, a Ruby / Python-like Reia e Lisp-Flavored Erlang .
Outra opção é usar ambos, especialmente com Erlang sendo usado como uma espécie de "hub". Não tenho certeza se Node.js tem sistema de interface de função estrangeira, mas se tiver, Erlang tem biblioteca C para processos externos para fazer interface com o sistema como qualquer outro processo Erlang.
fonte
Parece que o Erlang tem um desempenho melhor para implantação em um servidor relativamente simples (512 MB 4 núcleos e 2,4 GHz AMD VM). Isso vem da experiência da SyncPad em comparar as implementações Erlang e Node.js de seu aplicativo de servidor de quadro branco virtual.
fonte
Há mais um idioma na mesma VM que erlang é -> Elixir
É uma alternativa muito interessante para Erlang, veja esta.
Também tem uma estrutura da web de rápido crescimento baseada nele-> Phoenix Framework
fonte
whatsapp nunca poderia atingir o nível de escalabilidade e confiabilidade sem erlang https://www.youtube.com/watch?v=c12cYAUTXXs
fonte
Eu preferirei Erlang ao Node. Se você quiser simultaneidade, o Node pode ser substituído por Erlang ou Golang por causa de seus processos leves.
Erlang não é fácil de aprender, então requer muito esforço, mas sua comunidade é ativa, então você pode obter ajuda, esta é apenas a razão pela qual as pessoas preferem o Node.
fonte