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

12 Factor App

12 Factor App

12 Factor Application talk given at Cloud East

Craig Kerstiens

June 28, 2012
Tweet

More Decks by Craig Kerstiens

Other Decks in Programming

Transcript

  1. 12 Factor App

    View Slide

  2. Craig Kerstiens
    @craigkerstiens work at @heroku

    View Slide

  3. First Some History

    View Slide

  4. Where We’ve Been
    Version Control | Dependency Management | Build Release

    View Slide

  5. Where We’ve Been
    Version Control | Dependency Management | Build Release
    Folders

    View Slide

  6. Where We’ve Been
    Version Control | Dependency Management | Build Release
    Folders
    SVN,Perforce,Source Safe

    View Slide

  7. Where We’ve Been
    Version Control | Dependency Management | Build Release
    Folders
    SVN,Perforce,Source Safe
    Git,Mercurial

    View Slide

  8. Version Control | Dependency Management | Build Release
    Now

    View Slide

  9. Version Control | Dependency Management | Build Release
    Now
    1 Code base
    Many deploys

    View Slide

  10. Version Control | Dependency Management | Build Release
    Now
    1 Code base
    Many deploys

    View Slide

  11. Version Control | Dependency Management | Build Release
    Now
    1 Code base
    Many deploys

    View Slide

  12. Version Control | Dependency Management | Build Release
    Where We’ve Been

    View Slide

  13. Version Control | Dependency Management | Build Release
    Where We’ve Been
    $ python setup.py install
    $ ruby setup.rb install

    View Slide

  14. Version Control | Dependency Management | Build Release
    Where We’ve Been
    $ python setup.py install
    $ ruby setup.rb install
    $ INSTALL FROM SOURCE

    View Slide

  15. Version Control | Dependency Management | Build Release
    Now

    View Slide

  16. Version Control | Dependency Management | Build Release
    $ pip install -r requirements.txt
    $ bundle install
    Now

    View Slide

  17. Version Control | Dependency Management | Build Release
    $ pip install -r requirements.txt
    $ bundle install
    Now
    $ INSTALL PINNED VERSIONS

    View Slide

  18. Version Control | Dependency Management | Build Release
    Where We’ve Been

    View Slide

  19. $ rsync myproject tomyserver
    Version Control | Dependency Management | Build Release
    Where We’ve Been

    View Slide

  20. Version Control | Dependency Management | Build Release
    Now

    View Slide

  21. Version Control | Dependency Management | Build Release
    Now

    View Slide

  22. Version Control | Dependency Management | Build Release
    Now

    View Slide

  23. Enough History

    View Slide

  24. 12 Factor

    View Slide

  25. Declarative Setup - Minimize Setup Time
    12 Factor

    View Slide

  26. Declarative Setup - Minimize Setup Time
    Clean Contracts - Portability
    12 Factor

    View Slide

  27. Declarative Setup - Minimize Setup Time
    Clean Contracts - Portability
    Deploy Practices - Cloud and horizontal scaling
    12 Factor

    View Slide

  28. Declarative Setup - Minimize Setup Time
    Clean Contracts - Portability
    Deploy Practices - Cloud and horizontal scaling
    Minimize Divergence - Continuous Deployment
    12 Factor

    View Slide

  29. Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  30. dev
    Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  31. dev = staging
    Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  32. dev = staging = prod
    Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  33. dev = staging = prod
    sqlite postgres postgres
    Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  34. dev = staging = prod
    sqlite postgres postgres
    Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs
    ≠ ≠

    View Slide

  35. dev = staging = prod
    sqlite postgres postgres
    postgres = postgres = postgres
    Dev-Prod Parity
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs
    ≠ ≠

    View Slide

  36. Config
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  37. Config
    var server=”servername”
    var username=”username”
    var password=”password”
    var dbname = “dname”
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  38. Config
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  39. Config
    (External to your code)
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  40. Config
    (External to your code)
    var server=ENV[‘server’]
    var username=ENV[‘username’]
    var password=ENV[‘password’]
    var dbname = ENV[‘dbname’]
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  41. Processes
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  42. web.1
    Processes
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  43. web.1
    web.2
    Processes
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  44. web.1
    web.2
    Scale
    Processes
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  45. web.1
    web.2
    worker.1 clock.1
    Workload Diversity
    Scale
    Processes
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  46. web.1
    web.2
    worker.1
    worker.2
    worker.3
    worker.4
    clock.1
    Workload Diversity
    Scale
    Processes
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  47. Backing Services
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  48. Backing Services
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs
    Stateless Processes

    View Slide

  49. Backing Services
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs
    Stateless Processes
    External Config

    View Slide

  50. Backing Services
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs
    Stateless Processes
    External Config
    DATABASE_URL=postgres://username:pass@host/db
    MEMCACHE_URL=username:pass@host/db

    View Slide

  51. Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  52. How we use logs
    $ ssh tomyserver
    $ cat access_log
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  53. How we use logs
    $ ssh tomyserver
    $ cat access_log
    How we perceive logs
    $ tail -f access_log
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  54. Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  55. DB
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  56. DB Web
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  57. DB Web Worker
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  58. Event Stream
    DB Web Worker
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  59. Event Stream
    2012-02-22T19:56:40+00:00 [postgres]: ....
    2012-02-22T19:56:40+00:00 [router]: GET mysite.com/ ...
    2012-02-22T19:56:40+00:00 [nginx]: ....
    2012-02-22T19:56:40+00:00 [worker]: ....
    DB Web Worker
    Logs
    Dev Prod Parity | Config | Concurrency | Backing Services | Logs

    View Slide

  60. 12 Factor

    View Slide

  61. Declarative Setup
    Clean Contracts
    Deploy Practices
    Minimize Divergence
    12 Factor

    View Slide

  62. Fin.
    Resources
    http://craigkerstiens.com
    http://speakerdeck.com/u/craigkerstiens
    http://www.12factor.net

    View Slide