Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Distribuindo Sistemas

Distribuindo Sistemas

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

Fcced4ae869ba4632fecfef5c4189075?s=128

Luiz Rocha

June 14, 2013
Tweet

Transcript

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

    Sistemas 1 Friday, June 14, 13
  2. br.linkedin.com/lsdrocha Luiz Rocha {github.com/lsdr twitter.com/lsdr lsdr.net 2 Friday, June 14,

    13
  3. Sistemas distribuídos são legais 3 Friday, June 14, 13

  4. p2p 4 Friday, June 14, 13

  5. client-server 5 Friday, June 14, 13

  6. clustering n-tier 6 Friday, June 14, 13

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

  8. • Você está cercado de sistemas distribuídos • Diversos “estilos”

    de arquitetura • Sistema de Sistemas recapitulando 8 Friday, June 14, 13
  9. Fatos Públicos e Notórios 9 Friday, June 14, 13

  10. 1960 - 1970 10 Friday, June 14, 13

  11. 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 11 Friday, June 14, 13
  12. Concorrência Desacoplamento de Componentes Ausência de Memória Compartilhada Relógios Independentes

    Propagação de Falhas 12 Friday, June 14, 13
  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 13 Friday, June 14, 13
  14. Princípio da Robustez “Seja conservador no que você faz, seja

    liberal com o que aceita dos outros.” Jon Postel 14 Friday, June 14, 13
  15. A rede é confiável A latência é zero A banda

    é infinita A rede é segura Topologias não mudam Existe um administrador Custo de transporte é zero A rede é homogênea 8Falácias da Computação Distribuída Peter Deutsch 1994 15 Friday, June 14, 13
  16. • 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 16 Friday, June 14, 13
  17. Sistemas de Sistemas 17 Friday, June 14, 13

  18. 18 Friday, June 14, 13

  19. Outro Publicador? WTF? 19 Friday, June 14, 13

  20. 20 Friday, June 14, 13

  21. requisitos negócios pessoas orçamentos prioridades culturas independência escala simplicidade manutenção

    21 Friday, June 14, 13
  22. Lei de Gall “Um sistema complexo que funciona invariavelmente evoluiu

    de um sistema simples que funcionava.” 22 Friday, June 14, 13
  23. CMS CDS WKS 23 Friday, June 14, 13

  24. CMS criação/gestão CDS WKS 24 Friday, June 14, 13

  25. CMS CDS distribuição WKS 25 Friday, June 14, 13

  26. CMS CDS WKS inteligência 26 Friday, June 14, 13

  27. +40 sistemas recursos, APIs, serviços, sites, ... 27 Friday, June

    14, 13
  28. 28 Friday, June 14, 13

  29. http://j.mp/rest-na-abril 29 Friday, June 14, 13

  30. • Componentização e independência das partes • Construção por composição

    • Emerge da necessidade, não de desenho prévio recapitulando 30 Friday, June 14, 13
  31. Lições (re)aprendidas 31 Friday, June 14, 13

  32. Não existem exceções para a Lei de Postel 32 Friday,

    June 14, 13
  33. API case http.status_code when 200 faz_alguma_coisa when 404 mostre_erro Cliente

    200 OK 33 Friday, June 14, 13
  34. API case http.status_code when 200 faz_alguma_coisa when 404 mostre_erro Cliente

    410 Gone ?? 34 Friday, June 14, 13
  35. API case http.status_code when 200 faz_alguma_coisa when 404 mostre_erro Cliente

    984 Oi? ?? 35 Friday, June 14, 13
  36. for tag in tags: processe_tag(tag) API Cliente { “titulo”: “Distribuindo

    Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6 } 36 Friday, June 14, 13
  37. { “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”: 6 }

    for tag in tags: processe_tag(tag) API Cliente ?? 37 Friday, June 14, 13
  38. API Cliente { “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”:

    6 } persistir(doc) 38 Friday, June 14, 13
  39. API Cliente { “titulo”: “Distribuindo Sistemas”, “tags”: [“sistemas”, “diversão”], “nota”:

    6 } ?? persistir(doc) 39 Friday, June 14, 13
  40. Sempre existem ruídos 40 Friday, June 14, 13

  41. • 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 41 Friday, June 14, 13
  42. Esteja preparado para falhas 42 Friday, June 14, 13

  43. 43 Friday, June 14, 13

  44. ?? 44 Friday, June 14, 13

  45. Cache ?? 45 Friday, June 14, 13

  46. Cache não é só para performance 46 Friday, June 14,

    13
  47. • independência entre cliente e servidor • cópias locais podem

    introduzir inconsistências, mas adicionam resiliência • invalidar cache é insano, deixe expirar 47 Friday, June 14, 13
  48. Redes não são mágicas 48 Friday, June 14, 13

  49. Toda rede falha 49 Friday, June 14, 13

  50. Toda rede oscila 50 Friday, June 14, 13

  51. Pacotes se perdem 51 Friday, June 14, 13

  52. API Cliente API Cliente API Cliente 10 ms 10 seg

    timeout? sem resposta? 52 Friday, June 14, 13
  53. Se a rede cair, quanto tempo seu cliente permanece vivo?

    53 Friday, June 14, 13
  54. 54 Friday, June 14, 13

  55. DDoS auto-inflingido 55 Friday, June 14, 13

  56. Graceful Degradation 56 Friday, June 14, 13

  57. • 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 57 Friday, June 14, 13
  58. Perguntas? 58 Friday, June 14, 13

  59. Obrigado! 59 Friday, June 14, 13

  60. 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/ 60 Friday, June 14, 13