Prólogo

En la última década, Node.js ha pasado de ser una novedad a convertirse en la plataforma de facto para nuevas aplicaciones. Durante ese periodo, he tenido la oportunidad de ayudar a miles de desarrolladores de Node.js de todo el mundo a orientarse y encontrar su camino hacia el éxito. He visto utilizar Node.js para todo. En serio: alguien incluso construyó un sistema operativo de bajo nivel arrancable con Node.js.

En el SFNode meetup que creé en San Francisco, tenemos un ponente estrella que ha hablado más que nadie. Lo has adivinado: Thomas Hunter II, el autor de este libro. Aunque puedes hacer cualquier cosa con Node.js, hay algunas cosas realmente prácticas que se benefician especialmente de hacerlas con Node.js. En el mundo actual en el que prima la nube, la mayoría de los sistemas se han convertido en sistemas distribuidos. En este libro y en las innumerables charlas que he tenido el placer de ver dar a Thomas en SFNode y en todo el mundo, reina el pragmatismo. Este libro está repleto de consejos prácticos y probados por la experiencia que te llevarán de donde estás hoy a donde necesitas estar mañana.

El lenguaje JavaScript nos permite, como desarrolladores, crear a la velocidad del pensamiento. Requiere poca ceremonia, y el código que escribimos suele ser lo suficientemente sencillo como para que escribirlo a mano sea más eficiente que generarlo. Esta hermosa simplicidad de JavaScript encaja perfectamente con Node.js. Node, como nos referimos a él con frecuencia, es intencionadamente mínimo. Ryan Dahl, su creador, escribió Node para construir un servidor de aplicaciones que fuera un orden de magnitud más fácil y rápido de lo que cualquiera estaba acostumbrado. Los resultados han superado incluso nuestros sueños más salvajes. La facilidad y sencillez de Node.js te permite crear, validar e innovar de formas que simplemente no eran posibles hace 10 años.

Antes de tener Node.js, era un desarrollador de pila completa que utilizaba JavaScript para crear experiencias interactivas basadas en la web y Java para proporcionar API y servicios de backend. Me deleitaba con el flujo creativo de JavaScript, y luego tenía que cambiar completamente de marcha para traducirlo todo a un modelo de objetos para Java. ¡Qué pérdida de tiempo! Cuando encontré Node.js, por fin pude iterar de forma eficiente y eficaz tanto en el cliente como en el servidor. Literalmente lo dejé todo, vendí mi casa y me mudé a San Francisco para trabajar con Node.js.

Construí sistemas de agregación de datos, plataformas de redes sociales y videochat, todo con Node.js. Luego ayudé a Netflix, PayPal, Walmart e incluso a la NASA a aprender a utilizar la plataforma con eficacia. Las API de JavaScript rara vez eran el mayor reto de la gente. Lo que más confundía a la gente era el modelo de programación asíncrona. Si no entiendes las herramientas que utilizas, ¿cómo puedes esperar obtener los mejores resultados con ellas? La programación asíncrona requiere que pienses un poco más como un sistema informático que como un guión lineal de acciones consecutivas. Esta asincronía es el latido de un buen sistema distribuido.

Cuando Thomas me pidió que revisara el índice de este libro para asegurarme de que lo había cubierto todo, me di cuenta de que la sección sobre escalado empieza con una visión general del módulo de clúster. Inmediatamente lo señalé como un área de preocupación. Cluster se creó para permitir la concurrencia de una única instancia que puede exponerse a un único puerto de un sistema. He visto a gente nueva en Node.js tomar esto y correr con la suposición de que, como la concurrencia puede ser deseable, cluster es la herramienta adecuada para sus necesidades. En los sistemas distribuidos, la concurrencia a nivel de instancia suele ser una pérdida de tiempo. La suerte quiso que Thomas y yo estuviéramos en la misma página, y esto dio lugar a una charla encantadora en SFNode por parte de nuestro mejor presentador.

Así que, mientras construyes tu aptitud como desarrollador de Node.js y como desarrollador de sistemas distribuidos, tómate tu tiempo para comprender las limitaciones y oportunidades de tu sistema. Node.js tiene unas capacidades de E/S increíblemente eficaces. He visto cómo los sistemas distribuidos se desbordaban cuando se eliminaban los servicios antiguos y se sustituían por implementaciones de Node.js. Estos sistemas actuaban como limitadores de velocidad naturales para los que se habían construido los servicios descendentes. Añadir un simple proxy Node.js puede solucionar la mayoría de los problemas hasta que se actualicen o sustituyan los servicios descendentes.

La facilidad de desarrollo con Node te permitirá probar muchas cosas. No tengas miedo de desechar código y empezar de nuevo. El desarrollo con Node.js prospera en la iteración. Los sistemas distribuidos nos permiten aislar y encapsular la lógica a nivel de servicio, que luego podemos equilibrar en carga para validar el rendimiento de todo el sistema. Pero no te conformes con mi palabra. Las páginas de este libro te muestran cómo hacerlo de la forma más eficaz.

Diviértete y comparte lo que aprendas por el camino.

Get Sistemas distribuidos con Node.js now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.