Tenemos una gran aplicación de Ruby on Rails (25 millones de usuarios mensuales), nuestra gerencia decidió reescribir en Node.js, ¿estoy loco?

24

Por favor dime si:

  • ¡Node.js hará que nuestro sitio sea más rápido!
  • Node.js consumirá menos recursos del servidor, ¡podemos ahorrar dinero!
  • ¡Node.js nos hará más productivos!
  • Node.js significa que podemos compartir el código JavaScript del lado del cliente y del servidor.

Para aclarar, estamos reescribiendo un servidor frontend, que hablará con nuestra aplicación Ruby on Rails existente como API. Mientras tanto, refactorizaremos nuestra aplicación Ruby on Rails en servicios.

Más detalles sobre la arquitectura existente:

  • Memcached para el almacenamiento en caché de parciales HTML
  • Redis para sesión y almacenamiento en caché de datos estructurados
  • MySQL maestro único, esclavos múltiples
    • Hay una tabla grande que acepta muchas escrituras (imagine una encuesta)
    • De lo contrario, se lee principalmente.
  • MongoDB para algunos metadatos
  • Ruby on Rails 3.0
  • nginx y unicornio
usuario88487
fuente
33
sheesh, todos estos lenguajes hipster. Una aplicación de PHP bien escrita se escalará fácilmente, las herramientas tradicionales funcionan, no dejes que esos hipsters te digan lo contrario.
Darknight
55
La pregunta debería ser más similar a "¿Las mejoras ahorrarán suficiente dinero al negocio para que valga la pena?" Puede ahorrar dinero en 5 años, pero la reescritura es costosa y requiere mucho tiempo, a menos que su código sea un desastre horrible y horrible, creo que sus gerentes están enojados
Mikey C
44
Si se están considerando reescrituras, también podría considerar mover su front-end a javascript del lado del cliente, lo que significa que ya no tendría un servidor front-end dinámico, solo archivos estáticos.
Joeri Sebrechts
11
@Darknight tenga en cuenta que en un momento PHP era el lenguaje hipster, y que las personas que mostraban que podía implementarse en productos exitosos promovieron su adopción, mientras que los desarrolladores web de Perl se burlaban de los hipsters de PHP.
99
Me sorprende mucho que nadie haya mencionado el artículo de Joel Spolsky. Cosas que nunca debes hacer . No digo que todas las reescrituras sean malas, pero estoy de acuerdo con @MikeyC en que deben abordarse con extrema precaución.
Dan Pichelman el

Respuestas:

22

La mayoría de las preguntas que usted hace no tienen respuesta sin contexto, y son más o menos discutibles dado que la gerencia ya ha tomado la decisión por usted ... a menos que esté preguntando '¿debería dejar de fumar y encontrar un nuevo trabajo ante todo este cambio? ?

Si lo vas a superar, te recomiendo que leas esto en esta publicación sobre el tema: Cómo sobrevivir a una reescritura desde cero sin perder la cordura .

Recientemente comencé a reescribir un poco de lógica de servidor en node.js. La razón principal es que actualmente está escrito en .NET y queremos migrar fuera de los entornos de MS en el futuro.

Mis experiencias hasta ahora han sido positivas, tendrás una curva de aprendizaje inicial con toda la capacidad de no bloquearla, pero una vez que pasas eso, es realmente divertido codificarlo ... ¡Lo sé, DIVERTIDO!

Sin embargo, tiene un lado oscuro, cada hombre y su perro que han realizado un desarrollo front-end con JavaScript, y eso sería todo desarrollador front-end, espero, se emociona un poco cuando mencionas que node.js es 'JavaScript del lado del servidor 'sin embargo, eso no significa que los desarrolladores front-end tendrán la experiencia necesaria para escribir buenas aplicaciones del lado del servidor.

Una cosa que debe tener en cuenta es que un error fatal derribará toda la aplicación debido a su naturaleza no roscada, por lo que las apuestas son un poco más altas y debe verificar y atrapar explícitamente todo.

Para aquellos que han hecho tanto al frente como al revés, y disfrutan de ambos, no tener que cambiar los contextos mentales de los idiomas del front-end al back-end es una verdadera ventaja que creo que en última instancia impulsará la productividad en nuestro equipo en el futuro.

dave.zap
fuente
"Por una cosa que has considerado es que un error fatal derribará toda la aplicación debido a su naturaleza no roscada, por lo que las apuestas son un poco más altas y tienes que verificar explícitamente y atrapar todo" - Esa sería mi preocupación.
tentimes
Sí, mi punto principal con esa declaración fue que los desarrolladores de front end solo no son particularmente quisquillosos cuando se trata de manejo de excepciones. ¡Vamos, ya casi es 2017!
dave.zap
8

Bueno, no creo que reescribir la aplicación fuera una buena idea a menos que tuviera un rendimiento deficiente. Para responder tu pregunta:

  1. Node.js no es mágico. Su aplicación tiene una gran cantidad de usuarios, por lo que no hay forma de estar seguro de que la hará más rápida.

  2. Bueno, sí, Node.js consume menos recursos del servidor. Entonces, no solo puede ahorrar dinero en recursos, sino que también puede hacer más con los existentes. Esto se debe principalmente a la naturaleza de un solo subproceso de Node.js. No hay gastos generales de subprocesos adicionales.

  3. Nuevamente, Node.js no es mágico. Habiendo dicho eso, puede haber algo de verdad en eso. Node.js tiene una comunidad muy activa que ha creado cientos de módulos para cada tarea posible. Por lo tanto, es muy probable que la mayor parte del trabajo se haya realizado por usted. Solo necesitas unir las piezas.

  4. Teóricamente sí. Como Node.js es JavaScript, puede compartir código entre el cliente y el servidor. Pero no sé exactamente qué es lo que se compartirá. No he escrito ningún código que sea reutilizable en un cliente. Las cosas que hacemos en el servidor generalmente no tienen nada que ver con el cliente. Más importante para mí es la falta de cambio de contexto. Me resulta más fácil codificar tanto en el cliente como en el servidor en un solo idioma.

Dado que Node.js es de un solo subproceso, a menos que esté configurado explícitamente para hacerlo, no puede aprovechar múltiples CPU .

Echa un vistazo a los comentarios también. Proporcionan una buena idea del funcionamiento de Node.js.

Akshat Jiwan Sharma
fuente
16
¿Menos recursos debido a un solo hilo? ¿Qué crees que harían esos hilos extra?
Joe
@ Joe, por lo que tengo entendido, se sumarán. En el nodo js, ​​es una buena práctica deshacerse de una solicitud lo más rápido posible, ya sea completándola de una vez o retomándola la próxima vez. Para ser sincero, el nodo js es la única tecnología para la que he realizado aplicaciones de producción. Por lo tanto, es posible que no sea la mejor persona para compararla con otras tecnologías del lado del servidor. Es por eso que me he abstenido de hacer comparaciones y simplemente pongo lo que creo que sé sobre el nodo js en mi respuesta.
Akshat Jiwan Sharma
77
Sí, un solo hilo ciertamente limita el uso de recursos, porque el servidor solo puede hacer una cosa a la vez en el bucle de eventos. También limita el uso del servidor, ya que solo puede hacer una cosa a la vez. Es muy importante citar características (subprocesos simples) y ventajas y desventajas en lugar de solo ventajas y desventajas. Node.js es adecuado para algunos usos, pero es una mala idea para otros. Cuando su servidor de nodo de subproceso único tiene problemas de capacidad, es posible que deba agregar otra instancia de nodo. Ahora tiene un servidor multiproceso.
Joe
Veo lo que quieres decir. Actualizaré la respuesta en breve (leer después de algunas investigaciones)
Akshat Jiwan Sharma
10
No se trata solo de CPU. La razón por la cual es importante manejar cada solicitud lo más rápido posible (en un sistema de subproceso único sin otra concurrencia) es porque el servidor no puede atender múltiples solicitudes a la vez, por lo que cada solicitud tiene que esperar hasta que haya terminado de manejar todo Las solicitudes ante ella. La concurrencia, bien hecha, significa menos espera. El uso de subprocesos no es inherentemente una pérdida de rendimiento, y el subproceso único (de forma predeterminada o no) no es una ventaja de rendimiento.
Peter Hosey