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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Plataformatec
September 18, 2015
Technology
6
400
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
1.2k
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro @ QCon SP 2018
plataformatec
1
240
Elixir @ iMasters Intercon 2016
plataformatec
1
270
GenStage and Flow by @josevalim at ElixirConf
plataformatec
17
2.9k
Elixir: Programação Funcional e Pragmática @ 2º Tech Day Curitiba
plataformatec
2
310
Elixir: Programação Funcional e Pragmática @ Encontro Locaweb 2016
plataformatec
4
310
What's ahead for Elixir: v1.2 and GenRouter
plataformatec
15
2.2k
Pirâmide de testes, escrevendo testes com qualidade @ RubyConf 2015
plataformatec
10
2.5k
Dogmatismo e Desenvolvimento de Software @ Rubyconf BR 2014
plataformatec
6
870
Other Decks in Technology
See All in Technology
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
370
システムのアラート調査をサポートするAI Agentの紹介/Introduction to an AI Agent for System Alert Investigation
taddy_919
2
1.7k
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2k
日本語テキストと音楽の対照学習の技術とその応用
lycorptech_jp
PRO
1
410
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
170
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.3k
分析画面のクリック操作をそのままコード化 ! エンジニアとビジネスユーザーが共存するAI-ReadyなBI基盤
ikumi
0
170
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
160
なぜ今、コスト最適化(倹約)が必要なのか? ~AWSでのコスト最適化の進め方「目的編」~
htan
1
100
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
3
1.1k
Databricks Free Edition講座 データサイエンス編
taka_aki
0
290
使いにくいの壁を突破する
sansantech
PRO
1
110
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
200
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
400
Design in an AI World
tapps
0
140
Being A Developer After 40
akosma
91
590k
A Soul's Torment
seathinner
5
2.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Believing is Seeing
oripsolob
1
50
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
170
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