node and azure

Post on 28-Jan-2015

129 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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, JAVA, .NET)

• Focus on SaaS

•Married with 3 kids

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

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

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

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

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(event, listener)

• emitter.removeListener(event, listener)

• emitter.removeAllListeners([event])

• emitter.setMaxListeners(n)

• emitter.listeners(event)

• emitter.emit(event, [arg1], [arg2], [...])

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.json

• JSON file describing package

13

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 somethingnext();}

• Configured with use() method

• Order IS important

17

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.query for querystring parameters

• req.body for POST, must use bodyParser middleware

21

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 invocation in function

• function x(path[, locals], callback)

• Same format Express uses

30

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

Using Consolidate

• Assign file extension to viewengine

• 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 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

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

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

• execute SQL using the .NET SQL Client

• supports CRUD operations

36

37

SQL DRIVER

• node-sqlserver

• Developed by Microsoft

• Not a lot of activity on GitHub. (38 open issues)

• Not production ready

37

38

SQL with EDGE.JS

38

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

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 on windows

• Easily fixed (winser npm module)

• Not good at serving static content

• Good for development, though nodemon is better choice41

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

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

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-Hosting

46

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

• 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

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

Deploying to azure

npm install azuregit 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/#/

53

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)

• Node (O’reilly)

• WebSites

• nodejs.org

• howtonode.org

• codeschool.com

• education.10gen.com

56

LinkedIn - HTML5 Lessons from LinkedIn using Node.js by Kiran Prasadhttps://www.youtube.com/watch?v=hMd45Ij2DYQ

linkedin.com/techtalks

57

Webstorm

• Based onIntelliJ IDEA

• Great if you likeReSharper

• Windows, OS XLinux

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 Node

• Node projects, debugger, packages as references, REPL

• IntelliSense, Syntax highlighting

• Created by redgate

• Private beta (http://www.visualnode.info/)59

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 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

Questions?

62

top related