60
Distribuindo Sistemas Lições (re)aprendidas na construção de um Sistema de Sistemas 1 Friday, June 14, 13

Distribuindo Sistemas

Embed Size (px)

DESCRIPTION

Palestra sobre sistemas distribuídos e a experiência com o Alexandria no 2o ENCATEC

Citation preview

Page 1: Distribuindo Sistemas

Distribuindo SistemasLições (re)aprendidas na construção de um Sistema de Sistemas

1Friday, June 14, 13

Page 2: Distribuindo Sistemas

br.linkedin.com/lsdrochaLuiz Rocha { github.com/lsdr

twitter.com/lsdr

lsdr.net

2Friday, June 14, 13

Page 3: Distribuindo Sistemas

Sistemas distribuídos são

legais

3Friday, June 14, 13

Page 4: Distribuindo Sistemas

p2p

4Friday, June 14, 13

Page 5: Distribuindo Sistemas

client-server5Friday, June 14, 13

Page 6: Distribuindo Sistemas

clusteringn-tier

6Friday, June 14, 13

Page 7: Distribuindo Sistemas

a web

http://www.flickr.com/photos/gwgwijnands/5018129073/sizes/o/in/photostream/7Friday, June 14, 13

Page 8: Distribuindo Sistemas

• Você está cercado de sistemas distribuídos

• Diversos “estilos” de arquitetura

• Sistema de Sistemas

recapitulando

8Friday, June 14, 13

Page 9: Distribuindo Sistemas

Fatos Públicos e Notórios

9Friday, June 14, 13

Page 10: Distribuindo Sistemas

1960 - 1970

10Friday, June 14, 13

Page 11: Distribuindo Sistemas

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

Page 12: Distribuindo Sistemas

Concorrência

Desacoplamento de Componentes

Ausência de Memória Compartilhada

Relógios Independentes

Propagação de Falhas

12Friday, June 14, 13

Page 13: Distribuindo Sistemas

“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

Page 14: Distribuindo Sistemas

Princípio da Robustez

“Seja conservador no que você faz,

seja liberal com o que aceita dos

outros.”Jon Postel

14Friday, June 14, 13

Page 15: Distribuindo Sistemas

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

Page 16: Distribuindo Sistemas

• 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

Page 17: Distribuindo Sistemas

Sistemas de Sistemas

17Friday, June 14, 13

Page 18: Distribuindo Sistemas

18Friday, June 14, 13

Page 19: Distribuindo Sistemas

Outro Publicador?

WTF?

19Friday, June 14, 13

Page 20: Distribuindo Sistemas

20Friday, June 14, 13

Page 21: Distribuindo Sistemas

requisitosnegóciospessoas

orçamentosprioridades

culturas

independênciaescalasimplicidademanutenção

21Friday, June 14, 13

Page 22: Distribuindo Sistemas

Lei de Gall

“Um sistema complexo que funciona invariavelmente evoluiu de um sistema

simples que funcionava.”

22Friday, June 14, 13

Page 23: Distribuindo Sistemas

CMSCDSWKS

23Friday, June 14, 13

Page 24: Distribuindo Sistemas

CMScriação/gestão

CDSWKS

24Friday, June 14, 13

Page 25: Distribuindo Sistemas

CMSCDS

distribuição

WKS25Friday, June 14, 13

Page 26: Distribuindo Sistemas

CMSCDSWKS

inteligência26Friday, June 14, 13

Page 27: Distribuindo Sistemas

+40sistemasrecursos, APIs,

serviços, sites, ...

27Friday, June 14, 13

Page 28: Distribuindo Sistemas

28Friday, June 14, 13

Page 29: Distribuindo Sistemas

http://j.mp/rest-na-abril29Friday, June 14, 13

Page 30: Distribuindo Sistemas

• 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

Page 31: Distribuindo Sistemas

Lições(re)aprendidas

31Friday, June 14, 13

Page 32: Distribuindo Sistemas

Não existem exceções para a Lei de Postel

32Friday, June 14, 13

Page 33: Distribuindo Sistemas

API

case http.status_codewhen 200 faz_alguma_coisawhen 404 mostre_erro

Cliente200 OK

33Friday, June 14, 13

Page 34: Distribuindo Sistemas

API

case http.status_codewhen 200 faz_alguma_coisawhen 404 mostre_erro

Cliente410 Gone

??34Friday, June 14, 13

Page 35: Distribuindo Sistemas

API

case http.status_codewhen 200 faz_alguma_coisawhen 404 mostre_erro

Cliente984 Oi?

??35Friday, June 14, 13

Page 36: Distribuindo Sistemas

for tag in tags: processe_tag(tag)

API Cliente

{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}

36Friday, June 14, 13

Page 37: Distribuindo Sistemas

{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}

for tag in tags: processe_tag(tag)

API Cliente

??37Friday, June 14, 13

Page 38: Distribuindo Sistemas

API Cliente

{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}

persistir(doc)

38Friday, June 14, 13

Page 39: Distribuindo Sistemas

API Cliente

{ “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6}

??persistir(doc)

39Friday, June 14, 13

Page 40: Distribuindo Sistemas

Sempre existem ruídos

40Friday, June 14, 13

Page 41: Distribuindo Sistemas

• 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

Page 42: Distribuindo Sistemas

Esteja preparado para falhas

42Friday, June 14, 13

Page 43: Distribuindo Sistemas

43Friday, June 14, 13

Page 44: Distribuindo Sistemas

??44Friday, June 14, 13

Page 45: Distribuindo Sistemas

Cache

??45Friday, June 14, 13

Page 46: Distribuindo Sistemas

Cache não é só para performance

46Friday, June 14, 13

Page 47: Distribuindo Sistemas

• 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

Page 48: Distribuindo Sistemas

Redes não são mágicas

48Friday, June 14, 13

Page 49: Distribuindo Sistemas

Toda rede falha

49Friday, June 14, 13

Page 50: Distribuindo Sistemas

Toda rede oscila

50Friday, June 14, 13

Page 51: Distribuindo Sistemas

Pacotes se perdem

51Friday, June 14, 13

Page 52: Distribuindo Sistemas

API Cliente

API Cliente

API Cliente

10 ms

10 seg

timeout?

semresposta?

52Friday, June 14, 13

Page 53: Distribuindo Sistemas

Se a rede cair, quanto tempo seu cliente permanece vivo?

53Friday, June 14, 13

Page 54: Distribuindo Sistemas

54Friday, June 14, 13

Page 55: Distribuindo Sistemas

DDoS auto-inflingido

55Friday, June 14, 13

Page 56: Distribuindo Sistemas

Graceful Degradation

56Friday, June 14, 13

Page 57: Distribuindo Sistemas

• 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

Page 58: Distribuindo Sistemas

Perguntas?

58Friday, June 14, 13

Page 59: Distribuindo Sistemas

Obrigado!

59Friday, June 14, 13

Page 60: Distribuindo Sistemas

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