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

Micro Problemas!

Micro Problemas!

presented at tropical ruby 2015

Transcript

  1. O Caso dos Micro Servicos

  2. Marcos Matos @marcosccm

  3. um oferecimento ! Thought Works

  4. o besta fera O MonolitO

  5. Uma pedra alta posicionada por pessoas como um monumento religioso

    ! merrian-webster
  6. em software é mais ou menos a mesma coisa

  7. Uma codebase com um *bilhão de linhas responsável por toda

    lógica de negócios ! (o número atual pode variar)
  8. Atualmente programadores tem vergonha dos seus monólitos

  9. Temos várias formas de derrubar os monólitos

  10. RPC (alguém ja usou dRuby?) ! Gems ! SOA

  11. A nova modinha contra os monólitos são os…

  12. Micro ServiCos abençoados

  13. Pequenas bases de código com apenas uma *funcionalidade ! para

    algumas definições de uma e funcionalidade
  14. uma codebase codebase gigante e-commerce

  15. se transforma em vários serviços V endas Clientes Checkout Entregas

    Depósito Catálogo
  16. Fáceis de trocar Fáceis de entender Multiplas tecnologias Separação natural

  17. micro serviços eliminam toda a complexidade de um projeto! !

    as internets
  18. Claro que nÄAo! momento de grande surpresa para a platéia

  19. Complexidade é Energia

  20. Princípio da conservação da Complexidade ! ! A complexidade total

    de um sistema permanece a mesma ! A Física, sobre micro serviços
  21. Pequenos Serviços Grandes Ecossistemas!

  22. Design SOLIDo Infra-estrutura como Código Deploy Automático Monitoramento Testes de

    Integração
  23. Micro Serviços não perdoam

  24. DESIGN

  25. Micro serviços ! Uma base de código pequena ! que

    executa apenas uma funcionalidade
  26. Pequena pra quem?

  27. pequena o suficiente para: ! Ser rescrita em "pouco tempo"

    ! Ser mantida por um time pequeno ! Ser rapidamente entendida por um novo membro do time ! Grande o suficiente pra ser independente
  28. Onde começa uma funcionalidade?

  29. Não crie um serviço pra cada substantivo no seu domíno

  30. Foque em capacidades e autonomia tipo aquele tal de DDD

  31. Primeira Regra dos Micro Serviços ! Não comece um projeto

    com micro serviços ! chuta qual é a segunda
  32. comece com uma app rails normal Um e-commerce qualquer o

    mini-lito
  33. quando ela começar a ficar grande demais… código crescendo e-commerce

  34. extraia um serviço e-commerce serviço de checkout

  35. aprenda com a experiência e-commerce serviço de checkout

  36. extraia outro serviço e-commerce serviço de checkout serviço de catálogo

  37. aprenda com a experiência e-commerce serviço de checkout serviço de

    catálogo
  38. extraia mais um serviço e-commerce serviço de checkout serviço de

    catálogo entrega de produtos
  39. Isso só funciona se você manter sempre as opções do

    código abertas
  40. Insira uma palestra aqui

  41. DRY pode ser perigoso ! Cuidado com gems de cliente

  42. Prefira encapsular coisas como logging e clientes http

  43. Não se apegue as seus serviços! você vai errar, uma

    das poucas certezas da vida
  44. Operacoes

  45. Se manter um sistema em produção é difícil

  46. imagina 10, 20, 30, 100

  47. Qualquer passo manual terá que ser repetido dezenas de vezes

  48. Automatização BRUTA

  49. Puppet/Chef/ Ansible Terraform Docker Packer Uma penca de scripts Bash

  50. DE{PLOYING

  51. Os micro serviços demandam: entrega contínua

  52. serviços independentes ! entregas independentes

  53. não amarre seus serviços dev testes integração entrega dor e

    tristeza Serviço A Serviço B Serviço C
  54. entregas livres e soltas dev testes entrega Serviço A Serviço

    B Serviço C
  55. Monitoramento

  56. ssh production cat /var/log/servico.log | grep 500 ! O que

    pode dar errado?
  57. O problema tá em qual log? Em que serviço?

  58. não tem essa ! “o ambiente está fora"

  59. o ambiente está 58.32% no ar bom de boa morto

    tranquilo mortin capengando
  60. Abuse dos Health Checks

  61. Amazon CloudWatch NewRelic Prometheus Graphite God/Monit/Nagios

  62. Agregação de logs é fundamental

  63. Logstash Papertrail Splunk GrayLog syslogd [pra quem é roots de

    verdade)
  64. IDs de correlação header http cid: 42 cid: 42 cid:

    42 requisição original ! cid: 42
  65. Testes

  66. Se o teste funcional da sua aplicação já é lento

    pra desgraça
  67. Imagina um end-to- end em uma dúzia de serviços !

    Instável nem começa a descrever o resultado
  68. UI Integração Unidade Foco na piramide!

  69. Isole seus testes com contratos!

  70. Contrato ! Um subconjunto de funcionalidades providas por um serviço

    a outro serviço
  71. GET /clientes/:id ! ! { nome: “marcos”, idade: 28 }

    uma requisição uma resposta
  72. onde vive o contrato consumidor produtor O contrato serviço de

    entregas serviço de clientes
  73. { "name": “Get User By Name", "request": { "headers": {

    "Content-Type": "application/json" }, "http_method": "get", "path": “/user/:username", }, "response": { "status": 201, "properties": { "email": { "type": "string" } }}} materialize o contrato
  74. testes isolados Testes de integração produtor validação do contrato consumidor

    serviço de entregas serviço de clientes
  75. que nem usar o VCR?

  76. o produtor Conjunto de todas as interações com o produtor

    serviço de clientes serviço de entregas serviço de promoções serviço de pagamentos
  77. Pacto contratos em ruby gitbub.com/thoughtworks/pacto

  78. Lembrando

  79. Micro serviços são ótimos! ! (eu sei meio difícil de

    engolir essa agora)
  80. pequenos serviços trazem grandes complexidades ! Tio Ben, sobre micro

    serviços
  81. É tudo muito experimental

  82. Todos estes pontos devem ser encarados de frente

  83. Quase acabando..

  84. Algumas Referências ! http:/ /martinfowler.com/articles/microservices.html Definição de micro serviços por

    Martin Fowler e Jamis Lewis. ! http:/ /martinfowler.com/articles/microservice-testing/ testando micro serviços pro Toby Clemson ! http:/ /martinfowler.com/articles/consumerDrivenContracts.html artigo original dos testes de contrato, por Ian Robinson ! http:/ /www.thoughtworks.com/insights/blog/microservices-lessons- frontline Palestra sensacional sobre micro serviços por vários thoughtworkers ! http:/ /samnewman.io/books/building_microservices/ Livro do Sam Newman com tudo sobre micro serviços
  85. sorteio do Livro ! Building mIcroservices ! http:/ /info.thoughtworks.com/ livro-micro-servicos.html

  86. Obrigado! @@@@marcosccm

  87. Agradecimentos ! Meus colegas da ThoughtWorks por pelas discussões de

    email, material e toda a ajuda revisando esta palestra