Realmente me gustan estas herramientas cuando se trata del nivel de concurrencia que puede manejar.
Erlang / OTP parece una solución mucho más estable, pero requiere mucho más aprendizaje y mucha inmersión en el paradigma del lenguaje funcional. Y parece que Erlang / OTP lo hace mucho mejor cuando se trata de CPU multinúcleo (corríjame si me equivoco).
¿Pero cuál debería elegir? ¿Cuál es mejor a corto y largo plazo?
Mi objetivo es aprender una herramienta que facilite el escalado de mis proyectos web con mucha carga que los lenguajes tradicionales.
concurrency
erlang
multicore
node.js
user80805
fuente
fuente
Respuestas:
Le daría una oportunidad a Erlang. Aunque será una curva de aprendizaje más pronunciada, sacará más provecho ya que aprenderá un lenguaje de programación funcional. Además, dado que Erlang está diseñado específicamente para crear sistemas confiables y altamente concurrentes, aprenderá mucho sobre cómo crear servicios altamente escalables al mismo tiempo.
fuente
No puedo hablar por Erlang, pero algunas cosas que no se han mencionado sobre node:
Mira el video en el blog de yahoo de Ryan Dahl, el tipo que realmente escribió node. Creo que eso le ayudará a tener una mejor idea de dónde se encuentra el nodo y hacia dónde se dirige.
Tenga en cuenta que el nodo aún se encuentra en las últimas etapas de desarrollo y, por lo tanto, ha sufrido bastantes cambios, cambios que han roto el código anterior. Sin embargo, supuestamente está en un punto en el que puede esperar que la API no cambie mucho más. Entonces, si está buscando algo divertido, diría que node es una excelente opción.
fuente
Soy un programador de Erlang desde hace mucho tiempo, y esta pregunta me llevó a echar un vistazo a node.js. Se ve muy bien.
Parece que necesita generar múltiples procesos para aprovechar múltiples núcleos. Sin embargo, no veo nada sobre la configuración de la afinidad del procesador. Puede usar el conjunto de tareas en Linux, pero probablemente debería estar parametrizado y configurado en el programa.
También noté que el soporte de la plataforma podría ser un poco más débil. Específicamente, parece que necesitaría ejecutar Cygwin para el soporte de Windows.
Aunque luce bien.
Editar
Node.js ahora tiene soporte nativo para Windows.
fuente
Estoy viendo las mismas dos alternativas que tienes, gotts, para múltiples proyectos.
Hasta ahora, la mejor maquinilla de afeitar que se me ocurrió para decidir entre ellas para un proyecto determinado es si necesito usar Javascript. Un sistema existente que estoy buscando migrar ya está escrito en Javascript, por lo que es probable que su próxima versión se realice en node.js. Otros proyectos se realizarán en algún marco web de Erlang porque no hay una base de código existente para migrar.
Otra consideración es que Erlang se escala mucho más allá de varios núcleos, se puede escalar a un centro de datos completo. No veo un mecanismo incorporado en node.js que me permita enviar un mensaje a otro proceso JS sin importar en qué máquina se encuentra, pero eso está integrado en Erlang en los niveles más bajos. Si su problema no es lo suficientemente grande como para necesitar varias máquinas o si no requiere varios procesos cooperativos, es probable que esta ventaja no importe, por lo que debe ignorarla.
Erlang es de hecho una piscina profunda en la que sumergirse. Sugeriría escribir un programa funcional independiente primero antes de comenzar a crear aplicaciones web. Un primer paso aún más fácil, ya que parece cómodo con Javascript, es intentar programar JS en un estilo más funcional. Si usa jQuery o Prototype, ya ha comenzado por este camino. Intente saltar entre programación funcional pura en Erlang o uno de sus parientes (Haskell, F #, Scala ...) y JS funcional.
Una vez que se sienta cómodo con la programación funcional, busque uno de los muchos marcos web de Erlang; probablemente no debería escribir su aplicación directamente en algo de bajo nivel como
inets
en esta etapa tardía. Mire algo como el nitrógeno , por ejemplo.fuente
Aunque personalmente me decantaría por Erlang, admitiré que soy un poco parcial en contra de JavaScript. Mi consejo es que evalúes algunos puntos:
Erlang tiene un sistema distribuido paralelo transparente de red y simultaneidad realmente afinado. Dependiendo de qué es exactamente el proyecto, la disponibilidad de una implementación madura de dicho sistema podría superar cualquier problema relacionado con el aprendizaje de un nuevo idioma. También hay otros dos lenguajes que funcionan en Erlang VM y que puede utilizar, el Ruby / Python-like Reia y Lisp-Flavored Erlang .
Otra opción más es usar ambos, especialmente con Erlang que se usa como una especie de "hub". No estoy seguro de si Node.js tiene un sistema de interfaz de función externa, pero si lo tiene, Erlang tiene una biblioteca C para que los procesos externos interactúen con el sistema como cualquier otro proceso de Erlang.
fuente
Parece que Erlang funciona mejor para la implementación en un servidor de gama relativamente baja (VM AMD de 512 MB y 4 núcleos a 2,4 GHz). Esto es de la experiencia de SyncPad al comparar las implementaciones de Erlang vs Node.js de su aplicación de servidor de pizarra virtual.
fuente
Hay un idioma más en la misma VM que erlang -> Elixir
Es una alternativa muy interesante a Erlang, mira esta.
También tiene un marco web de rápido crecimiento basado en él-> Phoenix Framework
fuente
whatsapp nunca podría alcanzar el nivel de escalabilidad y confiabilidad sin erlang https://www.youtube.com/watch?v=c12cYAUTXXs
fuente
Preferiré Erlang sobre Node. Si desea concurrencia, Node puede ser sustituido por Erlang o Golang debido a sus procesos livianos.
Erlang no es fácil de aprender, por lo que requiere mucho esfuerzo, pero su comunidad es activa, por lo que puede obtener ayuda de eso, esta es solo la razón por la que la gente prefiere Node.
fuente