Micro serviços com node.js

43
MICRO SERVIÇOS COM NODE.JS BRUNO TRECENTI trecenti@github /brunotrecenti@twitter 1

Transcript of Micro serviços com node.js

Page 1: Micro serviços com node.js

MICRO SERVIÇOS COM NODE.JSBRUNO TRECENTI trecenti@github /brunotrecenti@twitter

1

Page 2: Micro serviços com node.js

t h o u g h tw o r k s . c om / j o i n

MUDE A CARA DO MERCADO DE TI

Page 3: Micro serviços com node.js

AGENDA

▫︎Micro Serviços

▫︎Um Design Evolucionário

▫︎Um exemplo em Node.js

▫︎Aspectos do teste e implantação

3

Page 4: Micro serviços com node.js

MICRO SERVIÇOSUma breve definição

4

Page 5: Micro serviços com node.js

Pequenos autônomos serviços, que trabalham em conjunto modelados em volta de um domínio de negócio.

5

Page 6: Micro serviços com node.js

AUTÔNOMOS Podem ser modificados e implantados de forma independente.

6

Imagem: http://martinfowler.com/articles/microservice-testing/

Page 7: Micro serviços com node.js

TRABALHAM EM CONJUNTO

Apesar de serem independentes eles conversam entre eles através de um canal.

7

Service A

Service B

Service C

HTTP

TCP

Page 8: Micro serviços com node.js

DOMÍNIO DE NEGÓCIO

Modelados para representar um domínio de negócio, geralmente cada parte representa um modelo ou entidade de todo o negócio.

8

Produtos

Pedidos

Usuários

Comércio Eletrônico

Outros Serviços

Page 9: Micro serviços com node.js

DESIGN EVOLUCIONÁRIOEvoluindo do monolítico

9

Page 10: Micro serviços com node.js

Criar e modificar o design de um sistema a medida em que ele é

desenvolvido.

10

Page 11: Micro serviços com node.js

TRÊS ASPECTOS

Construindo

Implantando

Mantendo

11

Page 12: Micro serviços com node.js

TRÊS ASPECTOS

Construindo

12

Implantando

Mantendo

Page 13: Micro serviços com node.js

O CAMINHO PARA MICRO SERVIÇOS

O caminho direto para uma arquitetura de micro serviços contém muitos riscos.

13

Imagem: http://martinfowler.com/bliki/MonolithFirst.html

Page 14: Micro serviços com node.js

MONOLÍTICO PRIMEIRO

Yagni (You aren’t gonna need it)

Presumir que o sistema precisar de algo no futuro, não indica que precisa ser construído agora (por que você pode não precisar)

14

MONOLÍTICO

Page 15: Micro serviços com node.js

EVOLUÍNDO

15

MONOLÍTICO

Page 16: Micro serviços com node.js

EVOLUINDO

16

MONOLÍTICOSERVIÇO

Extração

Page 17: Micro serviços com node.js

EVOLUINDO

17

MONOLÍTICOSERVIÇO

HTTP

Page 18: Micro serviços com node.js

EVOLUINDO

18

MONOLÍTICOSERVIÇO A

HTTP

HTTP

SERVIÇO B

Page 19: Micro serviços com node.js

Não é para qualquer um!

19

Imagem: http://martinfowler.com/bliki/MicroservicePrerequisites.html

Page 20: Micro serviços com node.js

PRÉ-REQUISITOS

Provisionamento Rápido

Criar servidores de forma rápida e fácil, geralmente através de automação e servidores na nuvem.

Monitoramento Básico

Habilidade de identificar e depurar problemas entre os diferentes serviços.

Implantação Rápida ou Contínua

Implantar de forma contínua os serviços nos diferentes ambientes (testes, produção, etc). A cultura de DevOps ajuda na manutenção e implantação dos serviços.

20

Page 21: Micro serviços com node.js

UM EXEMPLO EM NODE.JSComo node.js e seus frameworks ajudam a criar micro-serviços

21

Page 22: Micro serviços com node.js

22

Page 23: Micro serviços com node.js

POR QUE NODE.JS?

Rápido Provisionamento e fácil implantação contínua.

Feito para construir sistemas distribuídos.

Mas não é a bala de prata!

Uma vantagem de micro serviços é a heterogeneidade tecnológica.

23

Page 24: Micro serviços com node.js

OBJETIVO

24

Page 25: Micro serviços com node.js

OBJETIVO

25

Page 26: Micro serviços com node.js

MONOLÍTICO > RESTFUL

26

Routers

restful/api/users.js restful/api/app.js

Page 27: Micro serviços com node.js

MONOLÍTICO > RESTFUL

27

Apps

restful/api/app.js restful/app.js

Page 28: Micro serviços com node.js

MUDANÇA NA ESTRATÉGIA DE TESTES

28

Imagem: http://martinfowler.com/articles/microservice-testing/

Page 29: Micro serviços com node.js

TESTES NA API

29

> mocha + chai.js

> supertest

> sinon.js

Funcional ou unitário?

Integrar ou mockar?

Testes de Contrato?

Page 30: Micro serviços com node.js

TESTES NO CONSUMIDOR

30

> mocha + chai.js

> supertest

> nock / mountebank

> pact

Funcional ou unitário?

Testes de componente?

Contratos dirigidos pelo consumidor?

Page 31: Micro serviços com node.js

MUDANÇAS OBSERVADAS

31

Monolítico

▫︎ Views + Model

▫︎Controllers

▫︎ Testes Unitários + Funcionais

▫︎Domínio de negócio acoplado

▫︎Host único

RESTful

▫︎Model + JSON

▫︎ REST + HTTP Clients

▫︎ Testes Unitários + Funcionais + Integração + Contrato + Componente

▫︎Domínio de negócio isolado

▫︎Host único, paths dedicados

Page 32: Micro serviços com node.js

FLEXIBILIDADE E EVOLUÇÃO

32

APP

ROUTERS

APP CONTAINER

ROUTERS

Page 33: Micro serviços com node.js

FLEXIBILIDADE E EVOLUÇÃO

33

APP

ROUTERS

APP

ROUTERS

https://192.168.0.1:3000 https://192.168.0.1:3100

Page 34: Micro serviços com node.js

RESTFUL > MICRO SERVIÇO

34

Apps autônomas

micro-services/users/app.js

Page 35: Micro serviços com node.js

RESTFUL > MICRO SERVIÇO

35

Pensando na infra-estrutura

▫︎ Entrega/Integração Contínua

▫︎ Provisionamento

▫︎Monitoramento

Page 36: Micro serviços com node.js

ENTREGA CONTÍNUA

36

Um grande build

Imagem: http://www.slideshare.net/ThoughtWorks/deploying-operating-microservices Video: https://www.youtube.com/watch?v=OTSlg7_y3bA

Page 37: Micro serviços com node.js

ENTREGA CONTÍNUA

37

Um build por serviço, repositório único

Imagem: http://www.slideshare.net/ThoughtWorks/deploying-operating-microservices Video: https://www.youtube.com/watch?v=OTSlg7_y3bA

Page 38: Micro serviços com node.js

ENTREGA CONTÍNUA

38

Um build por serviço, vários repositórios

Imagem: http://www.slideshare.net/ThoughtWorks/deploying-operating-microservices Video: https://www.youtube.com/watch?v=OTSlg7_y3bA

Page 39: Micro serviços com node.js

PROVISIONAMENTO RÁPIDO

39

Page 40: Micro serviços com node.js

PROVISIONAMENTO RÁPIDO

40

Através de APIs

Page 41: Micro serviços com node.js

INFRA-ESTRUTURA COM O CÓDIGO

41

Page 42: Micro serviços com node.js

MONITORAMENTO

42

Page 43: Micro serviços com node.js

brunotrecenti@twitter trecenti@github

VALEU!