Slide 1

Slide 1 text

Arquiteturas Executáveis ÉVERTON RIBEIRO

Slide 2

Slide 2 text

@nuxlli manutenção, operação, desenvolvimento, pesquisa e empreendimento

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Buscando equilibrio

Slide 5

Slide 5 text

desenvolvimento vs. operação

Slide 6

Slide 6 text

Entregar para ontem a solução que atenda todos os requisitos funcionais. Garantir que seja lá o que o dev entregue: rode, seja seguro e escale. (ontem) Arquitetura da aplicação Arquitetura do sistema

Slide 7

Slide 7 text

(ops guy) (dev guy)

Slide 8

Slide 8 text

Se a comunicação falhar, a aplicação falhará e todos perdem.

Slide 9

Slide 9 text

Soluções?!?

Slide 10

Slide 10 text

Wikis, playbooks, chats, café… Documentações

Slide 11

Slide 11 text

O principal problema das documentações de arquitetura é que ninguém as atualizam.

Slide 12

Slide 12 text

chef, puppet, ansible, vagrant, terraform, monit, god… Ferramentas

Slide 13

Slide 13 text

Lembre-se: desenvolvedores estão focados em desenvolver. E deveriam estar mesmo!

Slide 14

Slide 14 text

vagrant, terraform, monit, god… (dev guy)

Slide 15

Slide 15 text

Especializado em navegar entre os dois lados do time. É importante e funciona… Operation Engineer

Slide 16

Slide 16 text

Mas tem custo alto e ainda opera por instrumentos.

Slide 17

Slide 17 text

Se boas práticas fossem fáceis de adotar a documentação estaria em dia ;)

Slide 18

Slide 18 text

(op engine)

Slide 19

Slide 19 text

Arquiteturas executáveis

Slide 20

Slide 20 text

Linguagem de alto nível, que diferente de fluxogramas…

Slide 21

Slide 21 text

… pode ser interpretada para implantação e automação de sistemas.

Slide 22

Slide 22 text

systems({ api: { image : "ruby", depends: [ "mysql" ], //... }, mysql: //..., });

Slide 23

Slide 23 text

systems({ api: { image : "ruby", depends: [ "mysql" ], ports : { http: "80/tcp" }, }, mysql: { ports: { data: "3306/tcp" }, }, });

Slide 24

Slide 24 text

systems({ api: { image : "ruby", depends: [ "mysql" ], ports : { http: "80/tcp" }, http : { domains: [ "api.myapp.azk.dev" ] }, }, mysql: { ports: { data: "3306/tcp" }, }, });

Slide 25

Slide 25 text

systems({ api: { image : "ruby", depends: [ "mysql" ], ports : { http: "80/tcp" }, http : { domains: [ "api.myapp.azk.dev" ] }, }, mysql: { envs : { USER: "user", PASSWORD: "pass" }, //.env ports: { data: "3306/tcp" }, }, });

Slide 26

Slide 26 text

A "documentação" da arquitetura se torna parte da solução, sendo essencial na sua execução.

Slide 27

Slide 27 text

(op engine)

Slide 28

Slide 28 text

É resultado do fluxo de trabalho do desenvolvedor e do arquiteto de sistemas.

Slide 29

Slide 29 text

fluxo de trabalho

Slide 30

Slide 30 text

fluxo de trabalho arquitetura

Slide 31

Slide 31 text

AZK

Slide 32

Slide 32 text

Ferramenta open source para orquestração de ambientes de desenvolvimento…

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

…através de arquivos manifesto de alto nível.

Slide 35

Slide 35 text

É uma descrição sucinta dos componentes que formam a arquitetura da aplicação.

Slide 36

Slide 36 text

Bem como da relação entre esses componentes e de que forma eles são acessados.

Slide 37

Slide 37 text

Exemplificando:

Slide 38

Slide 38 text

small.io - Web (Rails) - Database (Mysql)

Slide 39

Slide 39 text

$ cd ~/blog $ azk init azk: System ruby/rails detected: ‘blog’ azk: Required system mysql detected in ‘blog' azk: ‘Azkfile.js’ generated ! Tip: Adds the `.azk` in .gitignore echo ‘.azk’ >> .gitignore

Slide 40

Slide 40 text

// Azkfile.js (JavaScript DSL) systems({ blog: { image : "azukiapp/ruby", depends : [ "mysqldb" ], provision : [ "bundle install /azk/bundler" ], command : "rackup -s thin", mounts : { "/azk/#{manifest.dir}": path("."), "/azk/bundler" : persistent("bundler"), }, scalable : { default: 2 }, http: { domains: [ "#{system.name}.azk.dev" ], }, env : [ RUBY_ENV: "dev", BUNDLE_APP_CONFIG: "/azk/bundler" ], }, mysqldb: { image : "azukiapp/mysql", mounts: { "/data/db": persistent("data") }, }, });

Slide 41

Slide 41 text

$ azk start ! Get images: - azukiapp/mysql - azukiapp/ruby ! Starting: - db - blog (instances: 3) (linked with: db)

Slide 42

Slide 42 text

E PRONTO! Basta acessar http://blog.dev.azk e sua aplicação já esta rodando.

Slide 43

Slide 43 text

Apenas 3 passos simples - Instalar o azk - $ azk init - $ azk start

Slide 44

Slide 44 text

Microservice

Slide 45

Slide 45 text

Um projeto ou aplicação, mesmo simples, pode ser visto como um System of Systems (SoS).

Slide 46

Slide 46 text

Em outras palavras Microservice Architecture. http://martinfowler.com/articles/ microservices.html

Slide 47

Slide 47 text

small.io - Web - Database

Slide 48

Slide 48 text

big.com - Front - Databases: - Mysql - Redis - Workers - API - Proxy payment - Facebook auth - etc…

Slide 49

Slide 49 text

"Ambientes podem ser complexos só não podem ser desordenados" (@fnando)

Slide 50

Slide 50 text

Resumindo

Slide 51

Slide 51 text

A comunicação se dá por meio do manifesto e da ferramenta.

Slide 52

Slide 52 text

Uma lingua franca é estabelecida para comunicação do time.

Slide 53

Slide 53 text

(ops guy) (dev guy)

Slide 54

Slide 54 text

Lembre-se: arquiteturas de aplicações e de sistemas devem ser vivas e vividas no seu projeto.

Slide 55

Slide 55 text

Status do azk

Slide 56

Slide 56 text

Versão 0.6.1 estável disponível em http://azk.io

Slide 57

Slide 57 text

Para mac e linux, windows em breve.

Slide 58

Slide 58 text

Documentação Hoje: apenas o README e exemplos. Mas temos mais a caminho.

Slide 59

Slide 59 text

Github issues e e-mail. Suporte

Slide 60

Slide 60 text

Éverton Ribeiro // @nuxlli [email protected] ! Slides: bit.ly/weop_arquiteturas_executaveis