Upload
luiz-rocha
View
265
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Palestra sobre sistemas distribuídos e a experiência com o Alexandria no 2o ENCATEC
Citation preview
Distribuindo SistemasLições (re)aprendidas na construção de um Sistema de Sistemas
1Friday, June 14, 13
br.linkedin.com/lsdrochaLuiz Rocha { github.com/lsdr
twitter.com/lsdr
lsdr.net
2Friday, June 14, 13
Sistemas distribuídos são
legais
3Friday, June 14, 13
p2p
4Friday, June 14, 13
client-server5Friday, June 14, 13
clusteringn-tier
6Friday, June 14, 13
a web
http://www.flickr.com/photos/gwgwijnands/5018129073/sizes/o/in/photostream/7Friday, June 14, 13
• Você está cercado de sistemas distribuídos
• Diversos “estilos” de arquitetura
• Sistema de Sistemas
recapitulando
8Friday, June 14, 13
Fatos Públicos e Notórios
9Friday, June 14, 13
1960 - 1970
10Friday, June 14, 13
clássica“Um sistema distribuído é aquele no qual
componentes localizados em computadores interligados em rede se comunicam e coordenam suas ações
apenas passando mensagens”
1988 - Coulouris, Dollimore, Kindberg
11Friday, June 14, 13
Concorrência
Desacoplamento de Componentes
Ausência de Memória Compartilhada
Relógios Independentes
Propagação de Falhas
12Friday, June 14, 13
“Um sistema distribuído é aquele onde uma falha em um computador que você nunca imaginou que existisse te impede
de usar seu próprio computador.”
Leslie Lamport
13Friday, June 14, 13
Princípio da Robustez
“Seja conservador no que você faz,
seja liberal com o que aceita dos
outros.”Jon Postel
14Friday, June 14, 13
A rede é confiávelA latência é zero
A banda é infinitaA rede é segura
Topologias não mudamExiste um administrador
Custo de transporte é zeroA rede é homogênea
8Falácias da Computação Distribuída
Peter Deutsch1994
15Friday, June 14, 13
• Sistemas distribuídos não são novidade!
• Ainda assim, todo mundo desliza na hora H
• “Aqueles que desconhecem o passado estão fadados à repetí-lo.”
recapitulando
16Friday, June 14, 13
Sistemas de Sistemas
17Friday, June 14, 13
18Friday, June 14, 13
Outro Publicador?
WTF?
19Friday, June 14, 13
20Friday, June 14, 13
requisitosnegóciospessoas
orçamentosprioridades
culturas
independênciaescalasimplicidademanutenção
21Friday, June 14, 13
Lei de Gall
“Um sistema complexo que funciona invariavelmente evoluiu de um sistema
simples que funcionava.”
22Friday, June 14, 13
CMSCDSWKS
23Friday, June 14, 13
CMScriação/gestão
CDSWKS
24Friday, June 14, 13
CMSCDS
distribuição
WKS25Friday, June 14, 13
CMSCDSWKS
inteligência26Friday, June 14, 13
+40sistemasrecursos, APIs,
serviços, sites, ...
27Friday, June 14, 13
28Friday, June 14, 13
• Componentização e independência das partes
• Construção por composição
• Emerge da necessidade, não de desenho prévio
recapitulando
30Friday, June 14, 13
Lições(re)aprendidas
31Friday, June 14, 13
Não existem exceções para a Lei de Postel
32Friday, June 14, 13
API
case http.status_codewhen 200 faz_alguma_coisawhen 404 mostre_erro
Cliente200 OK
33Friday, June 14, 13
API
case http.status_codewhen 200 faz_alguma_coisawhen 404 mostre_erro
Cliente410 Gone
??34Friday, June 14, 13
API
case http.status_codewhen 200 faz_alguma_coisawhen 404 mostre_erro
Cliente984 Oi?
??35Friday, June 14, 13
for tag in tags: processe_tag(tag)
API Cliente
{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}
36Friday, June 14, 13
{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}
for tag in tags: processe_tag(tag)
API Cliente
??37Friday, June 14, 13
API Cliente
{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}
persistir(doc)
38Friday, June 14, 13
API Cliente
{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}
??persistir(doc)
39Friday, June 14, 13
Sempre existem ruídos
40Friday, June 14, 13
• complicado propagar custo de manutenção para clientes
• client-first - a exemplo da web
• causo: application/xhtml+xml versus text/html para servir XHTML 1.0
41Friday, June 14, 13
Esteja preparado para falhas
42Friday, June 14, 13
43Friday, June 14, 13
??44Friday, June 14, 13
Cache
??45Friday, June 14, 13
Cache não é só para performance
46Friday, June 14, 13
• independência entre cliente e servidor
• cópias locais podem introduzir inconsistências, mas adicionam resiliência
• invalidar cache é insano, deixe expirar
47Friday, June 14, 13
Redes não são mágicas
48Friday, June 14, 13
Toda rede falha
49Friday, June 14, 13
Toda rede oscila
50Friday, June 14, 13
Pacotes se perdem
51Friday, June 14, 13
API Cliente
API Cliente
API Cliente
10 ms
10 seg
timeout?
semresposta?
52Friday, June 14, 13
Se a rede cair, quanto tempo seu cliente permanece vivo?
53Friday, June 14, 13
54Friday, June 14, 13
DDoS auto-inflingido
55Friday, June 14, 13
Graceful Degradation
56Friday, June 14, 13
• considere sempre caso em que a rede falha
• considere sempre que as mensagens vão crescer de tamanho
• não faça requisições em série
57Friday, June 14, 13
Perguntas?
58Friday, June 14, 13
Obrigado!
59Friday, June 14, 13
http://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/
http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing
http://en.wikipedia.org/wiki/Gall's_law
http://en.wikipedia.org/wiki/Robustness_principle
http://www.rgoarchitects.com/Files/fallacies.pdf
http://nighthacks.com/roller/jag/resource/Fallacies.html
http://www.artima.com/weblogs/viewpost.jsp?thread=46706
http://www.amundsen.com/blog/archives/1089
http://en.wikipedia.org/wiki/Two_Generals%27_Problem
http://en.wikipedia.org/wiki/Byzantine_fault_tolerance
http://www.amazon.com/Distributed-Systems-Concepts-Design-Edition/dp/0321263545/
60Friday, June 14, 13