[jsdc 2016] codex: conditional modules strike back

199

Click here to load reader

Upload: alex-liu

Post on 19-Jan-2017

2.346 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: [JSDC 2016] Codex: Conditional Modules Strike Back

Alex Liu

A N E T F L I X E N G I N E E R I N G O R I G I N A L

@[email protected]

codex

conditionaL ModuleS Strike bacK

Page 2: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 3: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 4: [JSDC 2016] Codex: Conditional Modules Strike Back

#netflixeverywhere

Page 5: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 6: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 7: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 8: [JSDC 2016] Codex: Conditional Modules Strike Back

contentsI. The Problem

II. Codex: Conditional Bundling

III. Scaling for Netflix

IV. Looking to the Future

Page 9: [JSDC 2016] Codex: Conditional Modules Strike Back

i. the Problem

Page 10: [JSDC 2016] Codex: Conditional Modules Strike Back

It's all about building JS bundles.

Page 11: [JSDC 2016] Codex: Conditional Modules Strike Back

// bundle.js var a = require('a'); var b = require('b');

bundle.js

Page 12: [JSDC 2016] Codex: Conditional Modules Strike Back

// bundle.js var a = require('a'); var b = require('b');

bundle.js

Page 13: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'bundle.js' ];

bundle.js

home.jsprofile.jsfeed.js album.js signup.js

Page 14: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js profile.js feed.js

signup.js account.js setting.js

album.js photo.js login.js

var bundles = [ 'home.js', 'profile.js', 'feed.js', 'signup.js' 'account.js', 'settings.js', 'album.js', 'photo.js', 'login.js' ];

Page 15: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'profile.js', 'feed.js', 'signup.js' 'account.js', 'settings.js', 'album.js', 'photo.js', 'login.js' ];

/home /profile /feed

Page 16: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'profile.js', 'feed.js', 'signup.js' 'account.js', 'settings.js', 'album.js', 'photo.js', 'login.js' ];

/home /profile /feed

home.js profile.js feed.js

Page 17: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 18: [JSDC 2016] Codex: Conditional Modules Strike Back

html5shiv es5-shim

Page 19: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'homeIE.js', 'profile', 'profileIE', 'feed.js', 'feedIE.js' 'signup.js', 'signupIE.js', ... ];

Page 20: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'homeIE.js', 'profile', 'profileIE', 'feed.js', 'feedIE.js' 'signup.js', 'signupIE.js', ... ];

Page 21: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'homeIE.js', 'profile', 'profileIE', 'feed.js', 'feedIE.js' 'signup.js', 'signupIE.js', ... ];

/home

Page 22: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'homeIE.js', 'profile', 'profileIE', 'feed.js', 'feedIE.js' 'signup.js', 'signupIE.js', ... ];

/home

Page 23: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'homeIE.js', 'profile', 'profileIE', 'feed.js', 'feedIE.js' 'signup.js', 'signupIE.js', ... ];

/home

home.js

NO

Page 24: [JSDC 2016] Codex: Conditional Modules Strike Back

var bundles = [ 'home.js', 'homeIE.js', 'profile', 'profileIE', 'feed.js', 'feedIE.js' 'signup.js', 'signupIE.js', ... ];

/home

home.js homeIE.js

YESNO

Page 25: [JSDC 2016] Codex: Conditional Modules Strike Back

Netflix AB testing!

Page 26: [JSDC 2016] Codex: Conditional Modules Strike Back

AB Test w/ multiple cells

Cells Control (Cell 1) Cell 2 Cell 3

Movie Cover Art

Page 27: [JSDC 2016] Codex: Conditional Modules Strike Back

AB Test w/ multiple cells

Cells Control (Cell 1) Cell 2 Cell 3

Movie Cover Art

14% 6%

Page 28: [JSDC 2016] Codex: Conditional Modules Strike Back

Netflix AB testing!

Page 29: [JSDC 2016] Codex: Conditional Modules Strike Back

Netflix AB testing!

Page 30: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

Page 31: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 32: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

oldSearch.js

Page 33: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

oldSearch.js

Page 34: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.js

Page 35: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 36: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

jQuery React~80KB ~120KB

Page 37: [JSDC 2016] Codex: Conditional Modules Strike Back

larger bundle size: • file sizes • time to download • memory usage • time to interactive (TTI)

Page 38: [JSDC 2016] Codex: Conditional Modules Strike Back

old school Lego bricks were generic

Page 39: [JSDC 2016] Codex: Conditional Modules Strike Back

new Lego is about specialization

Page 40: [JSDC 2016] Codex: Conditional Modules Strike Back

hard to reuse specialized bricks

Page 41: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 42: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 43: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 44: [JSDC 2016] Codex: Conditional Modules Strike Back

// starting to look like a // lot of bundles... var bundles = [ 'homeNewSearch.js', 'homeNewSearchIE.js', 'homeOldSearch.js', 'homeOldSearchIE.js', ... ];

Page 45: [JSDC 2016] Codex: Conditional Modules Strike Back

// starting to look like a // lot of bundles... var bundles = [ 'homeNewSearch.js', 'homeNewSearchIE.js', 'homeOldSearch.js', 'homeOldSearchIE.js', ... ];

4x variations already!

Page 46: [JSDC 2016] Codex: Conditional Modules Strike Back

Netflix runs hundreds of AB tests

Page 47: [JSDC 2016] Codex: Conditional Modules Strike Back

Netflix runs hundreds of AB tests

but we personalize on many other dimensions too

Page 48: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 49: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 50: [JSDC 2016] Codex: Conditional Modules Strike Back

|S1| ⋅ |S2| ⋅ ⋅ ⋅ |Sn| = |S1 × S2 × ⋅ ⋅ ⋅ × Sn|

Page 51: [JSDC 2016] Codex: Conditional Modules Strike Back

|S1| ⋅ |S2| ⋅ ⋅ ⋅ |Sn| = |S1 × S2 × ⋅ ⋅ ⋅ × Sn|

3100 = 5.1537752e47

Page 52: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 53: [JSDC 2016] Codex: Conditional Modules Strike Back

40,000,000,000 bricks to reach the

Page 54: [JSDC 2016] Codex: Conditional Modules Strike Back

40,000,000,000 bricks to reach the

7,600,000,000,000,000 bricks to reach

Page 55: [JSDC 2016] Codex: Conditional Modules Strike Back

40,000,000,000 bricks to reach the

7,600,000,000,000,000 bricks to reach

Enough bricks to reach 6.7812832e32 times.

Page 56: [JSDC 2016] Codex: Conditional Modules Strike Back

that’s a #$*%^ ton of bundles!

Page 57: [JSDC 2016] Codex: Conditional Modules Strike Back

https://xkcd.com/303/

Page 58: [JSDC 2016] Codex: Conditional Modules Strike Back

Website's full bundle is 10MB+

Page 59: [JSDC 2016] Codex: Conditional Modules Strike Back

how do we deal with conditional modules?

Page 60: [JSDC 2016] Codex: Conditional Modules Strike Back

ii. codex conditional Bundling

:

Page 61: [JSDC 2016] Codex: Conditional Modules Strike Back

what if we generate on-demand?

Page 62: [JSDC 2016] Codex: Conditional Modules Strike Back

what if we generate on-demand?

1. identify the UI variation 2. generate the bundle

Page 63: [JSDC 2016] Codex: Conditional Modules Strike Back

how do we identify the UI variation?

Page 64: [JSDC 2016] Codex: Conditional Modules Strike Back

AB Tests

Page 65: [JSDC 2016] Codex: Conditional Modules Strike Back

AB Tests

Page 66: [JSDC 2016] Codex: Conditional Modules Strike Back

AB Tests

Page 67: [JSDC 2016] Codex: Conditional Modules Strike Back

truthsnoun, plural [trooth z, trooths]

a bucket of boolean flags used to build a personalized Netflix experience

Page 68: [JSDC 2016] Codex: Conditional Modules Strike Back

{ "webfonts": false, "instantSearch": true, "socialFeatures": false, "motionBanner": true, "html5video": true, "customScrollbar": true }

Page 69: [JSDC 2016] Codex: Conditional Modules Strike Back

{ "webfonts": false, "instantSearch": true, "socialFeatures": false, "motionBanner": true, "html5video": true, "customScrollbar": true }

inputs and outputs are NOT 1:1

Page 70: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 71: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 72: [JSDC 2016] Codex: Conditional Modules Strike Back

how do we generate the bundle?

Page 73: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 74: [JSDC 2016] Codex: Conditional Modules Strike Back

// home.js if (truths.isNewSearch === true) { require('./newSearch'); } else { require('./oldSearch'); }

Page 75: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

Page 76: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

conditioncondition

Page 77: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

conditioncondition

Page 78: [JSDC 2016] Codex: Conditional Modules Strike Back

conditioncondition

Page 79: [JSDC 2016] Codex: Conditional Modules Strike Back

isNewSearch!isNewSearch

Page 80: [JSDC 2016] Codex: Conditional Modules Strike Back

// home.js if (truths.isNewSearch === true) { require('./newSearch'); } else { require('./oldSearch'); }

Page 81: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

isNewSearch!isNewSearch

Page 82: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.js

newEntryPoint.js

oldSearch.js

!isNewSearch isNewSearch

Page 83: [JSDC 2016] Codex: Conditional Modules Strike Back

git

Page 84: [JSDC 2016] Codex: Conditional Modules Strike Back

git

Page 85: [JSDC 2016] Codex: Conditional Modules Strike Back

git

codex(node.js module)

Page 86: [JSDC 2016] Codex: Conditional Modules Strike Back

git

codexartifact

(node.js module)

Page 87: [JSDC 2016] Codex: Conditional Modules Strike Back

artifact

Page 88: [JSDC 2016] Codex: Conditional Modules Strike Back

artifact

Page 89: [JSDC 2016] Codex: Conditional Modules Strike Back

artifact

Page 90: [JSDC 2016] Codex: Conditional Modules Strike Back

{ "home.js": { "deps": [ "dep1.js", "dep2.js", "dep3.js", ], "conditionalDeps": { "newSearch.js": { "name": "isNewSearch", "value": true },

Page 91: [JSDC 2016] Codex: Conditional Modules Strike Back

"dep3.js", ], "conditionalDeps": { "newSearch.js": { "name": "isNewSearch", "value": true }, "oldSearch.js": { "name": "isNewSearch", "value": false } } } }

Page 92: [JSDC 2016] Codex: Conditional Modules Strike Back

"dep3.js", ], "conditionalDeps": { "newSearch.js": { "name": "isNewSearch", "value": true }, "oldSearch.js": { "name": "isNewSearch", "value": false } } } }

Page 93: [JSDC 2016] Codex: Conditional Modules Strike Back

it's a conditional map!

Page 94: [JSDC 2016] Codex: Conditional Modules Strike Back

web/v1 web/v2 web/v3 web/v4

Page 95: [JSDC 2016] Codex: Conditional Modules Strike Back

artifacttruths

Page 96: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 97: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 98: [JSDC 2016] Codex: Conditional Modules Strike Back

<html/>

http://codex.nflxext.com/web/v1/83af

Page 99: [JSDC 2016] Codex: Conditional Modules Strike Back

http://codex.nflxext.com/web/v1/83af

Page 100: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/>

http://codex.nflxext.com/web/v1/83af

Page 101: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/>

http://codex.nflxext.com/web/v1/83af

Page 102: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/> <script/>

codex

? i got this!

http://codex.nflxext.com/web/v1/83af

Page 103: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

http://codex.nflxext.com/web/v1/83af http://codex.nflxext.com/{team}/{version}/{truths}

Page 104: [JSDC 2016] Codex: Conditional Modules Strike Back

codexweb/v1

http://codex.nflxext.com/web/v1/83af http://codex.nflxext.com/{team}/{version}/{truths}

Page 105: [JSDC 2016] Codex: Conditional Modules Strike Back

codex { 83: newSearchTest, af: isChrome }

web/v1

http://codex.nflxext.com/web/v1/83af http://codex.nflxext.com/{team}/{version}/{truths}

Page 106: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

Page 107: [JSDC 2016] Codex: Conditional Modules Strike Back

oldSearch.js

home.js

Page 108: [JSDC 2016] Codex: Conditional Modules Strike Back

oldSearch.js

home.js

Page 109: [JSDC 2016] Codex: Conditional Modules Strike Back

oldSearch.js

home.js

Page 110: [JSDC 2016] Codex: Conditional Modules Strike Back

newSearch.jsoldSearch.js

home.js

Page 111: [JSDC 2016] Codex: Conditional Modules Strike Back

home.js

newSearch.jsoldSearch.js

response times <= 80ms

Page 112: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

http://codex.nflxext.com/web/v1/83af

Page 113: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/>

codex

here you go

http://codex.nflxext.com/web/v1/83af

Page 114: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/> <script/>

codex

cached! here you go

http://codex.nflxext.com/web/v1/83af

Page 115: [JSDC 2016] Codex: Conditional Modules Strike Back

Recap• Build Time: build conditional graph (artifact)

• Run Time: apply truths to artifact

• Conditional bundling is transparent, universal, configuration free!

Page 116: [JSDC 2016] Codex: Conditional Modules Strike Back

iii. Scaling For Netflix

Page 117: [JSDC 2016] Codex: Conditional Modules Strike Back

web/v1 web/v2 tv/v5 tv/v7

Page 118: [JSDC 2016] Codex: Conditional Modules Strike Back

Storage Metadata

Page 119: [JSDC 2016] Codex: Conditional Modules Strike Back

Amazon S3Amazon DynamoDB

Storage Metadata

Page 120: [JSDC 2016] Codex: Conditional Modules Strike Back

Build Time: Codex Artifact Management

Page 121: [JSDC 2016] Codex: Conditional Modules Strike Back

web/v1

Build Time: Codex Artifact Management

Page 122: [JSDC 2016] Codex: Conditional Modules Strike Back

web/v1web/v1

Build Time: Codex Artifact Management

saved!

Page 123: [JSDC 2016] Codex: Conditional Modules Strike Back

SAVED!

web/v1web/v1

Build Time: Codex Artifact Management

saved!

Page 124: [JSDC 2016] Codex: Conditional Modules Strike Back

Build Time: Codex Artifact Management

Page 125: [JSDC 2016] Codex: Conditional Modules Strike Back

activate web/v1 web/v1

activated!

Build Time: Codex Artifact Management

Page 126: [JSDC 2016] Codex: Conditional Modules Strike Back

Run Time: Codex Bundler

Page 127: [JSDC 2016] Codex: Conditional Modules Strike Back

web/v1

here are the active build ids

Run Time: Codex Bundler

Page 128: [JSDC 2016] Codex: Conditional Modules Strike Back

here are the artifacts

web/v1

here are the active build ids

Run Time: Codex Bundler

Page 129: [JSDC 2016] Codex: Conditional Modules Strike Back

here are the artifacts

web/v1

here are the active build ids

Run Time: Codex Bundler

Page 130: [JSDC 2016] Codex: Conditional Modules Strike Back

prod prod-new canary

Page 131: [JSDC 2016] Codex: Conditional Modules Strike Back

16GB ought to be enough for us!__🙂

Page 132: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

Page 133: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

Page 134: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

Page 135: [JSDC 2016] Codex: Conditional Modules Strike Back

400+ artifacts!

Page 136: [JSDC 2016] Codex: Conditional Modules Strike Back

400+ artifacts!

…and we ran out of memory

Page 137: [JSDC 2016] Codex: Conditional Modules Strike Back

32GB ought to be enough for us!__🤔

Page 138: [JSDC 2016] Codex: Conditional Modules Strike Back

800+ artifacts!

Page 139: [JSDC 2016] Codex: Conditional Modules Strike Back

800+ artifacts!

…and we ran out of memory

Page 140: [JSDC 2016] Codex: Conditional Modules Strike Back

64GB ought to be enough for us…?__😭

Page 141: [JSDC 2016] Codex: Conditional Modules Strike Back

1600+ artifacts!

Page 142: [JSDC 2016] Codex: Conditional Modules Strike Back

1600+ artifacts!

…and we ran out of memory. again.

Page 143: [JSDC 2016] Codex: Conditional Modules Strike Back

1600+ artifacts!Our teams will use as

much as we give them.

…and we ran out of memory. again.

Page 144: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 145: [JSDC 2016] Codex: Conditional Modules Strike Back

Q: What's cheap, plentiful, and fast

enough?

Page 146: [JSDC 2016] Codex: Conditional Modules Strike Back

Q: What's cheap, plentiful, and fast

enough?A: Disk.

Page 147: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

Page 148: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

Page 149: [JSDC 2016] Codex: Conditional Modules Strike Back

100% CPU usage.

Page 150: [JSDC 2016] Codex: Conditional Modules Strike Back

what's the problem?

Page 151: [JSDC 2016] Codex: Conditional Modules Strike Back

~68%

Page 152: [JSDC 2016] Codex: Conditional Modules Strike Back

v8::internal::Runtime_ParseJson

Page 153: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

Page 154: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

JSON.parse

Page 155: [JSDC 2016] Codex: Conditional Modules Strike Back

JSON.parse is slow. And blocks the CPU!

Page 156: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

JSON.parse

LRU Cache: Saving the CPU

Page 157: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

JSON.parse

LRU Cache: Saving the CPU

Page 158: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

JSON.parse

LRU Cache: Saving the CPU

Page 159: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

JSON.parse

LRU Cache: Saving the CPU

Page 160: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

LevelDB

JSON.parse

LRU Cache: Saving the CPU

Page 161: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 162: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 163: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 164: [JSDC 2016] Codex: Conditional Modules Strike Back

Breaking change to conditional graph

traversal algorithm!

Page 165: [JSDC 2016] Codex: Conditional Modules Strike Back

http://codex.nflxext.com/web/v1/83af

Page 166: [JSDC 2016] Codex: Conditional Modules Strike Back

http://codex.nflxext.com/web/v1/83af

old algorithm?

new algorithm?

Page 167: [JSDC 2016] Codex: Conditional Modules Strike Back

old algorithm?

new algorithm?

http://codex.nflxext.com/1.0.0/web/v1/83afhttp://codex.nflxext.com/2.0.0/web/v1/83af

Page 168: [JSDC 2016] Codex: Conditional Modules Strike Back

1.0.0

2.0.0

zuul

Page 169: [JSDC 2016] Codex: Conditional Modules Strike Back

zuul 1.0.0

2.0.0

Page 170: [JSDC 2016] Codex: Conditional Modules Strike Back

zuul 1.0.0

2.0.0

Page 171: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 172: [JSDC 2016] Codex: Conditional Modules Strike Back

Good for now.

Page 173: [JSDC 2016] Codex: Conditional Modules Strike Back

Good for now.

Continue to look for engineering wins.

Page 174: [JSDC 2016] Codex: Conditional Modules Strike Back

What about operational resiliency?

Page 175: [JSDC 2016] Codex: Conditional Modules Strike Back

eu-west-1

us-west-2

us-east-1

Page 176: [JSDC 2016] Codex: Conditional Modules Strike Back
Page 177: [JSDC 2016] Codex: Conditional Modules Strike Back

eu-west-1

us-west-2

us-east-1

Page 178: [JSDC 2016] Codex: Conditional Modules Strike Back

eu-west-1

us-west-2

???

Page 179: [JSDC 2016] Codex: Conditional Modules Strike Back

eu-west-1

us-west-2

???

Page 180: [JSDC 2016] Codex: Conditional Modules Strike Back

eu-west-1

us-west-2

???

Page 181: [JSDC 2016] Codex: Conditional Modules Strike Back

???

???

???

Page 182: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/> <script/>

codex

Page 183: [JSDC 2016] Codex: Conditional Modules Strike Back

<script/>

codex

???

Page 184: [JSDC 2016] Codex: Conditional Modules Strike Back

codex

<script/>

???

Page 185: [JSDC 2016] Codex: Conditional Modules Strike Back

Recap• Management plane necessary at scale

• Performance is critical (TTI)

• Redundancy across 3 AWS zones

• Resilient against CDN failure

Page 186: [JSDC 2016] Codex: Conditional Modules Strike Back

iv. Looking To The Future

Page 187: [JSDC 2016] Codex: Conditional Modules Strike Back

why not {bundler}?

Page 188: [JSDC 2016] Codex: Conditional Modules Strike Back

how do we support tree

shaking?

Page 189: [JSDC 2016] Codex: Conditional Modules Strike Back

don't be afraid to challenge common

convention.

Page 190: [JSDC 2016] Codex: Conditional Modules Strike Back

don't make assumptions about the upper limits.

Page 191: [JSDC 2016] Codex: Conditional Modules Strike Back

don't optimize before you understand the system.

Page 192: [JSDC 2016] Codex: Conditional Modules Strike Back

use the scientific method:

1. gather data 2. formulate hypothesis 3. test hypothesis 4. repeat

Page 193: [JSDC 2016] Codex: Conditional Modules Strike Back

engineer for fault tolerance

Page 194: [JSDC 2016] Codex: Conditional Modules Strike Back

Netflix scale is challenging.

Page 195: [JSDC 2016] Codex: Conditional Modules Strike Back

https://www.flickr.com/clement127/ https://www.flickr.com/jose_antonio_hidalgo_jimenez/ https://www.flickr.com/reiterlied/

Lego Photo Credits

Page 196: [JSDC 2016] Codex: Conditional Modules Strike Back

Image Credits

Page 197: [JSDC 2016] Codex: Conditional Modules Strike Back

Image Credits

Page 198: [JSDC 2016] Codex: Conditional Modules Strike Back

Image Credits

Artist: alecive (Alessandro Roncone) Iconset Homepage: https://github.com/alecive/FlatWoken

Page 199: [JSDC 2016] Codex: Conditional Modules Strike Back

Alex Liu [email protected] @stinkydofu

fin