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
390
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
310
Elixir: Programação Funcional e Pragmática @ Encontro Locaweb 2016
plataformatec
4
300
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
LLMエージェント時代に適応した開発フロー
hiragram
1
390
第4回 関東Kaggler会 [Training LLMs with Limited VRAM]
tascj
11
1.6k
Goss: Faiss向けの新しい本番環境対応 Goバインディング #coefl_go_jp
bengo4com
0
1.4k
会社にデータエンジニアがいることでできるようになること
10xinc
9
1.5k
Observability for LLM Application lifecycle
ivry_presentationmaterials
1
230
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
30k
コミュニティと計画的偶発性理論 - 出会いが人生を変える / Life-Changing Encounters
soudai
PRO
7
1.3k
Evolution on AI Agent and Beyond - AGI への道のりと、シンギュラリティの3つのシナリオ
masayamoriofficial
0
150
信頼できる開発プラットフォームをどう作るか?-Governance as Codeと継続的監視/フィードバックが導くPlatform Engineeringの進め方
yuriemori
1
430
あなたの知らない OneDrive
murachiakira
0
230
Go で言うところのアレは TypeScript で言うとコレ / Kyoto.なんか #7
susisu
1
440
Yahoo!広告ビジネス基盤におけるバックエンド開発
lycorptech_jp
PRO
1
260
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
RailsConf 2023
tenderlove
30
1.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
Speed Design
sergeychernyshev
32
1.1k
Fireside Chat
paigeccino
39
3.6k
Rails Girls Zürich Keynote
gr2m
95
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
20k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Producing Creativity
orderedlist
PRO
347
40k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
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