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

Strategies In Continuous Delivery

Strategies In Continuous Delivery

Find out some of the strategies we use in order to deploy 3000 time a year

Avatar for Aviran Mordo

Aviran Mordo

June 20, 2013
Tweet

More Decks by Aviran Mordo

Other Decks in Technology

Transcript

  1. Strategies In ContinuousDelivery Learn the “magic” behind the scenes Aviran

    Mordo @aviranm http://www.linkedin.com/in/aviran 07:41
  2. Wixin Numbers • Over 35,000,000 users – Adding over 1,000,000

    new users each month • Static storage is over 150TB of data – Adding over 1TB of files every day • 3 Data centers + 2 Clouds (Google AE, Amazon) – Around 300 servers • Over 40,000,000 Server API calls per day • ~400 people work at wix – Over 100 people in R&D 20:37
  3. 20:37 From Jan’ 2013 –May 2013 • 1500 Deployments •

    470 A/B Tests • 200 Feature Toggles
  4. Continuous Delivery at Wix • Abandon “VERSION” paradigm – move

    feature centric life • Make small and frequent release as soon as possible • Automate everything – TDD/CI/CD • Measure Everything –A/B test every new feature –Monitor real KPIs (business, not CPU) 20:37
  5. Continuous Delivery at Wix • Empower the developer –The developer

    is responsible from product idea to 1M active users – Remove every obstacle in the developer’s path – Big cultural change from waterfall – affects the whole company 20:40
  6. Test Driven Development • No new code is pushed to

    Git without being fully tested • Before fixing a bug first write a test to reproduce the bug • Cover legacy (untested) systems with Integration tests 20:37
  7. Test Driven Development • What people think is the impact

    on development –TDD slows down development – With TDD we write more code (product + test code). • Current Test Count (U-Tests + IT-Tests) – over 10,000 20:42
  8. Test Driven Development • Actual impact on development –We develop

    products faster – Removes fear of change – Easier to enter some one else’s project –Do we really need QA? (Yes, they code tests) – Writing a feature is 10-30% slower, 45-90% less bugs – 50% faster to reach production. –Considerably faster time to fix bugs 20:37
  9. Guidelines for successful TDD • Tests should run on project

    checkout to a random computer. • Tests that cannot be debugged on a developer machine will never consistently run for any period of time • Tests should run fast • Tests have to be readable – They are the project’s specs • Fixture is evil! 20:47
  10. Feature Toggles • Everyone develops on the Trunk • Every

    piece of code can get to production at anytime 20:37
  11. Feature Toggle to the rescue • Unused new code can

    go to production – no harm done • Operational new code goes with a guard – use new or old code by feature toggle 20:37
  12. Feature Toggle Strategies (gradual expose users) • Company employees •

    Specific users or group of users • Percentage of traffic • By GEO • By Language • By user-agent • User Profile based • By context (site id or some kind of hash on site id) 20:37
  13. Feature Toggle Override • By specific server – Used to

    test system load – New database flows/migration – Refactoring that may affect performance and memory usage • By Url parameter – Enable internal testing – Product acceptance – Faking GEO • By FT cookie value – Testing – When working with API on a single page application 20:37
  14. A/B Test • Every new feature is A/B tested •

    We open the new feature to a % of users – Define KPIs to check if the new feature is better or worse – If it is better, we keep it – If worse, we check why and improve – If we find flaws, the impact is just for % of our users (kind of Feature Toggle) • An interesting site effect on product • How many times did you have the conversion “what is better”? – Put the menu on top / on the side • Well, how about building both and A/B Testing? 20:37
  15. Marking users with toss value in a cookie • Anonymous

    user – Toss is randomly determined – Can not guarantee persistent experience if changing browser • Registered User – Toss is determined by the user ID – Guarantee toss persistency across browsers – Allows setting additional tossing criteria (for example new users only) – Only use this for sections that a user has to be authenticated 20:37
  16. • Do not mix anonymous and registered tests • AB

    test parentage of users with optional filters – New Users Only (Registered users only) – By language – By GEO – By Browser – user-agent – OS – Any other criteria you have on your users 20:37
  17. A/B Test Features • A/B Test Override – Allows setting

    a value of a test for validation – Helps support experience what users experiencing • Override methods – Via URL parameter – Via cookie • Pause tests • Start/Stop Test • Bots always get “A” 20:37
  18. Refactoring • Before refactoring make sure everything is covered with

    tests – Legacy code usually covered by IT tests • Refactor from inside out – Small iterations with tests – Refactor small methods - make sure the tests don’t break – Deploy often • Re-write from the outside in – Write from scratch – Code duplication sometimes needed (temporary) – Protected by Feature Toggle 20:37
  19. DB Schema Changes Without Downtime • Adding columns – Use

    another table link by primary key – Use blob field for schema flexibility • Removing fields – Stop using. Do not do any DB schema changes 20:37
  20. New DB schema • Plan a lazy migration path controlled

    by feature toggle 1. Write to old / Read from old 2. Write to both / Read from old 3. Write to both / Read from new, fallback to old 4. Write to new / Read from new, fallback to old 5. Eagerly migrate data in the background 6. Write to new / Read from new 20:37
  21. Gradual Deployment 20:37 • Assume two components • We shutdown

    one and install on it the new version. It is not active yet • Do self test • Activate the new server it is passes self test • Continue deploying the other servers, a few at a time, checking each one with self test A 1.1 B 1.1 A 1.1 B 1.2 A 1.1 A 1.1 B 1.1 B 1.1 A 1.1 A 1.1 B 1.1 B 1.2 A 1.1 B 1.2 A 1.1 A 1.1 B 1.1 B 1.2 A 1.1 B 1.1 A 1.1 A 1.1 B 1.1 B 1.2
  22. Self Test / Post Deployment Test After each server deployment

    run a self test before deploying the next server. • Checking server configuration and topology – Make sure database is accessible (DB connection string) – Is the schema the one I expect – Access required local resources (data files, other config files, templates, etc’) – Access remote resources – RPC / REST endpoints reachable and operational • Server will refuse requests unless it passes the self test • Allow a way to skip self test (and continue deployment) 20:37
  23. Backward and Forward compatible • Assume two components • We

    release a new version of one • Now Rollback the other… 20:37 A 1.1 B 1.2 A 1.2 B 1.1 A 1.1 A 1.1 B 1.1 B 1.2 A 1.2 A 1.1 B 1.1 B 1.1 A 1.1 B 1.1 A 1.1 A 1.1 B 1.1 B 1.1 A 1.0 A 1.2 A 1.1 B 1.2 B 1.1 B 1.2 A 1.2 A 1.2 A 1.1 B 1.2 B 1.1 B 1.0
  24. How does it work –CD Practices • Test driven development

    • Small Development Iterations • Backwards and Forwards compatible • Gradual Deployment & Self-Test • Feature Toggle • A/B Testing • Exception Classification • Production visibility 20:37
  25. Where are we today? • We have re-written our flash

    editor product as an HTML 5 editor – In just 4 months • Introduced Wix 3rd party applications (developers API) – In just 6 weeks • We are easily replacing significant parts of our infrastructure • And we are doing ~10 releases a day! 20:37 0 5 10 15 20 25 30 35 1/1/2013 1/4/2013 1/8/2013 1/11/2013 1/15/2013 1/18/2013 1/22/2013 1/27/2013 1/30/2013 2/3/2013 2/6/2013 2/10/2013 2/13/2013 2/18/2013 2/21/2013 2/25/2013 2/28/2013 3/4/2013 3/7/2013 3/12/2013 3/15/2013 3/19/2013 3/24/2013 4/3/2013 4/7/2013 4/10/2013 4/15/2013 4/19/2013 4/23/2013 4/28/2013 5/1/2013 5/6/2013 5/9/2013 5/13/2013 5/19/2013 5/22/2013 5/26/2013 5/29/2013 6/1/2013 6/4/2013 6/7/2013 6/11/2013 6/16/2013 (blank) Total Total
  26. 07:41 Aviran Mordo @aviranm http://www.linkedin.com/in/aviran Read more: The Road To

    Continuous Delivery: http://goo.gl/K6zEK http://www.slideshare.net/aviranwix/strategies-in-continuous-delivery