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
380
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
1k
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro @ QCon SP 2018
plataformatec
1
230
Elixir @ iMasters Intercon 2016
plataformatec
1
260
GenStage and Flow by @josevalim at ElixirConf
plataformatec
17
2.8k
Elixir: Programação Funcional e Pragmática @ 2º Tech Day Curitiba
plataformatec
2
300
Elixir: Programação Funcional e Pragmática @ Encontro Locaweb 2016
plataformatec
4
290
What's ahead for Elixir: v1.2 and GenRouter
plataformatec
15
2.1k
Pirâmide de testes, escrevendo testes com qualidade @ RubyConf 2015
plataformatec
10
2.4k
Dogmatismo e Desenvolvimento de Software @ Rubyconf BR 2014
plataformatec
6
870
Other Decks in Technology
See All in Technology
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
120
AWS と定理証明 〜ポリシー言語 Cedar 開発の舞台裏〜 #fp_matsuri / FP Matsuri 2025
ytaka23
9
2.4k
(非公式) AWS Summit Japan と 海浜幕張 の歩き方 2025年版
coosuke
PRO
1
180
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
210
Long journey of Continuous Delivery at Mercari
hisaharu
1
210
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
770
doda開発 生成AI元年宣言!自家製AIエージェントから始める生産性改革 / doda Development Declaration of the First Year of Generated AI! Productivity Reforms Starting with Home-grown AI Agents
techtekt
0
130
DB 醬,嗨!哪泥嘎斯基?
line_developers_tw
PRO
0
150
活きてなかったデータを活かしてみた話 / Shirokane Kougyou vol 19
sansan_randd
1
250
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
2.1k
OpenTelemetry Collector internals
ymotongpoo
5
530
バクラクのモノレポにおける AI Coding のための環境整備と {Roo,Claude} Code活用事例 / AI Coding in Bakuraku's Monorepo: Environment Setup & Case Studies with {Roo, Claude} Code
upamune
9
6k
Featured
See All Featured
Speed Design
sergeychernyshev
30
990
The Invisible Side of Design
smashingmag
299
51k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Bash Introduction
62gerente
614
210k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Building Applications with DynamoDB
mza
95
6.4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
690
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
What's in a price? How to price your products and services
michaelherold
245
12k
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