hitchhiker's guide to"'serverless" javascript - steven faulkner, bustle

93
The Hitchhiker’s Guide to “Serverless” Javascript Steve Faulkner, Bustle

Upload: nodejsfoundation

Post on 19-Jan-2017

106 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

The Hitchhiker’s Guide to “Serverless” Javascript

Steve Faulkner, Bustle

Page 2: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Steve Faulkner

@southpolesteve

Page 3: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 4: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 5: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 6: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Director of Platform

Engineering

Page 7: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

hype! serverless 101

why? why not?

serverless @ bustle tools

Page 8: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 9: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

The people who are serving websites on Lambda or something are not only doing it wrong, they are wasting money while locking themselves in to an architecture

that doesn't fit their app

- @scrollaway on HN

Page 10: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

doesn’t scale not production ready

too slow too expensive

Page 11: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 12: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

serverless for 99% of user requests

Page 13: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

10-20 million calls per day

Page 14: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

< 200ms

Page 15: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

< $$$

Page 16: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Serverless 101

Page 17: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

there are still servers…

Page 18: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

…but what if we abstracted them away?

Page 19: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

as a Service

Page 20: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Where does the business logic go?

Page 21: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 22: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 23: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Functions as a Service

Page 24: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

run only when needed

Page 25: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

pay only when running

Page 26: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

don’t bother me with details

Page 27: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

request myApp() response

Page 28: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 29: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 30: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 31: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

re:invent happening right

now…

Page 32: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

app.get(‘/‘, sayHello)

function sayHello(req,res){ res.end(‘hello!’) }

Page 33: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

app.get(‘/‘, sayHello)

function sayHello(req,res){ res.end(‘hello!’) }

Page 34: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

app.get(‘/‘, sayHello)

function sayHello(req,res){ res.end(‘hello!’) } Functions

Routing

Page 35: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Functions-aaS +

Routing-aaS

Page 36: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Lambda +

API Gateway

Page 37: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

Lambda

Page 38: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 39: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

write code zip

upload fn()

Page 40: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

node java python

Page 41: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

node shim +

rust/go/haskell

Page 42: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

function(event,context,cb){ cb(null, ‘Hello World’) }

Page 43: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

versioning aliases RAM + CPU logging

non-http events

Page 44: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

API Gateway

Page 45: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 46: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

click around a lot

Page 47: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

cache/throttle authorization

api keys logging/metrics custom domains

ssl swagger import/export

Page 48: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

why serverless?

Page 49: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 50: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

ops

Page 51: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

2011 startup ops: heroku down? get lunch!

Page 52: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

2016 startup ops:have a plan

Page 53: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

serverless ops: LOL! WAT SERVERS?

Page 54: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

serverless ops: LOL! WAT SERVERS?

Page 55: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

#noops

Page 56: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

“serverless” ops: have a plan

Page 57: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

benchmarksfallbacks

load testing monitoring#lessops

Page 58: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale scale

Page 59: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

1 -> 1000 RPS

Page 60: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

1000 -> 0 RPS

Page 61: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

iteration

Page 62: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

single function deployments

Page 63: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

<1s deploys

Page 64: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

$$$$

Page 65: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

events API

Page 66: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

ec2 ~$2500/mo

Page 67: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

lambda api gateway ~$400/mo

Page 68: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

why not?

Page 69: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

lock in

Page 70: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

const express = require(‘express’) const fn = require(./lambda-fn/) const app = express()

app.get('/', (req, res) => { fn.handler(null, null, (err, result) => { res.json(result) }) });

app.listen(3000)

Page 71: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

cold functions

Page 72: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

const data = loadBigData() // Takes 15s

module.exports.handler = function(e,ctx,cb){ processBigData(data, cb) }

Page 73: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

~3.5 hours- Eric @ iopipe.com

Page 74: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

long tasks

Page 75: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

5 min max

Page 76: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

s3(3GB) Lambda

Kinesis Firehose Elasticsearch

Page 77: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

testing

Page 78: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

test in the cloud?

Page 79: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 80: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

frontend

Page 81: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 82: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

API Gateway

S3 Lambda(SSR)

html + js

Page 83: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

backend

Page 84: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 85: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

API Gateway

Lambda

JSON

dynamodb redis

Page 86: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

tools!!!

Page 87: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

serverless framework node-lambda

apex claudia.js

Page 88: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle
Page 89: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

npm install -g shep

Page 90: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

JavaScript Only no CF,terraform

swaggerwebpack

environments

Page 91: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

shep new my-api shep generate endpoint shep deploy production

Page 92: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

coming soon…

shep server shep docs

shep logs —stream

Page 93: Hitchhiker's Guide to"'Serverless" Javascript - Steven Faulkner, Bustle

questions?

Steve Faulkner @southpolesteve