1
Node.js and Azure
1
Building Applications for the Web
2
Jason Gerard
•Director of Product Development, PaySpan Inc. (www.payspan.com)
•Developing software for 15 years (VB, COM...
3
What is node.js
•Created by Ryan Dahl in 2009
•Platform for asynchronous JavaScript
•Event based programming
• Event loo...
4
Architecture
• Written in C++ and JavaScript
• 20k lines of C++, 2k lines of JavaScript
• Built with Chrome’s V8 JavaScr...
5
Events vs. Threads
• Threads
• Each request gets its own thread
• Thread can’t process another request until it’s done w...
6
Why JavaScript?
•Ubiquitous
• Everyone knows it
•“WORA”
• Stole Java’s name and beat it at it’s own game
•Front end deve...
7
ASYNCHRONOUS JAVASCRIPT
• Same programming model as web browser
• Wait for events
• Non Blocking IO
• Uses Callbacks
7
8
Callbacks
• “Everything” is a callback
• Only one thread, don’t block it
• Building Blocks of Async Programming
8
9
Consuming Events
• Example with sockets
9
10
Event Emitters
• EventEmitter class
• emitter.addListener(event, listener)
• emitter.on(event, listener)
• emitter.once...
11
Event Example
11
12
Nodemon
• Monitors for file changes
• Automatically restarts node process
• nodemon app.js
12
13
Package Management
• npm
• command for creating, installing, updating packages
• npm test (runs test scripts)
• package...
14
npm
• npm install
• npm install module_name
• npm install -g module_name (don’t forget to sudo)
14
15
package.json
15
16
Web Development
• Node’s bread and butter
• Basic HTTP server right in the box
16
17
Connect
• Extends HTTP support
• Adds concept of “middleware”
• function (req, res, next){
//do something
next();}
• Co...
18
Middleware Example
18
19
Express
• Framework built on top of connect
• Provides view engine facilities
• Routes
• Many helper functions
19
20
Express Routing
• Inspired by Sinatra (ruby)
• /users
• /users/:id
• regex
20
21
Express Routing
• app.VERB() where verb is an HTTP verb (get, post, etc...)
• app.all() execute for all verbs
• req.que...
22
Error Handling
• Basic middleware
• function handler(err, req, res, next)
22
23
View Engines
• EJS
• Jade
• Mustache
• Hogan
• Dust
• Swig
• Flatiron Plates
23
24
EJS
24
25
Jade
25
26
Mustache
26
27
Mustache Output
27
28
Mustache derivatives
• Hogan (builded with express, built by twitter)
• Handlebars
28
29
Flatiron Plates
• Created by nodejitsu
• Pure HTML binding
29
30
Consolidate
• Provides support for many view engines
• Exposes each view engine as Express middleware
• Wraps each view...
31
Consolidate supported Template Engines
• atpl
• dust
• eco
• ejs
• haml
• haml-coffee
• handlebars
• hogan
• jade
• jaz...
32
Using Consolidate
• Assign file extension to view
engine
• specify views folder
• render() instead of write()
32
33
Socket IO
• Realtime web apps
• Broad browser support
• Internet Explorer 5.5+
• Safari 3+
• Google Chrome 4+
• Firefox...
34
Socket.IO vs SignalR
• Socket.IO
• Broader browser support
• More fallback transports
• JavaScript for client and
Serve...
35
Data Access
• Drivers exists for most databases
• Mongo
• CouchDB
• SQL Server
• MySQL
• PostgreSQL
• unixODBC
35
36
SQL Server
• node-sqlserver
• Microsoft Provided module
• https://github.com/WindowsAzure/node-sqlserver
• edge.js
• ex...
37
SQL DRIVER
• node-sqlserver
• Developed by Microsoft
• Not a lot of activity on
GitHub. (38 open
issues)
• Not producti...
38
SQL with EDGE.JS
38
39
Other options (SQL Server)
• node-tds
• TDS implementation for node (Pure JS)
• tedious
• TDS implementation for node
•...
40
Deployment Models
• node process
• nginx
• iisnode
• cloud
40
41
Node Process Direct
• Simplest option
• Doesn’t reload changed files
• requires restart
• Not a service out of the box ...
42
nginx
• Extremely fast HTTP server
• Great for static content
• Proxy Dynamic Calls to Node
• Much faster than Apache
•...
43
iisnode
• Created by Tomas Janczuk
• Native IIS module
• Powers Node on Windows Azure
• Windows only (if that’s not obv...
44
Configuration
44
45
performance
• Great when serving static content with application
• Large overhead for pure dynamic app
45
46
Cloud
• Heroku
• Nodejitsu
• Engine Yard
• Windows Azure
• Longer list at https://github.com/joyent/node/wiki/Node-Host...
47
Windows Azure
• MS Deploy
• Git deploy
• Same config as iisnode
47
48
Node azure sdk
• npm install azure-cli -g
• Windows, linux, OS X
48
49
SDK Features
• Tables
• create and delete tables
• create, query, insert, update, merge, and delete entities
• Blobs
• ...
50
SDK Features Continued
• Storage Queues
• create, list, and delete queues, and work with queue metadata
• create, get, ...
51
Deploying to azure
npm install azure
git commit -m "My first Node app"
git push azure master
•IT’S THAT EASY!
51
52
Azure SDK Example
52
53
Using .NET with Node
• Edge.js
• Also created by Tomas Janczuk
• Supported on Azure
• http://tjanczuk.github.io/edge/#/...
54
Edge.js
54
55
Edge.js
55
56
Resources
• Learning Node
• Books
• Node.js in Action (Manning)
• Professional Node.js (Wrox)
• Pro Node.js (Apress)
• ...
57
Webstorm
• Based on
IntelliJ IDEA
• Great if you like
ReSharper
• Windows, OS X
Linux
57
58
webmatrix
• IntelliSense
• Support for Jade and EJS
• LESS and Sass support
• Coffeescript support
58
59
Visual Studio
• Node.js tools for Visual Studio
• Node projects, debugger, npm console
• Syntax highlighting
• Visual N...
60
Cloud9 IDE
• Built with node ;-)
• Runs in the
browser
• jsfiddle for node
60
61
FInal Thoughts
• Node is for IO intensive applications
• Web Applications
• 1000s of concurrent connections
• NOT for C...
62
Questions?
62
Upcoming SlideShare
Loading in...5
×

Node and Azure

4,028

Published on

Node.js and Azure presentation for Code on the Beach August 2013

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
4,028
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • c10k - Ten Thousand Clients - solves problem through async IO
  • Libeio uses a threadpool to provide an async version of the POSIX IO libraries
  • Starbucks analogy Events: Order and then step aside until order is called Walmart - Threads: Order and wait until food is ready, no one else can order on that register until done Event LOOP - talk about it
  • Only the IO is non blocking. Compute bound operations (like calculating PI) will still block. Web apps shouldn’t be compute bound though.
  • Show example with setTimeout and c# (sleep.js and sleep.cs)
  • events1.js -- use telnet, not nc
  • addListener and on are synonymous once - removes listener the first time the event is received all methods return the emit so chaining is possible
  • events2.js MyEventClass.js
  • console example
  • http.js example
  • Connect has a router now
  • Supports filters
  • if empty was false, the last <p> tag would be gone
  • db.getUsers() - Remember, everything is a callback
  • Example... socketio express app
  • Unless otherwise noted below, all measurements were taken at server CPU utilization > 90%. The configuration involved one quad core Windows 2008 server with node.js v0.6.6 and iisnode v0.1.13. Depending on scenario, one or two WCAT client machines were required to saturate the server. Clients and server were connected to the same switch but were not on private network.   [1] See test code . In this scenario node.js application returns a simple “hello, world” plaintext response to an HTTP GET request. This is the only scenario that uses a single node.exe instance (both self-hosted and IIS hosted). Given the single-threaded nature of node.exe, the multi-core server CPU is never fully utilized. However, the node.exe process has consistently utilized > 23% of CPU, which corresponds to almost full utilization of a single core of the quad-core server.   [1.1] Although in this scenario iisnode achieved better throughput than self-hosted node.exe, it was accomplished with almost twice as large CPU utilization (~60% in case of iisnode compared to ~30% in case of node.exe).   [2] See test code . This scenario uses the same node.js “hello world” application as scenario #1, but it utilizes 4 node.exe processes to saturate the CPU on the quad core server. In case of self-hosting node.exe, the built-in cluster functionality is employed. In case of iisnode, the built-in capability to spawn and route to multiple node.exe processes per application is used.   [3] See test code . This scenario simulates using node.js to serve a web site using express - one of the most popular MVC frameworks for node. The web site consists of an HTTP endpoint that dynamically generates HTML that displays a randomly generated order information using the jade rendering engine. The HTML refers to a static CSS file. As part of each WCAT transaction, one request is made to the HTML endpoint that generates dynamic content and the another to get the static CSS file. In case of self-hosted node.js application, the static file is served by the express framework using the connect.static middleware (which is built into express and a most likely mechanism to be used by someone serving static content from express). In case of IIS, requests for static content are actually not handled by iisnode at all – a URL rewrite module causes that request to be handled by the native static file handler (which plays to the “side by side with other content types” benefits of iisnode).   [4] See test code . This scenario simulates using node.js to implement web APIs: HTTP endpoints that generate dynamic content. In this particular case we are reusing the order generation and HTML rendering endpoint from scenario #3, without including a request for static CSS file in the WCAT transaction.
  • Node and Azure

    1. 1. 1 Node.js and Azure 1 Building Applications for the Web
    2. 2. 2 Jason Gerard •Director of Product Development, PaySpan Inc. (www.payspan.com) •Developing software for 15 years (VB, COM, JAVA, .NET) •Focus on SaaS •Married with 3 kids
    3. 3. 3 What is node.js •Created by Ryan Dahl in 2009 •Platform for asynchronous JavaScript •Event based programming • Event loop fundamental structure •DIRTy • Data Intensive Real Time •Solution for c10k problem
    4. 4. 4 Architecture • Written in C++ and JavaScript • 20k lines of C++, 2k lines of JavaScript • Built with Chrome’s V8 JavaScript Engine • Libev • Native Event Loop • Libeio • uses POSIX threads to provide async IO • Evcom • Stream socket library built on libev • udns
    5. 5. 5 Events vs. Threads • Threads • Each request gets its own thread • Thread can’t process another request until it’s done with current • 2 MB stack per thread • Context Switching • Events • Each request is added to a queue • Processed by single thread • Only one thread, no context switching 5
    6. 6. 6 Why JavaScript? •Ubiquitous • Everyone knows it •“WORA” • Stole Java’s name and beat it at it’s own game •Front end developers can easily transition to server development • Already used to event based programming
    7. 7. 7 ASYNCHRONOUS JAVASCRIPT • Same programming model as web browser • Wait for events • Non Blocking IO • Uses Callbacks 7
    8. 8. 8 Callbacks • “Everything” is a callback • Only one thread, don’t block it • Building Blocks of Async Programming 8
    9. 9. 9 Consuming Events • Example with sockets 9
    10. 10. 10 Event Emitters • EventEmitter class • emitter.addListener(event, listener) • emitter.on(event, listener) • emitter.once(event, listener) • emitter.removeListener(event, listener) • emitter.removeAllListeners([event]) • emitter.setMaxListeners(n) • emitter.listeners(event) • emitter.emit(event, [arg1], [arg2], [...])
    11. 11. 11 Event Example 11
    12. 12. 12 Nodemon • Monitors for file changes • Automatically restarts node process • nodemon app.js 12
    13. 13. 13 Package Management • npm • command for creating, installing, updating packages • npm test (runs test scripts) • package.json • JSON file describing package 13
    14. 14. 14 npm • npm install • npm install module_name • npm install -g module_name (don’t forget to sudo) 14
    15. 15. 15 package.json 15
    16. 16. 16 Web Development • Node’s bread and butter • Basic HTTP server right in the box 16
    17. 17. 17 Connect • Extends HTTP support • Adds concept of “middleware” • function (req, res, next){ //do something next();} • Configured with use() method • Order IS important 17
    18. 18. 18 Middleware Example 18
    19. 19. 19 Express • Framework built on top of connect • Provides view engine facilities • Routes • Many helper functions 19
    20. 20. 20 Express Routing • Inspired by Sinatra (ruby) • /users • /users/:id • regex 20
    21. 21. 21 Express Routing • app.VERB() where verb is an HTTP verb (get, post, etc...) • app.all() execute for all verbs • req.query for querystring parameters • req.body for POST, must use bodyParser middleware 21
    22. 22. 22 Error Handling • Basic middleware • function handler(err, req, res, next) 22
    23. 23. 23 View Engines • EJS • Jade • Mustache • Hogan • Dust • Swig • Flatiron Plates 23
    24. 24. 24 EJS 24
    25. 25. 25 Jade 25
    26. 26. 26 Mustache 26
    27. 27. 27 Mustache Output 27
    28. 28. 28 Mustache derivatives • Hogan (builded with express, built by twitter) • Handlebars 28
    29. 29. 29 Flatiron Plates • Created by nodejitsu • Pure HTML binding 29
    30. 30. 30 Consolidate • Provides support for many view engines • Exposes each view engine as Express middleware • Wraps each view invocation in function • function x(path[, locals], callback) • Same format Express uses 30
    31. 31. 31 Consolidate supported Template Engines • atpl • dust • eco • ejs • haml • haml-coffee • handlebars • hogan • jade • jazz 31 • jqtpl • JUST • liquor • mustache • QEJS • swig • templayed • toffee • underscore • walrus • whiskers
    32. 32. 32 Using Consolidate • Assign file extension to view engine • specify views folder • render() instead of write() 32
    33. 33. 33 Socket IO • Realtime web apps • Broad browser support • Internet Explorer 5.5+ • Safari 3+ • Google Chrome 4+ • Firefox 3+ • Opera 10.61+ • iPhone Safari • iPad Safari • Android WebKit • WebOs WebKit 33 • Falls back to next best transport • WebSocket • Adobe® Flash® Socket • AJAX long polling • AJAX multipart streaming • Forever Iframe • JSONP Polling
    34. 34. 34 Socket.IO vs SignalR • Socket.IO • Broader browser support • More fallback transports • JavaScript for client and Server 34 • SignalR • Less Browser support • Less transports • .NET code on server
    35. 35. 35 Data Access • Drivers exists for most databases • Mongo • CouchDB • SQL Server • MySQL • PostgreSQL • unixODBC 35
    36. 36. 36 SQL Server • node-sqlserver • Microsoft Provided module • https://github.com/WindowsAzure/node-sqlserver • edge.js • execute SQL using the .NET SQL Client • supports CRUD operations 36
    37. 37. 37 SQL DRIVER • node-sqlserver • Developed by Microsoft • Not a lot of activity on GitHub. (38 open issues) • Not production ready 37
    38. 38. 38 SQL with EDGE.JS 38
    39. 39. 39 Other options (SQL Server) • node-tds • TDS implementation for node (Pure JS) • tedious • TDS implementation for node • odbc • Good ole’ ODBC • uses unixODBC library • Windows Support? 39
    40. 40. 40 Deployment Models • node process • nginx • iisnode • cloud 40
    41. 41. 41 Node Process Direct • Simplest option • Doesn’t reload changed files • requires restart • Not a service out of the box on windows • Easily fixed (winser npm module) • Not good at serving static content • Good for development, though nodemon is better choice 41
    42. 42. 42 nginx • Extremely fast HTTP server • Great for static content • Proxy Dynamic Calls to Node • Much faster than Apache • Poor windows support • current version considered beta • “high performance and scalability should not be expected” 42
    43. 43. 43 iisnode • Created by Tomas Janczuk • Native IIS module • Powers Node on Windows Azure • Windows only (if that’s not obvious you’re at the wrong conference) 43
    44. 44. 44 Configuration 44
    45. 45. 45 performance • Great when serving static content with application • Large overhead for pure dynamic app 45
    46. 46. 46 Cloud • Heroku • Nodejitsu • Engine Yard • Windows Azure • Longer list at https://github.com/joyent/node/wiki/Node-Hosting 46
    47. 47. 47 Windows Azure • MS Deploy • Git deploy • Same config as iisnode 47
    48. 48. 48 Node azure sdk • npm install azure-cli -g • Windows, linux, OS X 48
    49. 49. 49 SDK Features • Tables • create and delete tables • create, query, insert, update, merge, and delete entities • Blobs • create, list, and delete containers, work with container metadata and permissions, list blobs in container • create block and page blobs (from a stream, a file, or a string), work with blob blocks and pages, delete blobs • work with blob properties, metadata, leases, snapshot a blob • HD Insight • create, list and delete HDInsight clusters 49
    50. 50. 50 SDK Features Continued • Storage Queues • create, list, and delete queues, and work with queue metadata • create, get, peek, update, delete messages • Service Bus • Queues: create, list and delete queues; create, list, and delete subscriptions; send, receive, unlock and delete messages • Topics: create, list, and delete topics; create, list, and delete rules • Notification hubs: create hubs, register for messages, send messages • Azure SQL Database • create, list and delete Azure SQL Database servers, databases and firewall rules • Service Runtime • discover addresses and ports for the endpoints of other role instances in your service • get configuration settings and access local resources • get role instance information for current role and other role instances • query and set the status of the current role 50
    51. 51. 51 Deploying to azure npm install azure git commit -m "My first Node app" git push azure master •IT’S THAT EASY! 51
    52. 52. 52 Azure SDK Example 52
    53. 53. 53 Using .NET with Node • Edge.js • Also created by Tomas Janczuk • Supported on Azure • http://tjanczuk.github.io/edge/#/ 53
    54. 54. 54 Edge.js 54
    55. 55. 55 Edge.js 55
    56. 56. 56 Resources • Learning Node • Books • Node.js in Action (Manning) • Professional Node.js (Wrox) • Pro Node.js (Apress) • Node (O’reilly) • WebSites • nodejs.org • howtonode.org • codeschool.com • education.10gen.com 56 LinkedIn - HTML5 Lessons from LinkedIn using Node.js by Kiran Prasad https://www.youtube.com/watch?v=hMd45Ij2DYQ linkedin.com/techtalks
    57. 57. 57 Webstorm • Based on IntelliJ IDEA • Great if you like ReSharper • Windows, OS X Linux 57
    58. 58. 58 webmatrix • IntelliSense • Support for Jade and EJS • LESS and Sass support • Coffeescript support 58
    59. 59. 59 Visual Studio • Node.js tools for Visual Studio • Node projects, debugger, npm console • Syntax highlighting • Visual Node • Node projects, debugger, packages as references, REPL • IntelliSense, Syntax highlighting • Created by redgate • Private beta (http://www.visualnode.info/) 59
    60. 60. 60 Cloud9 IDE • Built with node ;-) • Runs in the browser • jsfiddle for node 60
    61. 61. 61 FInal Thoughts • Node is for IO intensive applications • Web Applications • 1000s of concurrent connections • NOT for Compute bound operations • Don’t try to calculate PI and expect a responsive server • Fast development, easy deployment • No more edit, build, wait, refresh -- just edit and refresh! 61
    62. 62. 62 Questions? 62
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×