Slide 1

Slide 1 text

O Caso dos Micro Servicos

Slide 2

Slide 2 text

Marcos Matos @marcosccm

Slide 3

Slide 3 text

um oferecimento ! Thought Works

Slide 4

Slide 4 text

o besta fera O MonolitO

Slide 5

Slide 5 text

Uma pedra alta posicionada por pessoas como um monumento religioso ! merrian-webster

Slide 6

Slide 6 text

em software é mais ou menos a mesma coisa

Slide 7

Slide 7 text

Uma codebase com um *bilhão de linhas responsável por toda lógica de negócios ! (o número atual pode variar)

Slide 8

Slide 8 text

Atualmente programadores tem vergonha dos seus monólitos

Slide 9

Slide 9 text

Temos várias formas de derrubar os monólitos

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Micro ServiCos abençoados

Slide 13

Slide 13 text

Pequenas bases de código com apenas uma *funcionalidade ! para algumas definições de uma e funcionalidade

Slide 14

Slide 14 text

uma codebase codebase gigante e-commerce

Slide 15

Slide 15 text

se transforma em vários serviços V endas Clientes Checkout Entregas Depósito Catálogo

Slide 16

Slide 16 text

Fáceis de trocar Fáceis de entender Multiplas tecnologias Separação natural

Slide 17

Slide 17 text

micro serviços eliminam toda a complexidade de um projeto! ! as internets

Slide 18

Slide 18 text

Claro que nÄAo! momento de grande surpresa para a platéia

Slide 19

Slide 19 text

Complexidade é Energia

Slide 20

Slide 20 text

Princípio da conservação da Complexidade ! ! A complexidade total de um sistema permanece a mesma ! A Física, sobre micro serviços

Slide 21

Slide 21 text

Pequenos Serviços Grandes Ecossistemas!

Slide 22

Slide 22 text

Design SOLIDo Infra-estrutura como Código Deploy Automático Monitoramento Testes de Integração

Slide 23

Slide 23 text

Micro Serviços não perdoam

Slide 24

Slide 24 text

DESIGN

Slide 25

Slide 25 text

Micro serviços ! Uma base de código pequena ! que executa apenas uma funcionalidade

Slide 26

Slide 26 text

Pequena pra quem?

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Onde começa uma funcionalidade?

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Foque em capacidades e autonomia tipo aquele tal de DDD

Slide 31

Slide 31 text

Primeira Regra dos Micro Serviços ! Não comece um projeto com micro serviços ! chuta qual é a segunda

Slide 32

Slide 32 text

comece com uma app rails normal Um e-commerce qualquer o mini-lito

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

aprenda com a experiência e-commerce serviço de checkout serviço de catálogo

Slide 38

Slide 38 text

extraia mais um serviço e-commerce serviço de checkout serviço de catálogo entrega de produtos

Slide 39

Slide 39 text

Isso só funciona se você manter sempre as opções do código abertas

Slide 40

Slide 40 text

Insira uma palestra aqui

Slide 41

Slide 41 text

DRY pode ser perigoso ! Cuidado com gems de cliente

Slide 42

Slide 42 text

Prefira encapsular coisas como logging e clientes http

Slide 43

Slide 43 text

Não se apegue as seus serviços! você vai errar, uma das poucas certezas da vida

Slide 44

Slide 44 text

Operacoes

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

imagina 10, 20, 30, 100

Slide 47

Slide 47 text

Qualquer passo manual terá que ser repetido dezenas de vezes

Slide 48

Slide 48 text

Automatização BRUTA

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

DE{PLOYING

Slide 51

Slide 51 text

Os micro serviços demandam: entrega contínua

Slide 52

Slide 52 text

serviços independentes ! entregas independentes

Slide 53

Slide 53 text

não amarre seus serviços dev testes integração entrega dor e tristeza Serviço A Serviço B Serviço C

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

Monitoramento

Slide 56

Slide 56 text

ssh production cat /var/log/servico.log | grep 500 ! O que pode dar errado?

Slide 57

Slide 57 text

O problema tá em qual log? Em que serviço?

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

o ambiente está 58.32% no ar bom de boa morto tranquilo mortin capengando

Slide 60

Slide 60 text

Abuse dos Health Checks

Slide 61

Slide 61 text

Amazon CloudWatch NewRelic Prometheus Graphite God/Monit/Nagios

Slide 62

Slide 62 text

Agregação de logs é fundamental

Slide 63

Slide 63 text

Logstash Papertrail Splunk GrayLog syslogd [pra quem é roots de verdade)

Slide 64

Slide 64 text

IDs de correlação header http cid: 42 cid: 42 cid: 42 requisição original ! cid: 42

Slide 65

Slide 65 text

Testes

Slide 66

Slide 66 text

Se o teste funcional da sua aplicação já é lento pra desgraça

Slide 67

Slide 67 text

Imagina um end-to- end em uma dúzia de serviços ! Instável nem começa a descrever o resultado

Slide 68

Slide 68 text

UI Integração Unidade Foco na piramide!

Slide 69

Slide 69 text

Isole seus testes com contratos!

Slide 70

Slide 70 text

Contrato ! Um subconjunto de funcionalidades providas por um serviço a outro serviço

Slide 71

Slide 71 text

GET /clientes/:id ! ! { nome: “marcos”, idade: 28 } uma requisição uma resposta

Slide 72

Slide 72 text

onde vive o contrato consumidor produtor O contrato serviço de entregas serviço de clientes

Slide 73

Slide 73 text

{ "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

Slide 74

Slide 74 text

testes isolados Testes de integração produtor validação do contrato consumidor serviço de entregas serviço de clientes

Slide 75

Slide 75 text

que nem usar o VCR?

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

Pacto contratos em ruby gitbub.com/thoughtworks/pacto

Slide 78

Slide 78 text

Lembrando

Slide 79

Slide 79 text

Micro serviços são ótimos! ! (eu sei meio difícil de engolir essa agora)

Slide 80

Slide 80 text

pequenos serviços trazem grandes complexidades ! Tio Ben, sobre micro serviços

Slide 81

Slide 81 text

É tudo muito experimental

Slide 82

Slide 82 text

Todos estes pontos devem ser encarados de frente

Slide 83

Slide 83 text

Quase acabando..

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

sorteio do Livro ! Building mIcroservices ! http:/ /info.thoughtworks.com/ livro-micro-servicos.html

Slide 86

Slide 86 text

Obrigado! @@@@marcosccm

Slide 87

Slide 87 text

Agradecimentos ! Meus colegas da ThoughtWorks por pelas discussões de email, material e toda a ajuda revisando esta palestra