tutorial node ejemplos concurrency erlang multicore node.js

concurrency - ejemplos - Node.js o Erlang



node js tutorial (9)

Realmente me gustan estas herramientas cuando se trata del nivel de concurrencia que puede manejar.

Erlang 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 lo hace mucho mejor cuando se trata de CPU de múltiples núcleos (corrige si estoy equivocado).

¿Pero cuál debería elegir? ¿Cuál es mejor en la perspectiva a corto / largo plazo?

Mi objetivo es aprender una herramienta que hace que el escalado de mis proyectos web en alta carga sea más fácil que los idiomas tradicionales.


Aunque personalmente iría por Erlang, admitiré que soy un poco parcial en contra de JavaScript. Mi consejo es que evalúes algunos puntos:

  1. ¿Está reutilizando el código existente en cualquiera de esos idiomas (tanto en términos de código fuente como de experiencia del programador)?
  2. Necesita / desea actualizaciones sobre la marcha sin detener la aplicación (Aquí es donde Erlang gana de manera predeterminada - su tiempo de ejecución fue diseñado para ese caso, y OTP contiene todas las herramientas necesarias)
  3. ¿Qué tan grande es el tráfico esperado, en términos de operaciones simultáneas separadas, no de ancho de banda?
  4. ¿Qué tan "paralelas" son las operaciones que haces para cada solicitud?

Erlang tiene un sistema distribuido paralelo simultaneo y de red transparente bien ajustado. 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 que puede usar, el Erlang de Ruby / Python, similar a Reia y Lisp .

Otra opción más es usar ambos, especialmente con Erlang siendo usado como una especie de "hub". No estoy seguro si Node.js tiene un sistema de interfaz de función en el extranjero, pero si lo tiene, Erlang tiene una biblioteca de C para que los procesos externos interactúen con el sistema como cualquier otro proceso de Erlang.


Estoy buscando las mismas dos alternativas que eres, gotts, para proyectos múltiples.

Hasta ahora, la mejor máquina de afeitar que he encontrado para decidir entre ellos para un proyecto determinado es si necesito usar Javascript. Un sistema existente que estoy buscando para migrar ya está escrito en Javascript, por lo que es probable que su próxima versión se realice en node.js. Se realizarán otros proyectos en algún marco web de Erlang porque no existe una base de código existente para migrar.

Otra consideración es que Erlang escalas más allá de múltiples núcleos, puede escalar a un centro de datos completo. No veo un mecanismo incorporado en node.js que me permita enviar otro mensaje JS sin importar en qué máquina está, pero eso está integrado directamente 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 múltiples procesos de cooperación, esta ventaja no es probable que importe, por lo que debe ignorarla.

Erlang es de hecho un grupo profundo en el que sumergirse. Sugeriría escribir primero un programa funcional independiente 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 usas jQuery o Prototype, ya has comenzado por este camino. Intente saltar entre la 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ías escribir tu aplicación directamente en algo de bajo nivel como inets en esta etapa tardía. Mira algo como Nitrogen , por ejemplo.


Hay un idioma más en la misma máquina virtual que erlang es -> Elixir

Es una alternativa muy interesante a Erlang, mira esto.

También tiene un marco web de rápido crecimiento basado en él-> Phoenix Framework


Le daría una oportunidad a Erlang. A pesar de que será una curva de aprendizaje más empinada, obtendrá más de ella, ya que aprenderá un lenguaje de programación funcional. Además, dado que Erlang está específicamente diseñado para crear sistemas confiables y altamente concurrentes, aprenderá mucho sobre la creación de servicios altamente escalables al mismo tiempo.


No puedo hablar por Erlang, pero hay algunas cosas que no se han mencionado sobre el nodo:

  • Node utiliza el motor V8 de Google para compilar javascript en código de máquina. Entonces el nodo es bastante rápido. Así que eso se suma a los beneficios de velocidad que ofrece la programación impulsada por eventos y la io no bloqueante.
  • Node tiene una comunidad bastante activa. Súbete a su grupo de IRC en freenode y verás a qué me refiero
  • Me he dado cuenta de que los comentarios anteriores presionan a Erlang sobre la base de que será útil aprender un lenguaje de programación funcional. Si bien estoy de acuerdo en que es importante expandir tus habilidades y obtener una de esas en tu haber, no debes basar un proyecto en el hecho de que deseas aprender un nuevo estilo de programación.
  • ¡Por otro lado, Javascript ya está en un paradigma en el que te sientes cómodo escribiendo! Además, es javascript, por lo tanto, cuando escribe el código del lado del cliente se verá y se sentirá constante.
  • ¡La comunidad del nodo ya ha bombeado toneladas de modules ! Hay módulos para redis, mongodb, couch, y qué tienes tú. Otro buen módulo para analizar es Express (piense en Sinatra para el nodo)

Mira el video en el blog de yahoo de Ryan Dahl, el tipo que realmente escribió el nodo. Creo que eso te ayudará a tener una mejor idea de dónde está el nodo y hacia dónde va.

Tenga en cuenta que el nodo aún se encuentra en las últimas etapas de desarrollo, por lo que ha sufrido bastantes cambios, cambios que han alterado el código anterior. Sin embargo, supuestamente está en un punto en el que puede esperar que la API no cambie demasiado. Entonces, si estás buscando algo divertido, diría que nodo es una gran opción.


Parece que Erlang tiene un mejor rendimiento para su implementación en un servidor relativamente bajo (512 MB de 4 núcleos de 2,4 GHz AMD VM). Esta es la experiencia de SyncPad de comparar las implementaciones Erlang vs Node.js de su aplicación de servidor de pizarra virtual.


Preferiré Erlang sobre el nodo. Si desea concurrencia, el nodo puede ser sustituido por Erlang o Golang debido a sus procesos ligeros.

Erlang no es fácil de aprender, por lo que requiere de un gran esfuerzo, pero su comunidad está activa, por lo que puede obtener ayuda, esta es solo la razón por la que las personas prefieren Node.


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 los múltiples núcleos. Sin embargo, no puedo ver nada sobre la configuración de la afinidad del procesador. Podría usar taskset en Linux, pero probablemente debería ser 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 compatibilidad con Windows.

Se ve bien sin embargo.

Editar

Node.js ahora tiene soporte nativo para Windows.