SlideShare a Scribd company logo
Convincing the boss



       Claudio Cicali
    Better Software 2011
Obiettivi


            Claudio Cicali - Better Software 2011
Claudio Cicali
Freelance Web Developer


      claudio.cicali@gmail.com
      @caludio
      http://ccl.me

                      “Fighting Internet Explorer since 1999”




                                     Claudio Cicali - Better Software 2011
?
“EVENT DRIVEN I/O FRAMEWORK”
           (Wikipedia)




                         Claudio Cicali - Better Software 2011
!?
     Claudio Cicali - Better Software 2011
Un interprete JavaScript (Google V8)
                +
         Alcuni componenti
                +
       Codice di collegamento
                =
Un programma che esegue JavaScript
     (server side - no browser)

                             Claudio Cicali - Better Software 2011
JavaScript    Node standard library



    C             Node bindings


                    thread    event
                     pool     loop
             V8
                   (libeio)   (libev)




                                      Claudio Cicali - Better Software 2011
Scopo:
Una piattaforma per sviluppare
     applicazioni di rete
       scalabili e veloci
        in JavaScript


        Ruby Event Machine
      Python Twisted / Tornado

                             Claudio Cicali - Better Software 2011
Creato da
Ryan Dahl
 nel 2009


   Sponsorizzato da Joyvent
       (San Francisco)

                        Claudio Cicali - Better Software 2011
Esecuzione di script




                       Claudio Cicali - Better Software 2011
Interfaccia REPL




                   Claudio Cicali - Better Software 2011
Windows?

                    No.
                  (fino alla 0.5)
Microsoft aiuta ufficialmente - annuncio del 23/6




                                    Claudio Cicali - Better Software 2011
Linee guida dello sviluppo


Integrare componenti esistenti

Massima estensibilità

Guardare sempre avanti



                        Claudio Cicali - Better Software 2011
Integrazione


Motore JavaScript V8 (Google Chrome)

LIBEV (event loop)

LIBEIO (thread pool)




                           Claudio Cicali - Better Software 2011
JavaScript    Node standard library



    C             Node bindings


                    thread    event
                     pool     loop
             V8
                   (libeio)   (libev)




                                      Claudio Cicali - Better Software 2011
Estensibilità



Moduli CommonJS

Possibile utilizzo di librerie C/C++




                             Claudio Cicali - Better Software 2011
Guardare al futuro



Progetto molto “dinamico”:
nessun problema a non garantire
la retrocompatibilità




                          Claudio Cicali - Better Software 2011
Caratteristiche
        tecniche peculiari
Architettura “singolo processo” con event loop
     (no multiprocesso, no multi-thread)

   Qualsiasi operazione di I/O è asincrona
     (file system compreso, of course)

   Supporto nativo per HTTP, DNS, TLS



                                   Claudio Cicali - Better Software 2011
This is the node.js project:

To provide a purely evented,
non-blocking infrastructure to
script highly concurrent programs.




                               Claudio Cicali - Better Software 2011
Caratteristiche conseguenti

  Ottime prestazioni (veloce e scalabile)

  Basso impegno di risorse

  Soffre l’impegno della CPU
  (migliorerà con gli Web Workers)

  La programmazione a eventi
  non è per definizione lineare...


                                    Claudio Cicali - Better Software 2011
(grafico del 2010)
                           Smaller is Better
                 80




                 60
response time (ms)




                                                                  server
                 40                                                  nginx
                                                                     thin
                                                                     tornado
                                                                     node


                 20




                      50   100        150      200   250        300
                                 concurrency




                                                           Claudio Cicali - Better Software 2011
Caratteristiche indirette
  Ben documentato

  Community molto attiva
  ~5000 utenti su google groups
  ~2000+ domande su StackOverflow
  ~600 persone su #freenode

  832 moduli, so far
  Ehi, è JavaScript!


                           Claudio Cicali - Better Software 2011
Ambiente reale
Browser                     Server
                  Socket.io        Node
    Script X
                                  Script Y



               Ambiente di test
Test suite                    Server
     Node         Socket.io        Node
    Script X                      Script Y


                                       Claudio Cicali - Better Software 2011
Che tipi di applicazione?

Servizi di rete
(HTTP, proxy, gateway, messaging)

 Backend per API JSON

   Real time (“soft”). Con Socket.io

    Streaming (up & down)

      Siti “one page”

        Command line tools

         Bot
                             Claudio Cicali - Better Software 2011
Non è (ancora?) adatto per...


 Applicazioni che fanno uso intensivo di CPU

 Medie applicazioni web




                               Claudio Cicali - Better Software 2011
Moduli disponibili
Database: MySQL, Sqlite, PostgreSQL, Oracle

NoSQL: CouchDB, Mongo, Redis

Servizi: Static file server, caching

Rete: SSH, xmpp, ftp, nntp, imap...

Middleware: Cookie, Session, Connect

Templating: HAML, EJS, jsdom

JS puro: Markdown, Less.js (e YUI, jQuery)...

http://bit.ly/btcc-modules
http://bit.ly/btcc-npm
                                       Claudio Cicali - Better Software 2011
Moduli? Anche troppi!




                  Claudio Cicali - Better Software 2011
Ad alto livello

Express (web framework)

    Calipso (CMS)




                      Claudio Cicali - Better Software 2011
Strumenti per lo sviluppo

 npm: package manager

 node inspector: debugger

 supervisor / forever: script manager




                             Claudio Cicali - Better Software 2011
Claudio Cicali - Better Software 2011
Debugger




           Claudio Cicali - Better Software 2011
“The guys that are getting paid the big bucks to
deliver scalable solutions aren’t up at night
feverishly rewriting their systems in Node.
They’re doing what they’ve always done:
measuring, testing, benchmarking, thinking hard,
keeping up with the academic literature that
pertains to their problems.”

                                    -- Alex Payne


     http://al3x.net/2010/07/27/node.html


                                     Claudio Cicali - Better Software 2011
Domande?

claudio.cicali@gmail.com

  Follow me: @caludio



                        Claudio Cicali - Better Software 2011

More Related Content

Node.js – Convincing the boss

  • 1. Convincing the boss Claudio Cicali Better Software 2011
  • 2. Obiettivi Claudio Cicali - Better Software 2011
  • 3. Claudio Cicali Freelance Web Developer claudio.cicali@gmail.com @caludio http://ccl.me “Fighting Internet Explorer since 1999” Claudio Cicali - Better Software 2011
  • 4. ? “EVENT DRIVEN I/O FRAMEWORK” (Wikipedia) Claudio Cicali - Better Software 2011
  • 5. !? Claudio Cicali - Better Software 2011
  • 6. Un interprete JavaScript (Google V8) + Alcuni componenti + Codice di collegamento = Un programma che esegue JavaScript (server side - no browser) Claudio Cicali - Better Software 2011
  • 7. JavaScript Node standard library C Node bindings thread event pool loop V8 (libeio) (libev) Claudio Cicali - Better Software 2011
  • 8. Scopo: Una piattaforma per sviluppare applicazioni di rete scalabili e veloci in JavaScript Ruby Event Machine Python Twisted / Tornado Claudio Cicali - Better Software 2011
  • 9. Creato da Ryan Dahl nel 2009 Sponsorizzato da Joyvent (San Francisco) Claudio Cicali - Better Software 2011
  • 10. Esecuzione di script Claudio Cicali - Better Software 2011
  • 11. Interfaccia REPL Claudio Cicali - Better Software 2011
  • 12. Windows? No. (fino alla 0.5) Microsoft aiuta ufficialmente - annuncio del 23/6 Claudio Cicali - Better Software 2011
  • 13. Linee guida dello sviluppo Integrare componenti esistenti Massima estensibilità Guardare sempre avanti Claudio Cicali - Better Software 2011
  • 14. Integrazione Motore JavaScript V8 (Google Chrome) LIBEV (event loop) LIBEIO (thread pool) Claudio Cicali - Better Software 2011
  • 15. JavaScript Node standard library C Node bindings thread event pool loop V8 (libeio) (libev) Claudio Cicali - Better Software 2011
  • 16. Estensibilità Moduli CommonJS Possibile utilizzo di librerie C/C++ Claudio Cicali - Better Software 2011
  • 17. Guardare al futuro Progetto molto “dinamico”: nessun problema a non garantire la retrocompatibilità Claudio Cicali - Better Software 2011
  • 18. Caratteristiche tecniche peculiari Architettura “singolo processo” con event loop (no multiprocesso, no multi-thread) Qualsiasi operazione di I/O è asincrona (file system compreso, of course) Supporto nativo per HTTP, DNS, TLS Claudio Cicali - Better Software 2011
  • 19. This is the node.js project: To provide a purely evented, non-blocking infrastructure to script highly concurrent programs. Claudio Cicali - Better Software 2011
  • 20. Caratteristiche conseguenti Ottime prestazioni (veloce e scalabile) Basso impegno di risorse Soffre l’impegno della CPU (migliorerà con gli Web Workers) La programmazione a eventi non è per definizione lineare... Claudio Cicali - Better Software 2011
  • 21. (grafico del 2010) Smaller is Better 80 60 response time (ms) server 40 nginx thin tornado node 20 50 100 150 200 250 300 concurrency Claudio Cicali - Better Software 2011
  • 22. Caratteristiche indirette Ben documentato Community molto attiva ~5000 utenti su google groups ~2000+ domande su StackOverflow ~600 persone su #freenode 832 moduli, so far Ehi, è JavaScript! Claudio Cicali - Better Software 2011
  • 23. Ambiente reale Browser Server Socket.io Node Script X Script Y Ambiente di test Test suite Server Node Socket.io Node Script X Script Y Claudio Cicali - Better Software 2011
  • 24. Che tipi di applicazione? Servizi di rete (HTTP, proxy, gateway, messaging) Backend per API JSON Real time (“soft”). Con Socket.io Streaming (up & down) Siti “one page” Command line tools Bot Claudio Cicali - Better Software 2011
  • 25. Non è (ancora?) adatto per... Applicazioni che fanno uso intensivo di CPU Medie applicazioni web Claudio Cicali - Better Software 2011
  • 26. Moduli disponibili Database: MySQL, Sqlite, PostgreSQL, Oracle NoSQL: CouchDB, Mongo, Redis Servizi: Static file server, caching Rete: SSH, xmpp, ftp, nntp, imap... Middleware: Cookie, Session, Connect Templating: HAML, EJS, jsdom JS puro: Markdown, Less.js (e YUI, jQuery)... http://bit.ly/btcc-modules http://bit.ly/btcc-npm Claudio Cicali - Better Software 2011
  • 27. Moduli? Anche troppi! Claudio Cicali - Better Software 2011
  • 28. Ad alto livello Express (web framework) Calipso (CMS) Claudio Cicali - Better Software 2011
  • 29. Strumenti per lo sviluppo npm: package manager node inspector: debugger supervisor / forever: script manager Claudio Cicali - Better Software 2011
  • 30. Claudio Cicali - Better Software 2011
  • 31. Debugger Claudio Cicali - Better Software 2011
  • 32. “The guys that are getting paid the big bucks to deliver scalable solutions aren’t up at night feverishly rewriting their systems in Node. They’re doing what they’ve always done: measuring, testing, benchmarking, thinking hard, keeping up with the academic literature that pertains to their problems.” -- Alex Payne http://al3x.net/2010/07/27/node.html Claudio Cicali - Better Software 2011
  • 33. Domande? claudio.cicali@gmail.com Follow me: @caludio Claudio Cicali - Better Software 2011

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n