Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools...

12
Node @ Facebook Robert Kieffer (‘Broofa’) Facebook Engineer, Chat Team

Transcript of Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools...

Page 1: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Node @ Facebook

Robert Kieffer (‘Broofa’)Facebook Engineer, Chat Team

Page 2: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

JS Vitae

• 12 Years developing web apps

• 2 startups, AOL, Google, Facebook

• Node cred

• node-mime, node-uuid, jslitmus, node-int64

• Internal node evangelist

Page 3: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Context

Node Facebook

Not Big Enough?!

Page 4: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

ToC

• Why Facebook needs node.js

• ... but isn’t embracing it (yet)

• What we’re doing to change that

• ... how that’s working (or not)

Page 5: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Why?

• Critics: “Not Impressed”

• libev, libevent, Tornado, EventMachine, etc...

• Common code base on client/server == *meh*

• Developer roles and specialization

• can be good... but requiring them? Not so much

Page 6: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Why Not?

Page 7: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends
Page 8: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends
Page 9: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Monkeys and ...

• Performance

• 1% matters! HipHop

• Reliability

• Code Inertia

• 8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang

• Deployment processes & Tools

• Dev Tools

• Phabricator

Page 10: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Crossing the Chasm

• Internal Group

• Coordinate your friends

• Enlighten the clueless

• Keep your critics in the loop

• Non-critical applications

• ... touching critical apps

Page 11: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Status

• JSGameBench

• Mobile JS framework (to be announced)

• Chat

• Traffic analysis (http & thrift, via node-pcap)

• Load testing

• Production-hacking (e.g. adding XHR+CORS)

• ... now plays nice w/ internal tool chain

Page 12: Node @ Facebook · ¥8,000KLoC in PHP, 300KLoc JS, 12KLoC Erlang ¥Deployment processes & Tools ¥Dev Tools ¥Phabricator. Crossing the Chasm ¥Internal Group ¥Coordinate your friends

Node @ Facebook

1% Done