62
The Netflix API Platform for Server-Side Scripting

The Netflix API Platform for Server-Side Scripting

Embed Size (px)

Citation preview

Page 1: The Netflix API Platform for Server-Side Scripting

The Netflix API Platform for Server-Side Scripting

Page 2: The Netflix API Platform for Server-Side Scripting

The risks of modifying running production servers

Problem identified: new servers aren’t coming up healthy!

Ugh! There’s a problem. Errors from API are up.

Page 3: The Netflix API Platform for Server-Side Scripting

Escalating customer impact

Stream starts per second more and more off.

Expected value

Actual value

Page 4: The Netflix API Platform for Server-Side Scripting

Resolving the issue

Finally root-caused!Now restarting all unhealthy servers.

Back to normal!

Page 5: The Netflix API Platform for Server-Side Scripting

Resolving the issue

Stream starts per second also back to normal.

Expected value

Actual value

Page 6: The Netflix API Platform for Server-Side Scripting

The Netflix API

Page 7: The Netflix API Platform for Server-Side Scripting

Access to Netflix mid-tier services

Page 8: The Netflix API Platform for Server-Side Scripting

Today’s system

Page 9: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

Network boundary

API Server JVM

Today’s system (simplified)

Page 10: The Netflix API Platform for Server-Side Scripting

What we need

Page 11: The Netflix API Platform for Server-Side Scripting

What we need

Page 12: The Netflix API Platform for Server-Side Scripting

What we need

Page 13: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

scripts

scripts

scripts

scripts

...

scripts

scripts

scripts

scripts

Network boundary

API Server JVM

~700 active

Today’s architecture

groovy

Page 14: The Netflix API Platform for Server-Side Scripting

Flexibility for devices

[...]

Device1VideoCommon. formatKidsSeason (apiRequest,[...], imageUrl)

[...]

[...]

Device2Common.formatAllSeasons([...])

[...]

[...]

dataPublishingService.getShowFeedbackBuilder(user, video)

[...]

Page 15: The Netflix API Platform for Server-Side Scripting

What we need

Page 16: The Netflix API Platform for Server-Side Scripting

Developer Velocity: Decoupled deployments of versions

n+3i+4

i+1i+2i+3

i

n+2

n+1

n

k+1

k j

j+1

l

Page 17: The Netflix API Platform for Server-Side Scripting

What we need

Page 18: The Netflix API Platform for Server-Side Scripting

Challenge #1: Resiliency

Page 19: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

script

script

...

script

script

Network boundary

API Server JVM

Resiliency in today’s system

Strong resiliency with Hystrix

What about resiliency on this side?

groovy

Page 20: The Netflix API Platform for Server-Side Scripting

Example: memory usage

Periodic cleanup

New upload increases memory usage.

Page 21: The Netflix API Platform for Server-Side Scripting
Page 22: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

script

script

...

script

script

Network boundary

API Server JVM

1-2 years ago

few, small scriptsfewer uploads

groovy

Page 23: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

script/app

script/app

script/app

script/app

...

script/app

script/app

script/app

script/app

Network boundary

API Server JVM

Today

script/app

script/app

~700 more complex scripts/apps,10-50 uploads per day

groovy

Page 24: The Netflix API Platform for Server-Side Scripting

Streaming Hours Per Year in Billions

Page 25: The Netflix API Platform for Server-Side Scripting

Changing risk profile

Page 26: The Netflix API Platform for Server-Side Scripting

Lack of process isolation is a growing risk.

Page 27: The Netflix API Platform for Server-Side Scripting

Some possible mitigations

Page 28: The Netflix API Platform for Server-Side Scripting

Velocity vs. Resiliency

Page 29: The Netflix API Platform for Server-Side Scripting

Moving toward our ideal API:What will change

Page 30: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

node script

node script

...

node script

node script

Network boundary API Server JVM

The (near) future

node.js

process isolation

Page 31: The Netflix API Platform for Server-Side Scripting

Why containers?

Page 32: The Netflix API Platform for Server-Side Scripting

Isolated failures: scripts don’t affect each other(usually)

API

Temporarily unavailable!

Page 33: The Netflix API Platform for Server-Side Scripting

Independent autoscaling

API

Page 34: The Netflix API Platform for Server-Side Scripting

Fast startup

Page 35: The Netflix API Platform for Server-Side Scripting

Challenge #2: Great developer experience

Page 36: The Netflix API Platform for Server-Side Scripting

Step-through-debugging (today)

Page 37: The Netflix API Platform for Server-Side Scripting

Docker Machine

localproject

Local Container

live reload file watcher

docker build / run

File watcher agent

Proxy

NetworkAgent

Local development (future)

node-inspector

debugger

Page 38: The Netflix API Platform for Server-Side Scripting

Run-time debugging/optimization (today)

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

script

script

script

script

...

script

script

script

script

Network boundary

API Server JVM

script

script

Problems hard to root cause, hard to measure/optimize performance

groovy

Page 39: The Netflix API Platform for Server-Side Scripting

Script → API interaction (today)

API

device server-side script

device client

Page 40: The Netflix API Platform for Server-Side Scripting

Script → API interaction (future)

API

device server-side script

Page 41: The Netflix API Platform for Server-Side Scripting

Platform for device teams

Page 42: The Netflix API Platform for Server-Side Scripting

Default configuration

Page 43: The Netflix API Platform for Server-Side Scripting

Default configuration

Page 44: The Netflix API Platform for Server-Side Scripting

Default configuration

Page 45: The Netflix API Platform for Server-Side Scripting

Titus

ATLAS

NeWT: Netflix Workflow Toolkit (CLI)

Page 46: The Netflix API Platform for Server-Side Scripting

Corresponding UI

VersioningEasy access to instances

Rollback

Page 47: The Netflix API Platform for Server-Side Scripting

Initial impressions

Page 48: The Netflix API Platform for Server-Side Scripting

Client AClient BClient CClient E

Netflix Microservicesnode script

Network boundary API Server JVM

First end-to-end implementation and shadow traffic

Page 49: The Netflix API Platform for Server-Side Scripting

Client AClient BClient CClient E

Netflix Microservicesnode script

Network boundary API Server JVM

Problem isolation (ex: memory leak)

Memory leak makes RSL blow up. Clearer idea of where the problem is.

Page 50: The Netflix API Platform for Server-Side Scripting

node.js

Client AClient BClient CClient E

Netflix Microservicesnode script

Network boundary API Server JVM

Problem isolation (ex: memory leak)

Same with node script.

Page 51: The Netflix API Platform for Server-Side Scripting

Request tracing: clearer picture of fan-out

Page 52: The Netflix API Platform for Server-Side Scripting

Js(mostly)

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

node script

node script

...

node script

node script

Network boundary API Server JVM

node.js

How not to compromise what we’re good at

Page 53: The Netflix API Platform for Server-Side Scripting

What we need

Page 54: The Netflix API Platform for Server-Side Scripting
Page 55: The Netflix API Platform for Server-Side Scripting

Other Netflix talks at QCon New York

Page 56: The Netflix API Platform for Server-Side Scripting

Thank you!

Page 58: The Netflix API Platform for Server-Side Scripting

Script management

Page 59: The Netflix API Platform for Server-Side Scripting

Outtakes

Page 60: The Netflix API Platform for Server-Side Scripting

Limited device-server chattiness

Page 61: The Netflix API Platform for Server-Side Scripting

Operational insights

Page 62: The Netflix API Platform for Server-Side Scripting

Js(mostly)

java

Client AClient BClient C

Client A

Client YClient Z

...

...Netflix Microservices

node script

node script

...

node script

node script

Network boundary API Server JVM

node.js

process isolation