He trabajado con Node.js por un poco de tiempo y me considero bastante bueno con Java. Pero acabo de descubrir Akka y interesó de inmediato en su modelo de actor (por lo que yo entiendo).

Ahora, suponiendo que mis habilidades de JavaScript fueron a la par con mi Scala/Java habilidades, me quiero centrar en la viabilidad de cualquier sistema. Especialmente en los términos de los servicios web.

Fue mi entendimiento de que el Nodo es excelente en el manejo de muchas operaciones simultáneas. Me imagino que un buen Nodo de servicio web para un sistema de gestión de activos que sobresalen en el manejo de muchos usuarios enviar los cambios al mismo tiempo (en un grande y pesado tráfico de la aplicación).

Pero después de leer acerca de los actores en Akka, que las costuras sería excel en la misma cosa. Y me gusta la idea de reducir la obra a tamaño de un bocado. Además, años atrás, me metió en Erlang y cayó en el amor con el paso de mensajes del sistema que utiliza.

Yo trabajo en muchas de las aplicaciones que lidiar con la compleja lógica de negocio y pienso que es el momento para saltar más pesado en uno o el otro. Especialmente actualizar el legado de los Puntales y las aplicaciones C#.

De todos modos, evitando las guerras santas, ¿cómo son los dos sistemas radicalmente diferentes? Parece que ambos están orientados hacia el mismo objetivo. Tal vez Akka la «auto-curación» de la arquitectura de tener una ventaja.

EDITAR

Parece que estoy consiguiendo cerca de votos. Por favor, no tome esta pregunta «qué es mejor, nodo o akka?». Lo que estoy buscando es que las diferencias fundamentales en el evento impulsado por las bibliotecas como Nodo y el actor como la Akka.

  • he votado a decir «desaparecer» a todos aquellos que están cerca de los votantes 🙂
  • ¿puedo preguntarle ¿qué elegir y cómo va con su elección?
InformationsquelleAutor cbmeeks | 2012-12-12

3 Comentarios

  1. 63

    Sin entrar en detalles (sobre el que sé muy poco en el caso de Node.js), la principal diferencia es que Node.js sólo admite la concurrencia sin paralelismo mientras Akka compatible con ambos. Ambos sistemas son completamente controladas por eventos y se puede escalar a grandes cargas, pero la falta de paralelismo hace difícil en Node.js (es decir, el paralelismo es explícitamente codificado por la partida de varios nodos y envío de solicitudes en consecuencia; por lo tanto, es inflexible en el tiempo de ejecución), mientras que es bastante fácil de Akka debido a su sintonizable multi-threaded ejecutores. Dado pequeñas unidades aisladas de trabajo (actor invocaciones) Akka automáticamente paralelizar la ejecución para usted.

    Otra diferencia de importancia es que Akka incluye un sistema para el manejo de la insuficiencia de una manera estructurada (por tener cada actor supervisado por su padre, que es obligatoria), mientras que Node.js se basa en los convenios para que los autores pasan las condiciones de error de devolución de llamada de devolución de llamada. El problema subyacente es que los sistemas asincrónicos no puede utilizar el método estándar de excepciones empleado por síncrono basado en pila de sistemas, debido a que la «vocación» de código se han trasladado a diferentes tareas en el momento de la devolución de llamada se produce un error. Tener el control de errores integrado en el sistema hace que sea más probable que las aplicaciones creadas en ese sistema son robustos.

    El anterior no pretende ser exhaustiva, estoy seguro de que hay muchas más diferencias.

    • ¿Crees que es la mejor manera de utilizar el JUEGO-MARCO de SPRAY o si decide utilizar AKKA para construir web restful de la aplicación?
    • Sí, ambos son buenas opciones. El juego es adecuado como un marco que le da un desarrollo totalmente integrado experiencia, pero no significa que el Juego va a correr la aplicación. Spray es mejor si usted quiere tener solo una delgada RESTO de la capa incrustada en su Akka aplicación. Tenga en cuenta que el Spray se convertirá en akka-http en los próximos meses.
    • Curioso: En coursera.org/course/reactive va a ser utilizado de nuevo akka.io?
    • No, apenas hay tiempo suficiente para cubrir los actores, este sería un buen tema para una secuela de ese curso.
    • Y también señalar, que usted obtenga todos los beneficios de un lenguaje de tipo estático con Scala/Java y no de devolución de llamada infierno en javascript. Java/Scala sería más fácil de depuración de javascript.
    • En términos de paralelismo con el nodo debe ser mencionado que usted puede hacer un fork de procesos en tiempo de ejecución con su clúster core API. Que va a hacer lo que quieres decir por el paralelo de los actores.
    • Node.js las aplicaciones podrían también aplicar paralelismo a través de webworkers consulte npmjs.org/package/webworker-threads
    • A mí me parece que esta respuesta a partir de 2012 es ahora muy de fecha, ya que muchos han cambiado muchas cosas, especialmente con el Nodo desde ellos. La mirada en npmjs.com/package/webworker-threads web a los trabajadores en el Nodo, puede mover el bloqueo de intesivo de trabajo a un parrellel proceso (todos mientras que en el mismo Nodo de proceso).
    • esta respuesta es solo incorrect…node.js utiliza Libuv para I/O. Libuv utiliza un threadpool tanto async e/S y de sync I/O.
    • el punto con nodejs es que no es lo suficientemente maduro, akka proporcionar ya todo. En el nodo que usted necesita para buscar o construir su propio mecanismo nacional de prevención de paquete y todavía no es tan poderoso, que básicamente se pueden ejecutar en un solo hilo, pero que va a decir: hay pm2 hacer más y así sucesivamente. El punto es, el diseño de nodejs no es el mismo de akka, es bastante inmaduro comparar a akka. bueno para mascotas proyecto o micro-servicio de aunque.
    • Para ponerlo simplemente, Akka puede construir fácilmente Node.JS (y ejecutar un único hilo si que se desee), pero el recíproco no es cierto. Además, la gestión de errores es muy superior. Por lo tanto, Akka es un superconjunto, y mucho más poderosos que Node.JS. Akka Arroyos son incluso más poderosos, y así es Akka HTTP.

  2. 8

    Yo no uso Akka, pero parece que es erlang-como pero en java. En erlang todos los procesos son como actores en Akka, tienen buzones de correo, puede enviar mensajes entre ellos, usted tiene los supervisores etc.

    Node.js los usos de la cooperativa de concurrencia. Eso significa que usted tiene de concurrencia cuando se lo permiten (por ejemplo, cuando se llama operación de e /s o de algunos de eventos asíncronos). Cuando usted tiene algún tiempo de operación (calculando algo en bucle de tiempo) todo el sistema de bloques.

    Erlang utiliza preferente de cambio de tarea. Cuando usted tiene el tiempo de bucle, el sistema puede hacer una pausa para ejecutar otra operación y continuar después de algún tiempo. Para la masiva concurrencia Node.js es bueno si usted lo corto de las operaciones. Tanto el apoyo de millones de clientes:
    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/

    En java necesita hilos para hacer cualquier concurrencia, de lo contrario no se puede detener la ejecución dentro de la función erlang (¿realmente erlang pausas entre llamadas a la función, pero esta hapens con todas las funciones). Puede hacer una pausa en la ejecución entre los mensajes.

    • OK, así que suponiendo que necesito para grabar archivos de registro de muchas fuentes diferentes. Cada vez que una aplicación genera una entrada de registro, también necesito enviar una entrada a otra aplicación para la grabación. Supongo que esto podría ser un largo proceso en ejecución debido a que la aplicación podría haber DB tiempos de espera, http fallos, etc. Así, en este ejemplo, un bloqueo en la escritura a la base de datos sería la causa de mi todo el Nodo, el sistema se bloquee? Sería AKKA sufren el mismo problema o soy solo de no obtener la correlación?
    • Tampoco iba a sufrir, porque db de acceso es típicamente implementado como asincrónicas en tales casos. Pero si de alguna manera para hacer sincrónico de la biblioteca haciendo que ambos se congele.
    • Gracias. Estoy tratando muy duro para no convertir esto en un node vs akka debate, pero tengo un verdadero problema que necesito solucionar. Yo diría que mi Java/JavaScript habilidades están bastante cerca, pero tengo muy poca experiencia con el Nodo, y ninguno con AKKA (o Scala). Pero tengo varias aplicaciones (interna por ahora, pero externo posterior) y la gente está buscando maneras para buscar en estas masiva de registros. No se puede utilizar externo de la 3ª parte de las opciones debido a cuestiones de privacidad. Parece que, o bien se encargan de manejar el trabajo. Pero me gusta el mensaje que pasa de AKKA así que voy a explorar eso. Además de Java es empujado más aquí que en JS. Gracias.
    • Si usted necesita la búsqueda de una gran cantidad de troncos, intente buscar en logstash o graylog2.
  3. 6

    No estoy seguro de que esta es una comparación justa para dibujar. He leído esto más como «¿cómo un evented sistema basado en comparar con un actor modelo?». Nodejs puede apoyar un actor modelo como Scala en Akka, o C# en Orleans, en el hecho de retirar nactor, alguien parece estar ya de intentarlo.

    Como cómo un evented sistema vs actor modelo de comparar, me iba a dejar más sabio personas lo describen. Un par de breves puntos por sobre el Actor modelo:

    • Actor modelo es el mensaje en función de
    • Actor modelos tienden a hacer bien con sistemas distribuidos (clusters). Asegúrese de evento en función de los sistemas puede ser distribuido, pero creo que el actor modelo de distribución construida en lo que respecta a la distribución de los cálculos. Una nueva solicitud puede ser enviada a un nuevo actor en otro silo, no está seguro de cómo funcionaría en el caso base.
    • El Actor modelo admite el fracaso, si hey cluster 1 apperas a ser hacia abajo, el observador, en general puede encontrar un silo para hacer el trabajo

    Además, echa un vistazo drama. Es otro nodejs actor de la implementación del modelo.

    • trate de configurar un clúster con nodejs, usted necesita ventana acoplable, kubernetees y la artesanía el sistema distribuido. También intente configurar el uso de más de 1 núcleo en nodejs. Akka es esta pensada para ocuparse de ellos. también la madurez de nodejs en sí mismo, la seguridad, y la forma de código que requieren de otro marco para hacer algo, es un punto que nodejs sí mismo no puede ser utilizado para el gran sistema distribuido, pero sólo en una moda de MSA al menos. Mi opinión de todos modos.

Dejar respuesta

Please enter your comment!
Please enter your name here