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

Getting Into the Zero Downtime Deployment World

Getting Into the Zero Downtime Deployment World

Dev Day 2016 (Krakow, Poland)

Tugberk Ugurlu

September 16, 2016
Tweet

More Decks by Tugberk Ugurlu

Other Decks in Programming

Transcript

  1. Getting Into the Zero
    Downtime Deployment World
    Tugberk Ugurlu
    Redgate Software
    @tourismgeek
    tugberkugurlu.com
    #ABBDevDay
    https://flic.kr/p/fNTDM1

    View Slide

  2. #ABBDevDay
    https://flic.kr/p/HLRTPW
    Software Dev @ Redgate Human in Cambridge, UK
    MVP @ Microsoft

    View Slide

  3. @tourismgeek
    tugberkugurlu.com
    github.com/tugberkugurlu
    stackoverflow.com/users/463785/tugberk

    View Slide

  4. What is This?
    #ABBDevDay
    https://flic.kr/p/cdvAaj

    View Slide

  5. #ABBDevDay
    Example
    HTTP APIs
    v1
    Example
    Android iPhone
    Example
    Android Client
    Example
    Web Client
    Example
    HTTP APIs
    v1.1

    View Slide

  6. Should I Care?
    #ABBDevDay
    https://flic.kr/p/e7oMGm

    View Slide

  7. #ABBDevDay
    https://flic.kr/p/49FHd3

    View Slide

  8. #ABBDevDay
    https://flic.kr/p/CTxCx

    View Slide

  9. https://twitter.com/tourismgeek/status/580270772402393088
    #ABBDevDay

    View Slide

  10. Continuous
    Delivery
    #ABBDevDay
    https://flic.kr/p/bzG7ds

    View Slide

  11. #ABBDevDay
    http://bit.ly/2cstlDK

    View Slide

  12. #ABBDevDay
    http://zleek.com

    View Slide

  13. LB
    zleek-0
    zleek-1
    zleek-n
    mongodb
    neo4j
    elasticsearch
    rabbitmq
    recipe-generation-worker-0
    recipe-sync-worker-0
    food-sync-worker-0
    store-sync-worker-0
    recipe-generation-worker-1
    recipe-generation-worker-n
    recipe-sync-worker-n
    recipe-sync-worker-0
    #ABBDevDay

    View Slide

  14. #ABBDevDay
    https://gist.github.com/revett/99d8a5143c0bfeddfc92
    Our Target

    View Slide

  15. Our Scope
    #ABBDevDay

    View Slide

  16. Scope of the Talk
    #ABBDevDay
    HTTP Services Web Sites

    View Slide

  17. #ABBDevDay
    https://flic.kr/p/mRRFdH
    The Path and Guidance

    View Slide

  18. Write Down the
    Deployment
    Strategy
    #ABBDevDay
    https://flic.kr/p/pd4X4A

    View Slide

  19. #ABBDevDay

    View Slide

  20. Script out the Deployment Strategy
    https://flic.kr/p/79EVn6

    View Slide

  21. #ABBDevDay

    View Slide

  22. Release Management
    #ABBDevDay
    https://flic.kr/p/fCbQWb

    View Slide

  23. #ABBDevDay
    Octopus Deploy
    http://bit.ly/2d2ivzU

    View Slide

  24. #ABBDevDay
    Docker Cloud
    http://bit.ly/2d2ivzU
    #ABBDevDay

    View Slide

  25. True Staging Environment
    #ABBDevDay

    View Slide

  26. example-api-v0-6786234
    example-api-
    process
    example-api-v0-6327638
    example-api-
    process
    Router
    v0.example.com

    View Slide

  27. Blue-green Deployment
    http://martinfowler.com/bliki/BlueGreenDeployment.html
    #ABBDevDay

    View Slide

  28. Router
    v0.example.com
    #ABBDevDay
    example-api-v0-6327638
    example-api-
    process
    example-api-v0-6786234
    example-api-
    process

    View Slide

  29. Drain Requests
    #ABBDevDay
    https://flic.kr/p/79A7Db

    View Slide

  30. Router
    v0.example.com
    #ABBDevDay
    example-api-v0-6327638
    example-api-
    process
    example-api-v0-6786234
    example-api-
    process

    View Slide

  31. Router
    v0.example.com
    #ABBDevDay
    example-api-v0-6327638
    example-api-
    process
    example-api-v0-6786234
    example-api-
    process

    View Slide

  32. SemVer Your Software
    http://www.tugberkugurlu.com/archive/versioning-software-builds-based-on-git-tags-and-semantic-versioning-semver
    #ABBDevDay

    View Slide

  33. SemVer (semver.org)
    #ABBDevDay
    Patch
    No user facing changes
    Major
    Introducing incompatible changes
    Minor
    Add functionality in a backwards-
    compatible manner
    2.4.6

    View Slide

  34. SemVer as Way of Application Versioning
    • Support 2 Major versions of the HTTP Service, not 1, not 3.
    • Define a support policy for support lifetime for versions
    #ABBDevDay

    View Slide

  35. Minor-Patch Releases
    • No breaking changes
    #ABBDevDay

    View Slide

  36. example-api-v0-6327638
    example-api-v0-7814219
    example-api-v0-9528392
    LB
    v0.example.com
    example-api-
    process
    example-api-
    process
    example-api-
    process
    example-api-v0-6786234
    example-api-v0-3266280
    example-api-v0-8429842
    example-api-
    process
    example-api-
    process
    example-api-
    process

    View Slide

  37. DEMO
    https://github.com/tugberkugurlu/AspNetCoreSamples/tree/abbdevday2016/haproxy-zero-downtime-sample
    #ABBDevDay

    View Slide

  38. HAProxy Config Reload
    http://engineeringblog.yelp.com/2015/04/true-zero-downtime-haproxy-reloads.html
    #ABBDevDay

    View Slide

  39. Internal
    LB-1
    LB-1
    Internal
    LB-2
    server1
    server2
    server3
    server4
    server5
    server6
    server7
    server8
    server9
    server10
    client
    client
    client
    client
    client
    client
    #ABBDevDay

    View Slide

  40. Multiple Load Balancer Nodes
    http://robert.penz.name/386/howto-setup-a-haproxy-as-fault-tolerant-high-available-load-balancer-for-multiple-caching-web-proxies-on-rhelcentossl/
    #ABBDevDay

    View Slide

  41. #ABBDevDay http://robert.penz.name/386/howto-setup-a-haproxy-as-fault-tolerant-high-available-load-balancer-for-multiple-caching-web-proxies-on-rhelcentossl/

    View Slide

  42. Major Releases
    • Breaking Changes
    • First Major Release
    • Non-first Major Releases
    #ABBDevDay

    View Slide

  43. example-api-v0-6327638
    example-api-v0-7814219
    example-api-v0-9528392
    LB
    v0.example.com
    example
    Products
    example
    Products
    example
    Products
    example-api-v1-2276168
    example-api-v1-5677802
    example
    Products
    example
    Products
    LB
    v1.example.com
    example-api-v1-7182721
    example
    Products

    View Slide

  44. Prefer Fast-forward Database Changes
    #ABBDevDay
    https://flic.kr/p/54a6xY

    View Slide

  45. #ABBDevDay
    v1
    v2
    Id Make Model Colour
    1 Renault Clio Red
    2 Mercedes GLA Black
    3 Volkswagen Polo White
    4 Toyota Yaris Yellow
    Id Make Model Colour
    1 Renault Clio Red
    2 Mercedes GLA Black
    3 Volkswagen Polo White
    4 Toyota Yaris Yellow

    View Slide

  46. Do Not Override Client Side Assets
    #ABBDevDay

    View Slide

  47. #ABBDevDay
    v1
    v1.1

    View Slide

  48. #ABBDevDay
    v1
    v1.1

    View Slide

  49. Be Aware of the Context
    #ABBDevDay

    View Slide

  50. Be Aware of the Context
    • Cookies
    • Sessions
    • Authentication Tokens
    #ABBDevDay

    View Slide

  51. Sticky Sessions
    http://blog.haproxy.com/2012/03/29/load-balancing-affinity-persistence-sticky-sessions-what-you-need-to-know/
    #ABBDevDay

    View Slide

  52. Helpful Tools
    • Git (https://git-scm.com)
    • Travis CI (https://travis-ci.org)
    • Octopus Deploy (https://octopus.com)
    • HAProxy (http://haproxy.org)
    • node-semver CLI (http://bit.ly/1PO6hvR)
    • Docker (https://docker.com)
    • Docker Cloud (a.k.a. Tutum, http://bit.ly/1RYYtl2)
    • SQL Server Data Tools (SSDT, http://bit.ly/1P7qETh)
    • DLM Automation Tools from Redgate (http://bit.ly/1VQ2rDm)
    #ABBDevDay

    View Slide

  53. @tourismgeek
    github.com/tugberkugurlu
    linkedin.com/in/tugberk
    https://flic.kr/p/edfM1R

    View Slide