82
#SrijanWW | @srijan NASA, Netflix, Tinder: Digital Transformation & Node.js Daniel Khan | Node.js Technology Lead | @dkhan #SrijanWW | @srijan

[Srijan Wednesday Webinars] NASA, Netflix, Tinder: Digital Transformation and Node.js

Embed Size (px)

Citation preview

#SrijanWW | @srijan

NASA, Netflix, Tinder: Digital Transformation & Node.js

Daniel Khan | Node.js Technology Lead | @dkhan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

Confidential, Dynatrace LLC

We see ourselves as a technology company with a banking license

“”

Michael CorbatPDG de Citi

Nike has many more software developers in Oregon than

apparel designers.*

“”*from Dynatrace Perform 2015

Something Interesting is Happening…

Delivering a great cross-channel experience means making sense out of prolific complexity

Outsourced & Hosted Services

GTS, BT

Legacy & Back-Office

CICS, IMS, zOS, SOAP

3rd Party Web APIs

Social, Ad Serving, Web Analytics, Search,

Maps, CDNs

SaaSSalesforce.com,

Marketo, NetSiute ServiceNow

Web and Mobile Services

iOS, Android, MBaaS, Public Cloud, eCommerce platform

Home-grown Apps

Java, .NET, php, C++, node.js,

Enterprise Applications

SAP, Sharepoint, Oracle Business Suite, lync

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

Node Foundation

Node.js is what the Company Outlaws

use to finally introduce change

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

@dkhan

But Why?

#SrijanWW | @srijan

JavaScript• Easy to learn / easy to find developers• No language boundaries between frontend and backend• Easy to deploy and rollback• Fast development cycles

PayPal built a web app side by side in Node and Javaand the Node version was:

• Built almost twice as fast with fewer people• Written in 33% fewer lines of code• Constructed with 40% fewer files

Source: https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/

#SrijanWW | @srijan

Performance• Google V8 JavaScript Engine• Non-Blocking I/O• Asynchronous event based execution

Node.js shines in modern web-connected applications where it needs togather data from different sources, consolidate it and push it to manyclients in real-time.

Never(!) use it for CPU-bound tasks!

#SrijanWW | @srijan

Common Use Cases

• Authentification and Authorization

• Proxy

• Data Transformation

• Presentation (View Rendering)

#SrijanWW | @srijan

Node.js in a Nutshell

#SrijanWW | @srijan

Node Standard Library

Node Bindings

V8 Thread Pool

Event Loop

JavaScript

C++

libuv

#SrijanWW | @srijan

V8

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

Thread Pool

Event Loop

libuv

#SrijanWW | @srijan

DatabaseBrowser Java ApplicationTraditional approach

#SrijanWW | @srijan

DatabaseBrowser Node.js Application

IO Threads

Nodes approach

Bert Belder at Node Interactive Amsterdam

#SrijanWW | @srijan

Hunting Memory Problems

#SrijanWW | @srijan

#SrijanWW | @srijan

process.memoryUsage(){ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }

#SrijanWW | @srijan

#SrijanWW | @srijan

theThing

someMethod()

longStr

unused()

originalThing

Closure Context

Reference

Root

#SrijanWW | @srijan

#SrijanWW | @srijan

@dkhan

http://bit.ly/1PvijIy

var snap = profiler.takeSnapshot();snap.serialize();

v8-profiler

Delta

Hunting CPU Problems

#SrijanWW | @srijan

#SrijanWW | @srijan

calculateFibonacci();

http://bit.ly/1jQMbBR

profiler.startProfiling(id); profiler.stopProfiling(id);

v8-profiler

#SrijanWW | @srijan

#SrijanWW | @srijan

#SrijanWW | @srijan

NODE_ENV=production

NODE_ENV=development

Blog: http://bit.ly/1flz0Xm

#SrijanWW | @srijan

NODE_ENV=production

NODE_ENV=development

get(‘/routeA’, function(){})

get(‘/routeB’, function(){})

get(‘/routeC’, function(){})

get(‘/routeD’, function(){})

get(‘/routeE’, function(){})

get(‘/routeA’, function(){})

get(‘/routeX’, function(){})

get(‘/^(route|router)\/(.+)’, function(){})

HTTP GET /routeX

get(‘/routeA’, function(){})

get(‘/routeX’, function(){})

O(n)

#SrijanWW | @srijan

Finding the route

Boundary Problems

#SrijanWW | @srijan

1980 20001995 2005 2010 2015

Stakeholders

Backpressure

1000 RPS

Node.js

10 RPS

Ancient Legacy Backend

“No man is an island”or … We need a holistic view.

Browser Webserver Node Java Oracle

Meet Application Performance Monitoring

Complete Transaction CoverageBrowser / Native Mobile Java/

.NET

PerformanceWarehouse

PurePathCollector

DynatraceServer

DynatraceClient

SessionsStore

ExportedSession

OfflineSession Analysis

Web Server/ PHP/ Node.js

C++, VB, ADK

CICS

Mainframez/OS

MQ/ESB

Database

Node.js

#SrijanWW | @srijan

Coming Soon

#SrijanWW | @srijan

#SrijanWW | @srijan

Q&A

Daniel Khan | Node.js Technology Lead | @dkhan | [email protected]