Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Arquiteturas Comuns de Apps Rails @ RubyConf BR...
Search
Plataformatec
September 18, 2015
Technology
6
370
Arquiteturas Comuns de Apps Rails @ RubyConf BR 2015
Plataformatec
September 18, 2015
Tweet
Share
More Decks by Plataformatec
See All by Plataformatec
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro @ Elixir Brasil 2019
plataformatec
5
920
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro @ QCon SP 2018
plataformatec
1
220
Elixir @ iMasters Intercon 2016
plataformatec
1
260
GenStage and Flow by @josevalim at ElixirConf
plataformatec
17
2.7k
Elixir: Programação Funcional e Pragmática @ 2º Tech Day Curitiba
plataformatec
2
290
Elixir: Programação Funcional e Pragmática @ Encontro Locaweb 2016
plataformatec
4
270
What's ahead for Elixir: v1.2 and GenRouter
plataformatec
15
2k
Pirâmide de testes, escrevendo testes com qualidade @ RubyConf 2015
plataformatec
10
2.3k
Dogmatismo e Desenvolvimento de Software @ Rubyconf BR 2014
plataformatec
6
840
Other Decks in Technology
See All in Technology
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
podman_update_2024-12
orimanabu
1
260
UI State設計とテスト方針
rmakiyama
2
260
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
360
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
210
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
180
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
830
Storage Browser for Amazon S3
miu_crescent
1
110
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
160
Wantedly での Datadog 活用事例
bgpat
1
400
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
KATA
mclloyd
29
14k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
The Invisible Side of Design
smashingmag
298
50k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Statistics for Hackers
jakevdp
796
220k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Six Lessons from altMBA
skipperchong
27
3.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
Navigating Team Friction
lara
183
15k
Transcript
Arquiteturas Comuns de Apps Rails que vemos por aí George
Guimarães em 30 minutos ou menos
consulting and software engineering
None
Estamos contratando! http://plataformatec.com.br/careers
None
DISCLAIMER:
VIM FALAR SOBRE
Experiências,
Dificuldades,
e Dicas
DOGMAS estão vindo
ou ATALHOS COGNITIVOS?
NÃO CONSIGO COBRIR TODOS OS CONTEXTOS
“George veio cagar regra"
!
1. O monolito 2. Banco de Dados compartilhado 3. Micro
serviços 4. Integração via Eventos/Msgs
1. O monolito ou Aplicação Integrada
Não tenha medo do monolito
É difícil separar as responsabilidades de um sistema
saber o que é o “domínio" leva tempo
é possível escrever código fácil de entender, de fácil manutenção
e com abstrações que façam sentido
Integração Discreta Documentação no código Código de baixa complexidade
são as mesmas técnicas que usaríamos para qualquer tipo de
arquitetura
“mudar” a arquitetura não vai melhorar seus problemas
e só porque é um monolito não significa que seja
ruim
None
Difícil de escalar um time com monolito
Deploy demorado
Difícil de entender
DIFÍCIL DE ENTENDER
DICAS monolito
Guidelines Code Review Automatize tudo o que puder Documente o
setup do projeto (README ou bin/setup)
use um monorepo
2. Banco de dados compartilhado
“rapidez” na hora de acessar DB
separação de responsabilidades site / admin validações
Compartilhar models gem compartilhada com models?
Rodar migrations é difícil
Deploy unificado
“Quem é o dono do campo/coluna?”
DICAS DB compartilhado
use um monorepo
teste seus scripts de backup/restore
automatize deploys e lembre-se de testar os rollbacks
smoke tests as apps em conjunto estão ok? tem certeza?
3. Micro serviços
deploys independentes ciclo de vida independente
linguagens diferentes permite o melhor de vários mundos
entender um pedaço é mais fácil o todo pode ser
muito grande
mais peças móveis deploy mais complexo logs unificados? tracing de
requests debugging complexo
replica funcionalidades de banco de dados via http com a
desvantagem da latência, falta de funcionalidades
acoplamento pode ficar implícito podemos fazer deploys independentes? mudanças de
APIs quebram o sistema?
n gems de clients
(normalmente sua equipe é enxuta)
(não crie ineficiências)
DICAS micro serviços
use um monorepo
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
não use sinatra vc vai acabar querendo replicar funcionalidades do
rails
crie serviços, não micro CRUD (html) + API (json) ciclo
de vida de um resource aplicações mais independentes
contratos/pactos podem te ajudar equipes heterogênas equipes "distantes"
None
None
None
4. Integração via Eventos/Msgs ou, “como replicar dados para apps
independentes"
None
# 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
DICAS int. mensagens
logging é essencial vc quer saber tudo o que acontece
centralize os logs
tome cuidado na ordem dos deploys
teste localmente você consegue conectar nas filas de produção
Vou começar uma app O que eu faço?
DISCLAIMER!
DICA:
MONOREPO
george:~/monorepo[master]$ tree -t . !"" site !"" admin !"" gems
# !"" http_logger # $"" minitest-goodies $"" README.md
source 'https://rubygems.org' gem 'rails', '4.2.4' gem 'http_logger', path: '../gems/http_logger' gem
'minitest-goodies', path: '../gems/minitest-goodies'
~/monorepo[master]$ git subtree push --prefix=gems/http_logger
[email protected]
:georgeguimaraes/ http_logger.git
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
Monolito Continue até quando não puder
Monolito é mais fácil estrangular um monolito, do que juntar
não encontre problemas para suas soluções
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
[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