The Twelve factor app – Dependencies – Declare and isolate



The Twelve factor app – Dependencies – Declare and isolate

0 0


spain2013-12factor.net

Spain 2013: The twelve factor app

On Github homburg / spain2013-12factor.net

The Twelve factor app

Guidelines for web apps / -services

12factor.net

Codebase

  • VCS: git, svn, etc.
  • Må ikke dele kode på tværs af apps
    • Split op i libraries
  • Hver kørende instans af app'en; prod, staging, development; kalde vi et deploy

Dependencies

Declare and isolate

Må ikke afhænge af pakker på system-niveau (PEAR).

Brug Dep. declaration manifest og Dep. isolation

Python

pip og virtualenv

1
2
3
4
5
6
7
8
9
10
11
12
# requirements.txt
# ===
# Flask=0.9
# Flask-RESTFul=0.7
# github.com/homburg/pyjade.git
 
# Isolate in virtualenv
$ source venv/bin/activate
 
# Use Dep. declaration manifest
$ pip install -r requirements.txt
                    

PHP

composer og (virtualenv?)

1
2
3
4
5
6
7
// composer.json
{
    require: {
        "smarty/smarty": "@stable",
        "laravel/laravel": "~4"
    }
}

Go ?

Static linking

Absolutte imports

1
import "github.com/homburg/amber

Overtrædelser

  • sendmail
  • curl

Config

  • Database/memcached connection
  • Credentials to external services (unilogin, facebook)
  • ...
  • Config files
  • Environment variables (anbefalet)
    • Ikke environments
      1
      2
      3
      4
      5
      6
      // ...
       
      Config::create(AppEnv::getEnvironment());
       
      //...
                                      

Backing services

Treat backing services as attached resources

Build, release, run

  • code + dependencies + compilation / "transpilation" => build
  • build + config => release
  • release => runtime
    • Mulighed for:
      • Rollback

Processes

  • Stateless
  • Share-nothing
  • Persist data
  • Compile assets at build (smarty, sass, etc.)

Port binding

Håndter egne routes

Concurrent

Web workers - quick response

Background workers organiseret i kø-system (php-resque)

Eksempel

Eksterne services med lang svartid

Tung arbejde

Disposability

Fast startup / graceful shutdown

Behold baggrundsopgaver i køen

Dev/prod parity

Hold dev, stating og prod så ens så muligt

Continuous deployment

Anbefaling: brug samme services som på prod

Logs

Hæld output ud til stdout og benyt dedikerede værktøjer til at analysere output (Splunk)

Admin processes

Kør scripts i app'ens miljø

  • Database migrations (alembic, doctrine)

Flere?

  • ...
  • Testing