Slide 1

Slide 1 text

Arquiteturas Comuns de Apps Rails que vemos por aí George Guimarães em 30 minutos ou menos

Slide 2

Slide 2 text

consulting and software engineering

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Estamos contratando!
 http://plataformatec.com.br/careers

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

DISCLAIMER:

Slide 7

Slide 7 text

VIM FALAR SOBRE

Slide 8

Slide 8 text

Experiências,

Slide 9

Slide 9 text

Dificuldades,

Slide 10

Slide 10 text

e Dicas

Slide 11

Slide 11 text

DOGMAS estão vindo

Slide 12

Slide 12 text

ou ATALHOS COGNITIVOS?

Slide 13

Slide 13 text

NÃO CONSIGO COBRIR TODOS OS CONTEXTOS

Slide 14

Slide 14 text

“George veio cagar regra"

Slide 15

Slide 15 text

!

Slide 16

Slide 16 text

1. O monolito 2. Banco de Dados compartilhado 3. Micro serviços 4. Integração via Eventos/Msgs

Slide 17

Slide 17 text

1. O monolito ou Aplicação Integrada

Slide 18

Slide 18 text

Não tenha medo do monolito

Slide 19

Slide 19 text

É difícil separar as responsabilidades de um sistema

Slide 20

Slide 20 text

saber o que é o “domínio" leva tempo

Slide 21

Slide 21 text

é possível escrever código fácil de entender, de fácil manutenção e com abstrações que façam sentido

Slide 22

Slide 22 text

Integração Discreta Documentação no código Código de baixa complexidade

Slide 23

Slide 23 text

são as mesmas técnicas que usaríamos para qualquer tipo de arquitetura

Slide 24

Slide 24 text

“mudar” a arquitetura não vai melhorar seus problemas

Slide 25

Slide 25 text

e só porque é um monolito não significa que seja ruim

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Difícil de escalar um time com monolito

Slide 28

Slide 28 text

Deploy demorado

Slide 29

Slide 29 text

Difícil de entender

Slide 30

Slide 30 text

DIFÍCIL DE ENTENDER

Slide 31

Slide 31 text

DICAS monolito

Slide 32

Slide 32 text

Guidelines
 Code Review Automatize tudo o que puder
 Documente o setup do projeto (README ou bin/setup)

Slide 33

Slide 33 text

use um monorepo

Slide 34

Slide 34 text

2. Banco de dados compartilhado

Slide 35

Slide 35 text

“rapidez” na hora de acessar DB

Slide 36

Slide 36 text

separação de responsabilidades site / admin validações

Slide 37

Slide 37 text

Compartilhar models gem compartilhada com models?


Slide 38

Slide 38 text

Rodar migrations é difícil

Slide 39

Slide 39 text

Deploy unificado

Slide 40

Slide 40 text

“Quem é o dono do campo/coluna?”

Slide 41

Slide 41 text

DICAS DB compartilhado

Slide 42

Slide 42 text

use um monorepo

Slide 43

Slide 43 text

teste seus scripts de backup/restore

Slide 44

Slide 44 text

automatize deploys e lembre-se de testar os rollbacks

Slide 45

Slide 45 text

smoke tests as apps em conjunto estão ok? tem certeza?

Slide 46

Slide 46 text

3. Micro serviços

Slide 47

Slide 47 text

deploys independentes ciclo de vida independente

Slide 48

Slide 48 text

linguagens diferentes permite o melhor de vários mundos

Slide 49

Slide 49 text

entender um pedaço é mais fácil o todo pode ser muito grande

Slide 50

Slide 50 text

mais peças móveis deploy mais complexo logs unificados? tracing de requests debugging complexo

Slide 51

Slide 51 text

replica funcionalidades de banco de dados via http com a desvantagem da latência, falta de funcionalidades

Slide 52

Slide 52 text

acoplamento pode ficar implícito podemos fazer deploys independentes? mudanças de APIs quebram o sistema?

Slide 53

Slide 53 text

n gems de clients

Slide 54

Slide 54 text

(normalmente sua equipe é enxuta)

Slide 55

Slide 55 text

(não crie ineficiências)

Slide 56

Slide 56 text

DICAS micro serviços

Slide 57

Slide 57 text

use um monorepo

Slide 58

Slide 58 text

não crie um gemserver interno Adiciona passos a mais no seu fluxo de entrega: Commita na gem Publica a gem Update no Gemfile de cada app Roda os testes de todo mundo

Slide 59

Slide 59 text

não use sinatra vc vai acabar querendo replicar funcionalidades do rails

Slide 60

Slide 60 text

crie serviços, não micro CRUD (html) + API (json) ciclo de vida de um resource aplicações mais independentes

Slide 61

Slide 61 text

contratos/pactos podem te ajudar equipes heterogênas equipes "distantes"

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

4. Integração via Eventos/Msgs ou, “como replicar dados para apps independentes"

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

# app/models/user.rb on the publisher app class User include Promiscuous::Publisher publish :name, :email end # app/models/user.rb on the subscriber app class User include Promiscuous::Subscriber subscribe :name, :email after_create { Rails.logger.info "Hi #{name}!" } end

Slide 68

Slide 68 text

DICAS int. mensagens

Slide 69

Slide 69 text

logging é essencial vc quer saber tudo o que acontece centralize os logs

Slide 70

Slide 70 text

tome cuidado na ordem dos deploys

Slide 71

Slide 71 text

teste localmente você consegue conectar nas filas de produção

Slide 72

Slide 72 text

Vou começar uma app O que eu faço?

Slide 73

Slide 73 text

DISCLAIMER!

Slide 74

Slide 74 text

DICA:

Slide 75

Slide 75 text

MONOREPO

Slide 76

Slide 76 text

george:~/monorepo[master]$ tree -t . !"" site !"" admin !"" gems # !"" http_logger # $"" minitest-goodies $"" README.md

Slide 77

Slide 77 text

source 'https://rubygems.org' gem 'rails', '4.2.4' gem 'http_logger', path: '../gems/http_logger' gem 'minitest-goodies', path: '../gems/minitest-goodies'

Slide 78

Slide 78 text

~/monorepo[master]$ git subtree push --prefix=gems/http_logger [email protected]:georgeguimaraes/ http_logger.git

Slide 79

Slide 79 text

Monolito Sem muitas peças móveis Facilita análise de erro / performance Amadureça os conceitos e abstrações do seu domínio de negócios

Slide 80

Slide 80 text

Monolito Continue até quando não puder

Slide 81

Slide 81 text

Monolito é mais fácil estrangular um monolito, do que juntar

Slide 82

Slide 82 text

não encontre problemas para suas soluções

Slide 83

Slide 83 text

Por incrível que pareça, a alternativa mais sem graça vai te ajudar a entregar features e manter a flexibilidade para mudanças

Slide 84

Slide 84 text

[email protected] @georgeguimaraes Obrigado! Dúvidas? https://www.flickr.com/photos/publicplaces/7440727306/in/photolist-ckvEZQ-8fCN3e-nYFygB-p82nbh-wbvUya-nGWwgA-5ahRL4-afpWj4-dq8Ji5-jsVWfF-9zCVfk-fNh9UN-iNUD2J-pMyUkR-gLS3AU-dxre4m- arHDxj-8vC7By-9qbqFD-rA6FMv-nsjdYy-dpFX1B-pkbsmm-bwGQpF-m8bxLg-qJmRN4-9qm1cc-fNi9Yk-5dA9Dc-ee52fu-bGSSt4-pQzrS2-9zy9dQ-kqjDgr-dkkHeL-paSkn8-swkmVC-oVrCAS-pmXotB-nug5Fp-g8PYx8- nsnByK-edcjfR-eVWzMJ-dxcXoP-drgfd5-816jHn-mRFByr-ajNXL9-h3s4tX https://www.flickr.com/photos/publicplaces/7440727306/in/photolist-ckvEZQ-8fCN3e-nYFygB-p82nbh-wbvUya-nGWwgA-5ahRL4-afpWj4-dq8Ji5-jsVWfF-9zCVfk-fNh9UN-iNUD2J-pMyUkR-gLS3AU-dxre4m- arHDxj-8vC7By-9qbqFD-rA6FMv-nsjdYy-dpFX1B-pkbsmm-bwGQpF-m8bxLg-qJmRN4-9qm1cc-fNi9Yk-5dA9Dc-ee52fu-bGSSt4-pQzrS2-9zy9dQ-kqjDgr-dkkHeL-paSkn8-swkmVC-oVrCAS-pmXotB-nug5Fp-g8PYx8- nsnByK-edcjfR-eVWzMJ-dxcXoP-drgfd5-816jHn-mRFByr-ajNXL9-h3s4tX