Slide 1

Slide 1 text

The principles for SaaS apps THE TWELVE-FACTOR APP Erkan Erol Apprentice Software Craftsman http://bit.ly/erkanerol-12factor

Slide 2

Slide 2 text

Erkan Erol Apprentice Software Craftsman erkan_erol_ erkanerol erkanerol.github.io Software Developer @ SAP Development Center Turkey Co-Organizer @ Software Craftsmanship Turkey Java k8s Linux Web

Slide 3

Slide 3 text

Disclosure

Slide 4

Slide 4 text

http://www.oreilly.com/webops-perf/free/beyond-the-twelve-factor-app.csp

Slide 5

Slide 5 text

http://www.flaticon.com/

Slide 6

Slide 6 text

manifesto describing the rules and guidelines that needed to be followed to build a cloud-native application 2012

Slide 7

Slide 7 text

What is the target?

Slide 8

Slide 8 text

minimize time and cost for new developers joining the project declarative formats for setup automation

Slide 9

Slide 9 text

offering maximum portability between execution environments have a clean contract with the underlying operating system

Slide 10

Slide 10 text

obviating the need for servers and systems administration are suitable for deployment on modern cloud platforms

Slide 11

Slide 11 text

enabling continuous deployment for maximum agility minimize divergence between development and production

Slide 12

Slide 12 text

scale up without significant changes to tooling, architecture, or development practices

Slide 13

Slide 13 text

any language

Slide 14

Slide 14 text

any backing services

Slide 15

Slide 15 text

TWELVE FACTORS

Slide 16

Slide 16 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 17

Slide 17 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 18

Slide 18 text

ONE APP ONE REPO

Slide 19

Slide 19 text

USELESS

Slide 20

Slide 20 text

DISTRIBUTED SYSTEM

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 23

Slide 23 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 24

Slide 24 text

never relies on implicit existence of system-wide packages

Slide 25

Slide 25 text

explicitly declare

Slide 26

Slide 26 text

isolate dependencies

Slide 27

Slide 27 text

Ansible Playbook

Slide 28

Slide 28 text

pom.xml

Slide 29

Slide 29 text

Mommy Server Bootstrapped

Slide 30

Slide 30 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 31

Slide 31 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 32

Slide 32 text

DEV QA PROD what varies between deploys?

Slide 33

Slide 33 text

Code Configuration Credentials

Slide 34

Slide 34 text

treat your apps like open source

Slide 35

Slide 35 text

externalize your configuration Consul ZooKeeper Config Server

Slide 36

Slide 36 text

protect credentials

Slide 37

Slide 37 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 38

Slide 38 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

the filesystem must be considered ephemeral

Slide 41

Slide 41 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 42

Slide 42 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 43

Slide 43 text

BUILD ✓ Complex processes ✓ Deterministic ✓ Central Build ❌ Configuration ❌ Environment specific ❌ Local Build

Slide 44

Slide 44 text

+ ✓ Versioning ✓ Configuration ✓ Deploying different environments ✓ Ready to run ✓ Storing releases ❌ Changing executables RELEASE

Slide 45

Slide 45 text

✓ Simple ✓ At any time ❌ Live code fixes ❌ Live config changes RUN

Slide 46

Slide 46 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 47

Slide 47 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 48

Slide 48 text

stateless

Slide 49

Slide 49 text

externalize states

Slide 50

Slide 50 text

share nothing

Slide 51

Slide 51 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 52

Slide 52 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 53

Slide 53 text

8080 /app1 /app2 /app3 8080 8081 8082 exports service by binding to a port

Slide 54

Slide 54 text

everything is a file everything is accessed via its port

Slide 55

Slide 55 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 56

Slide 56 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

Scaling is the root cause of all evil Scaling is bliss Something is wrong

Slide 59

Slide 59 text

Scaling is bliss

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 62

Slide 62 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 63

Slide 63 text

use and throw

Slide 64

Slide 64 text

short startup time

Slide 65

Slide 65 text

graceful shutdown

Slide 66

Slide 66 text

sensitive to signals

Slide 67

Slide 67 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 68

Slide 68 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 69

Slide 69 text

TIME GAP

Slide 70

Slide 70 text

PERSONAL GAP

Slide 71

Slide 71 text

DEV PROD TOOL GAP

Slide 72

Slide 72 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 73

Slide 73 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 74

Slide 74 text

Logs Are Streams, Not Files

Slide 75

Slide 75 text

♥stdout♥

Slide 76

Slide 76 text

● Finding specific events in the past. ● Large-scale graphing of trends ● Active alerting according to user-defined heuristics

Slide 77

Slide 77 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 78

Slide 78 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 79

Slide 79 text

use tool for migrations

Slide 80

Slide 80 text

No content

Slide 81

Slide 81 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 82

Slide 82 text

Codebase Dependencies Config Backing Services Build, Release, Run Processes Port Binding Concurrency Logs Dev/Prod Parity Disposability Admin Processes

Slide 83

Slide 83 text

Thank you for listening...