Post on 02-Jul-2015
description
Acelerando Sistemas
Distribuídos
@johalfe
@spiceee
onrails#
SOA
Sistema Distribuído
“Um sistema distribuído consiste em múltiplas aplicações autônomas que interagem para atingir uma meta comum”
“Um sistema distribuído consiste em múltiplas aplicações autônomas que interagem para atingir uma meta comum”
Wolfgang Emmerich
“Afirmar que um sistema distribuído funciona com uma meta comum num ambiente aberto como a Internet é algo difícil.”
“Afirmar que um sistema distribuído funciona com uma meta comum num ambiente aberto como a Internet é algo difícil.”
Roy Fielding
Por que sistema distribuído?
Prós
Desacoplamento
Desacoplamentode responsabilidade, de domínio, de
arquitetura, de classes, de código
Db não é API
Db não é APIdifícil manter contratos e regras de negócio
Escalabilidade
Disponibilidade
Performance
Custo
Contras
Logs
Testes
Deploy
Granularidade
Versionamento
Segurança/Auth
ENV=development
Latência
Complexidade
Arquitetura distribuída do iba
Toolbox
+Resque
“why so slow?”
“why so slow?”
The Armin
custo do REST
Granularidade (again)
Filters, group-bys
Meta comum?
“Faster, faster, faster, now!”
“Faster, faster, faster, now!”
The Armin
Cacheia tudo!
“Need more memcache!”
“Need more memcache!”
The Armin
Varnish + ETag + fragment caching
Invalidação de cache = uma das
coisas mais difíceis blah blah
Difícil customizar por usuário
Rethink
API
APIEager loading de entidades que compoem
uma unidade de informação
API
O cliente escolhe o nível de detalhes que precisa
API
Um passo para trás: unificar
alguns serviços
Um passo para trás: unificar
alguns serviçosAnalisamos serviços que poderiam ser
acoplados sem grande impacto à plataforma
Preconsume
PreconsumeColocar a informação numa camada de custo
mais baixo de obtenção
App Server
App ServerBuscar um app server que se adaptasse
melhor ao nosso stack
CAB: Cache Against Boiada
separando o tipo de cache pelo tipo de usuário
CAB: Cache Against Boiada
“Venha me ler todinha no iba”
Um só framework
Mais de um framework num sistema distribuído requer mais manutenção
Um só framework
Eliminar concorrência entre Back-Office e
User-facing
Eliminar concorrência entre Back-Office e
User-facing
o usuário querendo comprar um livro não precisa sofrer com um processo de
faturamento
Async?
Async?Começar a explorar non-blocking app stacks
“Ah! Joga tudo no Redis”
“Cache vai nos salvar”
O MongoDB é foda! Mas depois ele cobra
a conta.
Modelagem errada
Conclusão
Perguntas?
Free Stuff
Obrigado!