In un precedente post mi ero divertito a giocare un po’ con node.js. Si giocare è il termine giusto, ho provato a leggere qualche tutorial, installarlo e scriverci 10 righe di codice.
node.js logoL’idea che sta alla base del progetto è sicuramente interessante, creare un server performante e totalmente adattabile sulle esigenze del software che stiamo scrivendo. Bello anche il fatto che il server non venga appesantito da moduli che potrebbero essere solo potenzialmente usati: se il codice non utilizza primitive di un modulo, questo non viene caricato. Come dire, rispettiamo al massimo il concetto che “quello che non c’è non si rompe”.

Ma alla base del progetto c’è qualcosa che non mi convince. Partiamo dal presupposto che il server web è il software più esposto ai vari attacchi: è quello che sta proprio in frontiera, tutte le chiamate vengono in prima istanza gestite dal questo software. Se oggi usiamo Apache nella maggior parte delle installazioni, lo facciamo perché il software è sopravvissuto ai vari attacchi e alle varie traversie che, la storia insegna, hanno colpito questa categoria di software. Apache è stato creato a forza di “pezze” (‘a patchy’) messe su NCSA httpd.

Ma in generale tutta l’architettura LAMP ha una storia di successi ed insuccessi, che l’hanno portata ad essere quella che conosciamo tutti. Una della caratteristiche principali di questa architettura è che i vari compiti sono svolti da pezzi diversi di software. Pensiamo al semplice interprete PHP, la storia delle pagine dinamiche è vecchia come l’informatica. Abbiamo iniziato con i CGI e poi con la tecnologia SSI (Server Side Include), e alla fine la tecnologia che si è affermata è quella delle pagine dinamiche
I linguaggi più utilizzati per scrivere pagine dinamiche, oggi, sono: VBScript, Java, PHP e JavaScript.

In tutti questi casi la separazione fra il server web e l’interprete dei comandi è netta. Le ottimizzazioni di performance e di sicurezza sono in carico ad almeno due software diversi. Software scritti da gruppi di lavoro diversi.

In Node.js tutte queste cose sono fuse in un solo software che serve pagine statiche, elabora script… forse gli stiamo dando un po’ troppa responsabilità!

Qual’è il vero guadagno nel mettere in campo questa nuova tecnologia? La scalabilità? Penso che Apache e PHP abbiano dato prova più volte di essere scalabili senza grossi problemi. Le performance? Se Apache vi sembra troppo pesante provate a dare un’occhiata a lightttpd Pensate che il vostro sito web debba servire 10.000 client contemporaneamente (il problema del C10K)? Provate a dare un’occhiata a nginx che serve pagine per sitarelli dalle dimensioni di GitHub, WordPress.com, SourceForge.
L’idea di creare un server web ‘event driven‘ è vincente: nginx ne è la prova. Node.js aggiunge il fatto di implementare in maniera asincrona i meccanismi di lettura e scrittura (Asynchronous I/O).

In definitiva, mi piace Node.js come progetto. Bella l’idea di dare a JavScript un posto un po’ più importante rispetto a quello di abbellire qualche pagina HTML. L’architettura di Node.js è ben pensata e in fatto di scalabilità promette bene. Mi spaventa un po’ la sicurezza intrinseca del prodotto e il fatto che lo studio e l’introduzione di questa nuova tecnologia in ambiente di produzione, non porta nessuna grossa novità.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *