Upload
ayumu-aizawa
View
110
Download
0
Tags:
Embed Size (px)
DESCRIPTION
The talk focuses on building cloud applications using the process model. It takes a look at how Heroku helps enforce this modern application.
Citation preview
Chris Stolt
@stolt45
Monday, February 20, 12
Monday, February 20, 12
The Heroku Way
Monday, February 20, 12
Building Modern Web
Monday, February 20, 12
img src: http://www.flickr.com/photos/atmos/1436014798/in/photostream/
Monday, February 20, 12
7 Aspects
Monday, February 20, 12
7 Aspects• Codebase
Monday, February 20, 12
7 Aspects• Codebase• Dependencies
Monday, February 20, 12
7 Aspects• Codebase• Dependencies• Config
Monday, February 20, 12
7 Aspects• Codebase• Dependencies• Config• Backing Services
Monday, February 20, 12
7 Aspects• Codebase• Dependencies• Config
• Build, Release, Run• Backing Services
Monday, February 20, 12
7 Aspects• Codebase• Dependencies• Config
• Build, Release, Run• Processes
• Backing Services
Monday, February 20, 12
7 Aspects• Codebase• Dependencies• Config
• Build, Release, Run• Processes• Logs
• Backing Services
Monday, February 20, 12
1. Codebase
Monday, February 20, 12
1. Codebase
Stored in an SCM (git)
Monday, February 20, 12
1. Codebase
Stored in an SCM (git)
does NOT contain config
Monday, February 20, 12
1. Codebase
Stored in an SCM (git)
does NOT contain deps
does NOT contain config
Monday, February 20, 12
2. Dependencies
3rd party code and libs
Monday, February 20, 12
2. Dependencies
declared in a manifest
3rd party code and libs
Monday, February 20, 12
2. Dependencies
declared in a manifest
3rd party code and libs
dependency management tools
Monday, February 20, 12
2. Dependencies
declared in a manifest
specifies app setup
3rd party code and libs
dependency management tools
Monday, February 20, 12
Dependency
Ruby - Bundler
Monday, February 20, 12
Dependency
Ruby - Bundler
Python - Pip
Monday, February 20, 12
Dependency
Ruby - Bundler
Python - Pip
Clojure - Lein
Monday, February 20, 12
3. ConfigPer-deploy Values
Monday, February 20, 12
3. ConfigPer-deploy Values
Authentication Credentials
Monday, February 20, 12
3. ConfigPer-deploy Values
Authentication Credentials
Connection Strings
Monday, February 20, 12
3. ConfigNOT stored in files
Stored in Env Vars
Monday, February 20, 12
3. ConfigNOT stored in files
Stored in Env Vars
Language Agnostic
Monday, February 20, 12
4. Backing Databases
Monday, February 20, 12
4. Backing Databases
Caching
Monday, February 20, 12
4. Backing Databases
Caching
Queueing
Monday, February 20, 12
4. Backing Databases
Caching
Queueing
Twitter / S3 / Email / Etc.
Monday, February 20, 12
4. Backing
to your appAdditions
Monday, February 20, 12
4. Backing
to your appAdditionsAdditions
Monday, February 20, 12
4. Backing
to your appAdditionsAdditionsAdd-ons
Monday, February 20, 12
SetupConnect via URI
Connect via Auth Creds
Connect via API Keys
Monday, February 20, 12
SetupConnect via URI
Connect via Auth Creds
Connect via API Keys
Stored via Config Vars
Monday, February 20, 12
5. Build, Release,
Monday, February 20, 12
Build
Compiles the codebase with dependencies
Monday, February 20, 12
Release
Applies config to the compiled build
Monday, February 20, 12
Runtime
Runs the release in the execution env
Monday, February 20, 12
Run App as Isolated Processes
Monday, February 20, 12
6. ProcessesWeb
Monday, February 20, 12
6. ProcessesWeb
Worker
Monday, February 20, 12
6. ProcessesWeb
Worker
Clock?
Monday, February 20, 12
6. ProcessesRun independently
Monday, February 20, 12
6. ProcessesRun independently
Run in isolation
Monday, February 20, 12
6. Processes
Do not write locally
Run independently
Run in isolation
Monday, February 20, 12
6. Processes
Do not write locally
Run independently
Are Disposable!
Run in isolation
Monday, February 20, 12
Process Model
Monday, February 20, 12
Process Model
Monday, February 20, 12
7. Logs
Introspection into Runtime
Monday, February 20, 12
7. Logs
Introspection into Runtime
Needed for Troubleshooting
Monday, February 20, 12
7. Logs
Introspection into Runtime
Needed for Troubleshooting
Great notification system
Monday, February 20, 12
7. Logs
are NOT files
Monday, February 20, 12
7. Logs
are NOT files
ARE streams of data
Monday, February 20, 12
Logging as a
Loggly
PapertrailApp
Monday, February 20, 12
Logging as a
Loggly
PapertrailApp
Custom Syslog Setup
Monday, February 20, 12
7 Aspects• Codebase• Dependencies• Config
• Build, Release, Run• Processes• Logs
• Backing Services
Monday, February 20, 12
Older App
Monday, February 20, 12
New App
Monday, February 20, 12
New App
Monday, February 20, 12
New App
Monday, February 20, 12
New App
Monday, February 20, 12
The Heroku Way
Monday, February 20, 12
The Heroku Way
Monday, February 20, 12
The Heroku Way
Monday, February 20, 12
The Heroku Way
_______
Monday, February 20, 12
The Heroku Way
Monday, February 20, 12
The Heroku Way
Monday, February 20, 12
$
Monday, February 20, 12
git push heroku master$
Monday, February 20, 12
Counting objects: 5, done.Delta compression using up to 2 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (3/3), 291 bytes, done.Total 3 (delta 2), reused 0 (delta 0)
-----> Heroku receiving push-----> Ruby/Rack app detected-----> Installing dependencies using Bundler version 1.1.rc.7 Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment Using rake (0.9.2.2) Using pusher (0.8.4) Using twitter-stream (0.1.14) Using tweetstream (1.1.3) Using bundler (1.1.rc.7) Your bundle is complete! It was installed into ./vendor/bundle Cleaning up the bundler cache.-----> Writing config/database.yml to read from DATABASE_URL-----> Discovering process types Procfile declares types -> web, worker Default types for Ruby/Rack -> console, rake-----> Compiled slug size is 7.6MB-----> Launching... done, v56 http://pusher45.herokuapp.com deployed to Heroku
git push heroku master$
Monday, February 20, 12
Live Demo
Monday, February 20, 12
Conclusion
Monday, February 20, 12
StopManaging infrastructure
Monday, February 20, 12
StopManaging deployment tools
Monday, February 20, 12
StartBuilding Modern App
Monday, February 20, 12
StartPushing code
Monday, February 20, 12
StartFocusing on your application
Monday, February 20, 12
12 Factor App
http://www.12factor.net
Monday, February 20, 12
Monday, February 20, 12
終
Monday, February 20, 12
Questions?
Monday, February 20, 12