Ben Acker (@nvcexploder / Walmart) - Node in Production
-
Impetus: Walmart wanted a mobile presence. They built an application that looked like it was created by a giant retail operation--SOAP services, etc.
-
Started looking for other options: native apps,
-
Started with services team (worked on original app, spinning out to other mobile apps)--all of a sudden had loads of different clients consuming the services. Converting old soap/XML into something mobile-friendly?
-
High volume days (black Friday) start taking services down, and services team already distracted by mobile projects
-
Time to start building better services
-
Brought Eran Hammer over from Yahoo and gave him the go-ahead to use anything he wanted to improve mobile services. He chose node.
-
Walmart's been open-source from the start
-
But how to maintain legacy services?
- Start with a node proxy out front (get node into production)
- Expand to other services
-
Build + deployment process
- Walmart's build is simple:
npm install
- Build on jenkins, scp everywhere
- Node services stay simple, easy to write--and they're fun!
- Node community has been enormously helpful in making Walmart Go Faster
- Walmart's build is simple:
-
Node Black Friday
- Entire team (6) on Google Hangout + Live tweeting the entire time
- Mobile web served entirely by Node
- Analytics system written in Node (on top of some combination of RabbitMQ, Mongo, and Splunk)
- 2-3 analytics calls per request
- All native mobile services draw on Node
- Black Friday went really, really, really well.
- Caching, proxying, everything -- servers stayed flat (spikes made it to ~2%). Node Black Friday was boring--the best kind of coverage duty to be on.
- Delivered an mweb fix in the middle of Black Friday. Going from Java deploys (up to a day) to a minutes-long node deploy was awesome.
-
Redoing walmart.com..and node team is it.
-
Node is an awesome tool for software projects. Community is good; getting better. If you've been around a while, help out. If you've got questions, ask. There's hardware, backend, frontend.