¿Por qué Facebook no reescribe su back-end en Node.JS?

Si bien la representación en el lado del servidor ciertamente tiene sus beneficios, de ninguna manera son … universales. Entonces la pregunta es: ¿su aplicación debería ser universal?

Y la respuesta es: probablemente no . Las aplicaciones universales introducen una gran cantidad de complejidad. Requieren que pase más tiempo en mantenimiento y menos en funciones. Y esto sin mencionar la limitación de requerir que su aplicación sea servida por Node.js.

Pero Facebook es universal

Sí, y usted (probablemente) no es Facebook. Lo que tiene sentido para ellos no necesariamente tiene sentido para ti. ¿Tienes millones de usuarios y miles de ingenieros?

Edición 21 de marzo: Dan Abramov tuiteó que Facebook en realidad no usa la representación de servidor basada en Nodo. Y aunque Instagram utiliza la representación del lado del servidor para SEO, encuentran que no tiene un impacto medible en la experiencia del usuario.

Pero mi kit de inicio React ya es universal

Genial, para que pueda ahorrar algunas horas mientras configura las cosas. Pero también perderá unas horas descubriendo qué hace realmente todo el código adicional. Y eso es antes de que pierdas semanas en mantener una aplicación Node.js completamente superflua.

Pero las aplicaciones universales son mejores

Claro, te dejaré tener este. Las aplicaciones universales se cargan más rápido, admiten más dispositivos y proporcionan una mejor experiencia de usuario. Pero todo esto tiene un costo de oportunidad.

¿Qué otras características podría haber agregado con el tiempo que pasó en su aplicación universal? ¿Qué otros ajustes de rendimiento podrías haber hecho? ¿Cuánto antes podría haber enviado realmente?

Donde gana PHP: código base profundo

La web está llena de código PHP. Las plataformas más populares para crear sitios web (WordPress, Drupal, Joomla) están escritas en PHP. Las plataformas no solo son de código abierto, sino también la mayoría de sus complementos. Hay código PHP en todas partes, y está esperando que descargue, modifique y use según sus necesidades.

Donde gana Node: el código más nuevo significa características más modernas

Claro, hay miles de excelentes archivos PHP de código abierto, pero algunos son complementos de WordPress de 8 años con la esperanza de que alguien los descargue. ¿Quién quiere pasar horas, días o semanas jugando con el código que no se ha actualizado en años? Los complementos de Node.js no solo son más nuevos, sino que se crearon con pleno conocimiento de los últimos enfoques arquitectónicos. Fueron creados por programadores que entienden que las aplicaciones web modernas deberían enviar la mayor parte de la inteligencia al cliente.

Donde gana PHP: simplicidad (más o menos)

PHP no tiene mucho: algunas variables y funciones básicas para hacer malabares con cadenas y números. Es una capa delgada que no hace mucho, excepto mover los datos del puerto 80 a la base de datos y viceversa. Eso es lo que se supone que debe hacer. Una base de datos moderna es una herramienta mágica, y tiene sentido dejar el trabajo pesado. PHP es la cantidad correcta de complejidad para un trabajo que no se supone que sea complejo.

Donde gana Node: Complejidad de cierres y más

JavaScript puede tener muchas pequeñas idiosincrasias que enloquecen, pero en su mayor parte es un lenguaje moderno que tiene una sintaxis moderna y algunas características útiles como los cierres. Puede reconfigurarlo y extenderlo fácilmente, haciendo posibles bibliotecas potentes como jQuery. Puede pasar funciones como objetos. ¿Por qué limitarse?

Donde gana PHP: el nuevo código lo ayuda a ponerse al día

Si eres un programador que quiere hacer más que interactuar con una base de datos y formatear los resultados, ahora puedes hacer más con PHP sin ocultarte. HHVM de Facebook agrega soporte para Hack, un lenguaje completo lleno de características modernas como anotaciones de tipo, genéricos y expresiones lambda. Usar esto limita su código a ejecutarse solo en el HHVM, pero eso no es lo peor del mundo. Es muy rápido.

Donde gana Node: docenas de opciones de idiomas

Si los usuarios de PHP están contentos de tener acceso a Hack, deberían considerar mudarse al mundo de Node.js porque muchos lenguajes principales pueden compilarse de manera cruzada para ejecutarse en JavaScript. Hay opciones bien conocidas como Java, C # o Lisp y docenas de otras como Scala, OCaml y Haskell. Incluso hay regalos para los amantes nostálgicos de BASIC o Pascal. Esta lista de Jeremy Ashkenas es bastante completa.

Deberías leer Cosas que nunca deberías hacer, Parte I

Reescribir una aplicación que funcione en otro idioma solo porque sienta que suele ser una mala decisión comercial para cualquier empresa. Un gran equipo de personas necesita muchos meses para hacerlo, cuando podrían estar mejorando la funcionalidad de la aplicación.

A los usuarios no les importa en qué idioma está escrita su aplicación. Ni siquiera pueden decir qué idioma utilizó. Los usuarios se preocupan por las características y el rendimiento de la aplicación.

El lenguaje de programación no es una característica funcional de una aplicación.

El rendimiento tiene poco que ver con el lenguaje de programación, se trata más de la arquitectura de la aplicación. Si la arquitectura es buena o mala es independiente del lenguaje en el que está escrita.

La elección del lenguaje de programación se realiza principalmente por el bien de la productividad del desarrollador. Si Facebook tiene un gran equipo de ingenieros de software que saben cómo ser productivos con PHP (o Hack, su bifurcación de PHP), entonces deberían usar ese lenguaje. Si le dice a ese equipo que cambie a otro idioma, serán menos productivos y menos expertos escribiendo un buen código en ese idioma.

Eventualmente, pueden convertirse en expertos en Node.js, o puede reemplazarlos a todos por desarrolladores de Node.js, pero de cualquier manera, eso tomaría años. Es una mala idea sacar a todo su equipo de desarrollo de software de su zona productiva durante años, por alguna vaga promesa de que Node.js es un lenguaje “mejor”.

Ese es un argumento subjetivo en el mejor de los casos. Además, cuando el equipo finalmente reescriba su back-end de Facebook en Node.js, probablemente se preguntará: “¿por qué Facebook no reescribe su back-end Node.js en Rust?”

Esa es una tarea bastante costosa y que requiere mucho tiempo.

Primero, los empleados de Facebook deben estar familiarizados con el nodo js. Si no, deberían dominarlo y eso tomaría mucho tiempo.

En segundo lugar, deberían volver a escribir todos y cada uno de los servicios de back-end posibles en el nodo js e integrarlos. Esto podría llevarles aún más tiempo para hacerlo.

Entonces, inventaron una solución para hacer que el sitio sea lo más rápido posible sin reemplazar sus códigos con otro idioma de vez en cuando. Utilizan su herramienta interna llamada “Hip hop” que convierte sus códigos php en C ++ sobre la marcha. Ningún otro lenguaje puede ejecutarse más rápido que C ++.

Hacen uso de otra herramienta interna (ahora de código abierto) “Apache thrift” siempre que sea posible para que algunos servicios específicos se ejecuten mucho más rápido escribiéndolos en una variedad de lenguajes de programación diferentes como erlang y muchos más.

notas al pie:

  • HipHop para PHP – Wikipedia
  • Apache Thrift – Wikipedia

Estás haciendo las preguntas equivocadas aquí. No se trata realmente de por qué Facebook no reescribe su en . Hace 3 a 5 años, haría la misma pregunta, excepto reemplazar NodeJS con Ruby.

Imágenes en solo 3 a 5 años sus opiniones pueden cambiar. Tal vez en los próximos años sería Swift, quién sabe. La verdadera pregunta debería ser “ ¿Por qué Facebook usó PHP? ” O cualquiera de esos tipos de preguntas causa una parte importante cuando se está construyendo software para tomar decisiones. Y cuando tratas un lenguaje como una herramienta y un concepto, el resultado sería sorprendente. No hay lenguaje malo, solo cómo está acostumbrado al máximo. Los fundadores de Facebook usaron PHP porque tenían confianza y sabían cómo usar el lenguaje como herramienta.

No hay necesariamente ninguna ventaja técnica que obtener al mover la mayoría de los sitios de PHP a Node.js.

La principal ventaja de usar Node es que usa el mismo lenguaje en el front-end y el back-end. Eso es ideal para desarrolladores front-end que ya están familiarizados con Javascript pero no conocen los lenguajes de desarrollo de back-end y solo necesitan un back-end simple que sirva los datos de una base de datos a su marco de front-end. También funciona particularmente bien para la comunicación de socket en tiempo real, por lo que podría imaginar que Facebook posiblemente lo use para su sistema de chat.

Eso no significa que Node sea siempre la mejor opción para todos los sitios web. El diseño de bloqueo de un solo subproceso significa que debe usar devoluciones de llamada y / o promesas para cualquier código que no se ejecute instantáneamente, lo que agrega complejidad si el back-end tiene que hacer mucho trabajo. Y las características orientadas a objetos de Javascript todavía son relativamente limitadas.

Originalmente, Facebook desarrolló su propia versión modificada de PHP (Hack), pero PHP tomó las innovaciones logradas por Facebook e incorporó ideas similares en el reciente lanzamiento de PHP 7 que logró duplicar aproximadamente la velocidad de ejecución de la versión anterior (que ya era bastante rápido), junto con la adición de algunas características nuevas. Los sitios como Facebook usan PHP porque sigue siendo una de las mejores opciones para muchos tipos de sitios web porque continúa evolucionando y mejorando a un ritmo impresionante. Y la explosión de popularidad de Laravel también está contribuyendo a su clasificación continua como una opción común para los nuevos sitios web.

La pregunta podría ser ” ¿Cuánto tiempo y dinero gastarán para pasar a X desde PHP? “Es discutible en términos de la

  • Elección tecnológica de X e, g, Node.js, Go u otra cosa
  • Gestión de recursos humanos para capacitación, reclutamiento y retención.
  • Costo de oportunidad de hacer otra cosa en su lugar

Existen dos motivos principales para esto:

  1. Facebook ha invertido una gran cantidad de tiempo para crear la plataforma en php, y tendrían que volver a escribir el código. No sé si obtendrían alguna mejora importante del rendimiento.
  2. Han súper optimizado el sistema, tanto en el lado del hardware como del software.

(Solo para agregar un ejemplo práctico después de todas esas excelentes respuestas)

Por la misma razón, no reconstruye su casa cuando sale un cemento nuevo (posiblemente mejor).

  • Tomaría mucho tiempo y dinero
  • Podrías usar ese tiempo y dinero para mejorar tu casa
  • El nuevo cemento puede ser mejor para algunas casas, pero potencialmente no para el suyo.

En este ejemplo, Facebook es más como una empresa constructora, y usted pregunta por qué no reconstruyen todas sus casas anteriores con ese cemento nuevo.

Tal vez algún día lo reescribirán en otro idioma, tal vez sea Node, tal vez no.

Para que una empresa tan grande como Facebook reescriba su base de código ( toneladas de trabajo), los beneficios tienen que superar con creces todo el trabajo requerido. Todo dependerá de los números.

Múltiples razones, las dos más importantes que se me ocurren:

  1. Hay mucho, y sería una gran inversión.
  2. NodeJS no sería la mejor opción para un back-end API a esa escala, por ejemplo, Elixir sería mucho mejor.

Es bastante seguro que han invertido mucho tiempo reescribiendo la base de código de back-end en varios idiomas, no solo PHP, incluido C ++.

No son una empresa de nueva creación que tiene 1 recurso para realizar el desarrollo web Full stack y tampoco tienen prisa por construir algo de la noche a la mañana.

¿Por qué Google no reescribe su algoritmo de búsqueda principal con VBScript?

No me molestaré en responder esa pregunta; en cambio, dejaré tus instintos para guiarte.

La respuesta principal a su pregunta es “¿por qué deberían hacer tal cosa? ¿Qué ganan?