Slide 1

Slide 1 text

James bond a cli with permission to deploy

Slide 2

Slide 2 text

quem somos?

Slide 3

Slide 3 text

Guilherme Cavalcanti github.com/guiocavalcanti

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

AIRTON SOBRAL github.com/tonidas

Slide 7

Slide 7 text

gato

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

contexto

Slide 10

Slide 10 text

“Nossa visão é limitada pelas ferramentas que temos à mão”

Slide 11

Slide 11 text

Nosso vocabulário limita nossa capacidade de nos adaptar ao shift que a indústria está sofrendo

Slide 12

Slide 12 text

–DHH, Keynote da RailsConf, 2014 "TDD is dead"

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

–Johnny Appleseed

Slide 15

Slide 15 text

IS TDD dead? • DHH, criador do Rails, critica a nossa forma de fazer TDD • "Test induced damage": indirections, dependency injection, etc são motivadas pelos teste e não por necessidades de design • Rails e, em algum nível, o Rails Way, limita nossa visão em relação a TDD • Não é pq TDD não funciona em projetos Rails que a comunidade deve abandoná-lo

Slide 16

Slide 16 text

TDD não está morto

Slide 17

Slide 17 text

Nossa visão é limitada pelas ferramentas que temos à mão

Slide 18

Slide 18 text

Motivação

Slide 19

Slide 19 text

Microserviços

Slide 20

Slide 20 text

micro micro micro Monolito

Slide 21

Slide 21 text

v1.1 v1 v1.2 v3.1 v1.1 app 1 app 2 app 3 v3.2 PRODUCTION SANDBOX PRODUCTION (CANARY) PRODUCTION STAGING PRODUCTION

Slide 22

Slide 22 text

9 CARACTERÍSTICAS DE MICROSERVIÇOS 
 – M. FOWLER {Organized around Business Capabilities Products not Projects Smart endpoints and dumb pipes Decentralized Governance Infrastructure Automation Design for failure Evolutionary Design (…)

Slide 23

Slide 23 text

12 FACTOR
 – HEROKU {One codebase tracked in revision control, many deploys Explicitly declare and isolate dependencies Store config in the environment Treat backing services as attached resources Strictly separate build and run stages (…)

Slide 24

Slide 24 text

NOVO PARADIGMA, 
 NOVOS PROBLEMAS

Slide 25

Slide 25 text

INFRASTRUCTURE AUTOMATION como?

Slide 26

Slide 26 text

design for failure no heroku?

Slide 27

Slide 27 text

Explicitly declare and isolate dependencies Onde? No README?

Slide 28

Slide 28 text

vamos continuar usando rails para criar microserviços?

Slide 29

Slide 29 text

vamos continuar usando o heroku?

Slide 30

Slide 30 text

vamos resolver novos problemas com ferramentas antigas?

Slide 31

Slide 31 text

precisamos de um vocabulário maior para não limitar nosso mundo

Slide 32

Slide 32 text

o repertório 
 são ferramentas e processos
 que solucionam os novos problemas

Slide 33

Slide 33 text

como tornamos isso realidade? • One codebase tracked in revision control, many deploys • Explicitly declare and isolate dependencies • Store config in the environment • Treat backing services as attached resources • Strictly separate build and run stages • (…) • Organized around Business Capabilities • Products not Projects • Smart endpoints and dumb pipes • Decentralized Governance • Infrastructure Automation • Design for failure • Evolutionary Design • (…)

Slide 34

Slide 34 text

solução

Slide 35

Slide 35 text

1. 
 Redefinir nossa ideia de aplicação

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

dependências pertencem a aplicação

Slide 38

Slide 38 text

Diferenças de ambientes • Gemfile.lock de desenvolvimento • gemfile.lock de produção # Gemfile
 gem "paperclip", "~> 2.1"

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

ImageMagick (dev) 
 != 
 ImageMagick (prod)

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

infrastructure Operating system docker engine app 1 deps app 2 deps app 3 deps

Slide 44

Slide 44 text

2. 
 orquestração inteligente

Slide 45

Slide 45 text

ilusionista

Slide 46

Slide 46 text

design for failure supervisão

Slide 47

Slide 47 text

infrastructure automation provisionamento transparente, claims

Slide 48

Slide 48 text

decentralized governance resource quotas, security policies

Slide 49

Slide 49 text

replication, loadbalancer, claims, volumes, services como cidadãos de primeira classe

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

exemplo • deployment • cidadão de primeira classe apiVersion: extensions/v1beta1 kind: Deployment spec: replicas: 1 selector: matchLabels: run: nginx strategy: type: RollingUpdate template: spec: containers: - env: - name: APP_HOST value: foo.com - name: WEB_SERVER_NAME value: bar.com image: docker/image:1.0 name: nginx imagePullSecrets: - name: registry restartPolicy: Always

Slide 52

Slide 52 text

3. 
 workflows e processos

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

4. 
 toolbelts

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

objetivos { simples plugável rápido opensource

Slide 59

Slide 59 text

1. simples • para cada problema, uma missão • para cada missão, uma gem

Slide 60

Slide 60 text

2. plugável escolha as missões que você quer utilizar e instale-as

Slide 61

Slide 61 text

2. plugável • escolha as missões que você quer utilizar e instale-as # Gemfile gem "james_bond-core" gem "james_bond-mission_build" gem "james_bond-mission_deploy" gem "james_bond-mission_release" gem "james_bond-mission_doctor"

Slide 62

Slide 62 text

2. rápido apenas a missão que vai ser utilizada será carregada no momento da execução

Slide 63

Slide 63 text

3. opensource free as in freedoM experimental altamente sujeito a mudanças

Slide 64

Slide 64 text

exemplo • minor Release • Gera uma nova tag do git • Gera uma nova imagem docker # Gemfile $ bond release -g "minor"

Slide 65

Slide 65 text

exemplo • deploy • realiza deploy do release 1.2.3 • sobe pro cluster kubernetes # Gemfile $ bond deploy -t 1.2.3

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

github.com/inlocomedia/james_bond

Slide 68

Slide 68 text

–Johnny Appleseed “Type a quote here.” www.inlocomedia.com Estamos contratando!

Slide 69

Slide 69 text

Perguntas

Slide 70

Slide 70 text

Referências • Keynote: Writing Software by David Heinemeier Hansson • Hangout com m. fowler, kent beck e dhh • TDD, Straw Men, and Rhetoric • Microservices, Martin Fowler • Microservices (talk), Martin fowler • 12Factor • Scalable Microservices with Kubernetes • Large-scale cluster management at Google with Borg