Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Continuous-Delivery-Meetup-NYC-2013.pdf

 Continuous-Delivery-Meetup-NYC-2013.pdf

How we tackle deployments and keep them fast at Etsy.

Reprised version with some additions for the Continuous Delivery NYC meetup October 2013.

Daniel Schauenberg

October 09, 2013
Tweet

More Decks by Daniel Schauenberg

Other Decks in Technology

Transcript

  1. August 2013 •1.8 billion page views •5,483,399 items sold •$109.1

    million of goods sold •> 30 million members •> 1 million active shops http://www.etsy.com/blog/news/2013/etsy-statistics-august-2013-weather-report/ | Items by RockerDollJewellery, ZulamimiLand, codice, 42Things Thursday, October 10, 13
  2. The Bobs •LXC containers on buildtests •Multiple SSDs •Labels for

    heavy/any execution •One heavy executor per disk Thursday, October 10, 13
  3. #push •IRC channel to organize push trains •Join a train

    if you want to deploy changes •Schedule is planned via the channel topic •First in the train is the driver (controls the deploy) •Opening hours: 7am - 10pm NYC time Thursday, October 10, 13
  4. #push bateman* + krunal* + enorris* | tristan (c) +

    jameslee (c) + jlaster (c) | dawa + corey + sandosh + jklein + magera + seth_home + mpascual + nathan | bateman | russp (c) Thursday, October 10, 13
  5. Downsides •Deploys not atomic on the request level •Limbo during

    the time of the local rsync •Common strategy was to split commits into 3 deploys Thursday, October 10, 13
  6. Problems •Symlink swap during requests •Code needs to be guaranteed

    to finish on the docroot it started •Code inclusion mid request Thursday, October 10, 13
  7. etsy/mod_realdoc •Apache post_read_request hook •Whole request works on realpath of

    docroot •Caches realpath for 2s Thursday, October 10, 13
  8. etsy/incpath •PHP module to set the incpath •Gets docroot from

    Apache or realpath() itself •Looks for a pattern to replace in include_path •Restores include_path at the end of the request Thursday, October 10, 13
  9. What did we get? •Remove functions and call site in

    same deploy •No restarts necessary •Opcode caches stay warm for files that don’t change between 2 deploys Thursday, October 10, 13
  10. Things to watch out for •Code that uses full path

    names to scripts •Atomic symlink swapping with `mv -T` •Realpath caching to not stress the filesystem •Opcode cache needs to fit 2x code size •Only request atomicity Thursday, October 10, 13
  11. The Plateau •Regular deploys took ~15 mins •Config deploys about

    half •10am - 6pm => ~ 32 deploys •Long waiting times Thursday, October 10, 13
  12. Summary •Current setup has scaled to ~150 people •Constantly trying

    to improve the speed of deployment •Find weak parts in the process and make them more robust/faster •Bring Dev closer to Prod •Not being able to deploy has the same status as the site being down Thursday, October 10, 13