Upload
aspenware
View
3.175
Download
0
Embed Size (px)
DESCRIPTION
Node.js is one of the newest and most exciting open web technologies to surface in the last few years. This presentation explores considerations for business stakeholders and technology decision-makers looking to switch their existing stacks to Node.js. Mike examines questions like: What is Node.js? What are the benefits from using Node.js? What are the drawbacks? Who is using this technology today? In a world of people demanding responsive, real-time applications, Node.js makes a compelling argument for change. Mike includes case studies from companies like LinkedIn and Yammer to illustrate the business cases that make sense. About Node.js: Node.js (Node) , the brain child of Ryan Dahl, was released in 2009 when he worked for Joyent, Inc. Node is one of the most hyped technologies to arrive on the web development scene, though it is also one of the most misunderstood. So what is Node? Is it a programming language like Python, Java, or C++? Is it an application framework like Django, Rails, or Symphony? Is it maybe some type of middleware that can be plugged into existing web stacks like Memcached or RabbitMQ? Actually, it is none of the above. Node is simply a set of JavaScript language bindings to Google's powerful V8 engine. This begs the question: "what is a language binding and what is V8?"
Citation preview
6000 Greenwood Plaza Blvd Suite 110 Greenwood Village, CO 80111 303.798.5458 www.aspenware.com
Business Considerations for Node.js Applications
Michael Filbin [email protected]
Agenda… • Definitions • Introduction to Node.js • Problems it attempts to solve • Drawbacks and challenges to adoption • Use cases and case studies • Hello World example (if time) • Summary and conclusion
Business Considerations for Node.js Applications
Who Am I? • Consultant at Aspenware Internet Solutions Inc. • Background in Open Source technologies • Currently JavaScript engineer at Pearson • Member of Linux and Free Software foundations • Co-founder of Gogy Inc.
Business Considerations for Node.js Applications
Who Are You?
Business Considerations for Node.js Applications
Acknowledgements
Business Considerations for Node.js Applications
Key Terms…
• API: A collection of publically exposed methods to facilitate use of a library
• Asynchronous: The execution of a function and its result are not mutually exclusive.
• JavaScript Runtime: Optimizes and executes JavaScript code
• Language Binding: Uses of one programming language to ‘wrap’ a library in another
• Callback: A reference to executable code that is passed as an argument to a function.
• I/O Operations: Operations that involve reading/writing data through some time of interface.
• Procedural Programming: Programs are expressed in terms of steps (procedures) to be carried out
• Event-driven Programming: Execution of a program is carried out in response to events.
• Blocking Process: A process that prevents the continuation of execution until it returns.
Brief Introduction to Node Business Considerations for Node.js Applications
What Is Node?
Business Considerations for Node.js Applications
What does Node do? • API for interacting with low-level system libraries
asynchronously • Leverages features inherent in the JavaScript language • Intends to manage concurrency, latency, parallelism
Business Considerations for Node.js Applications
1 L1 Cache 3 L2 Cache 14 RAM 250 Hard Disk 41000000 Network 240000000
3 14 250
41000000
240000000
0
50000000
100000000
150000000
200000000
250000000
300000000 Processor C
ycles
Visualizing Latency
Business Considerations for Node.js Applications
Web Application Life Cycle?
Business Considerations for Node.js Applications
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Write to log file
Traditional Scaling Model…
Business Considerations for Node.js Applications
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Route Request to Controller Action
Make Database Query
Operate on results
Respond to Request
Operate on results
Resource Limited Scaling
Business Considerations for Node.js Applications
Load Balancer
Web Server
App Server
App Server
Database Search Engine
Resource Limited Scaling
Business Considerations for Node.js Applications
Node’s Execution Model • Using an event loop
• Event occurs (emitted) • Non-I/O operations return immediately • I/O operations defer to libeio or libuv • I/O interrupt received and callback is executed • Data returned to client
RESTful Web Services with Node.js
Event 1
…
Event N
libeio
libuv
FS Network Crypto
All on a single thread on a single processor
Event Loop Analogy
RESTful Web Services with Node.js
Node Architecture…
V8 RunLme
libeio
libuv
Async DNS
OpenSSL
Business Considerations for Node.js Applications
Scaling Node Applications:
Business Considerations for Node.js Applications
Load Balancer / Reverse Proxy
Database
App Server
Search Engine
Content Delivery Network (CDN)
Managing Node Dependencies • ‘Requiring’ external libraries is handled though the
CommonJS module pattern. • 3rd party libraries distributed though NPM package
management tool • Packages can be installed globally or locally • Application dependencies can be expressed in a manifest
file (package.json)
Business Considerations for Node.js Applications
Including Dependencies
Business Considerations for Node.js Applications
<script type="text/javascript" src="scripts/myscript.js"></script>
Including Dependencies
Business Considerations for Node.js Applications
// System-wide (global) libraries/modules // Stored in /usr/local/lib/node_modules var path = require('path'); var fileSystem = require('fileSystem') // Local (project) libraries // ./node_modules var restify = require('restify'); var nconf = require('nconf'); // Including scripts from somewhere in // the file system var MyModel = require("./lib/models/MyModel");
Use Cases for Node.js • Creating REST APIs (JSON APIs) • Creating chat servers or messaging clients • Single-page RIA • Data Streaming
Business Considerations for Node.js Applications
Challenges to Adoption
Business Considerations for Node.js Applications
Evolving API
Business Considerations for Node.js Applications
• (2012.01.06 – 24.10.2012): 46 Releases! • Minor, even release number is stable • Minor, odd release number is development
Windows Support • Was written originally for *NIX systems • Node core largely supports WIN, 3rd party libs… not so
much • Build tools recently switched to better support WIN
Business Considerations for Node.js Applications
Error Handling & Debugging • Asynchronous code breaks call stacks • For synchronous code, you must handle exceptions
carefully (try/catch) • For asynchronous code, you must pass errors around to
callbacks
Business Considerations for Node.js Applications
Example:
Business Considerations for Node.js Applications
outerFunction(arg1, arg2, function (callback){ if(!arg1 || !arg2){ return callback(new Error("Are you forgetting something?")); } else { return innerFunction(ar1, arg2, function (error, data){ if(error){ callback(error); } else { try{ var json = JSON.parse(data) callback(null, json); } catch(error){ callback(error); } } }) }
});
Asynchronous Code is Complex • Deeply nested callbacks can become difficult to read &
maintain
Business Considerations for Node.js Applications
Single Threaded
Business Considerations for Node.js Applications
Entire Stack Must Be Non-Blocking
Business Considerations for Node.js Applications
Case Studies
Business Considerations for Node.js Applications
Linkedin • Originally build on Rails Application Framework • Need to composite service calls for the client • Persistent socket connections • Much smaller code base (~50Kb when minified) • Reduce the amount of memory leak (from mongrel) • Benchmarked at 20X faster • Using 10% original resource (from 30 servers to just 3! &
300MB or RAM to just over 30MB) • More Stable
Business Considerations for Node.js Applications
Node.js ApplicaLon MongoDB Database
Linkedin Mobile Architecture
Credit: Kirin Prasad, Linkedin Mobile Engineer Business Considerations for Node.js Applications
iOS Android Mobile Web
Client Libraries
Mobile Server
Bg. Queue Tracking Data
Service Data Service
Other Process
Yammer • Similar use case as LinkedIn (cross-domain proxy) • JSON Out/JSON In
Business Considerations for Node.js Applications
Resources: • Concurrent Programming for Scalable Web Architectures, Benjamine Erb.
http://berb.github.com/diploma-thesis/community/042_serverarch.html • Benchmark Comparisons:
http://shootout.alioth.debian.org/u64/benchmark.php?test=all&lang=nodejs&lang2=fsharp
Business Considerations for Node.js Applications
Conclusion
Business Considerations for Node.js Applications
Summation • Node.js leverages an evented programming model
to handle concurrency and availability • Because Node does not rely on threads/processes to
scale, it can use considerably fewer resources • Fewer resources means lower cost • More concurrent users means greater revenue
potential • Because node support the real-time web, you can
improve your user’s experience
Business Considerations for Node.js Applications
6000 Greenwood Plaza Blvd Suite 110 Greenwood Village, CO 80111 303.798.5458 www.aspenware.com
Michael Filbin Michael Filbin, Software Developer [email protected]