Micro serviços com node.js

Post on 09-Aug-2015

118 views 2 download

Transcript of Micro serviços com node.js

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

1

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

MUDE A CARA DO MERCADO DE TI

AGENDA

▫︎Micro Serviços

▫︎Um Design Evolucionário

▫︎Um exemplo em Node.js

▫︎Aspectos do teste e implantação

3

MICRO SERVIÇOSUma breve definição

4

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

5

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

6

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

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

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

DESIGN EVOLUCIONÁRIOEvoluindo do monolítico

9

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

desenvolvido.

10

TRÊS ASPECTOS

Construindo

Implantando

Mantendo

11

TRÊS ASPECTOS

Construindo

12

Implantando

Mantendo

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

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

EVOLUÍNDO

15

MONOLÍTICO

EVOLUINDO

16

MONOLÍTICOSERVIÇO

Extração

EVOLUINDO

17

MONOLÍTICOSERVIÇO

HTTP

EVOLUINDO

18

MONOLÍTICOSERVIÇO A

HTTP

HTTP

SERVIÇO B

Não é para qualquer um!

19

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

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

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

21

22

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

OBJETIVO

24

OBJETIVO

25

MONOLÍTICO > RESTFUL

26

Routers

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

MONOLÍTICO > RESTFUL

27

Apps

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

MUDANÇA NA ESTRATÉGIA DE TESTES

28

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

TESTES NA API

29

> mocha + chai.js

> supertest

> sinon.js

Funcional ou unitário?

Integrar ou mockar?

Testes de Contrato?

TESTES NO CONSUMIDOR

30

> mocha + chai.js

> supertest

> nock / mountebank

> pact

Funcional ou unitário?

Testes de componente?

Contratos dirigidos pelo consumidor?

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

FLEXIBILIDADE E EVOLUÇÃO

32

APP

ROUTERS

APP CONTAINER

ROUTERS

FLEXIBILIDADE E EVOLUÇÃO

33

APP

ROUTERS

APP

ROUTERS

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

RESTFUL > MICRO SERVIÇO

34

Apps autônomas

micro-services/users/app.js

RESTFUL > MICRO SERVIÇO

35

Pensando na infra-estrutura

▫︎ Entrega/Integração Contínua

▫︎ Provisionamento

▫︎Monitoramento

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

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

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

PROVISIONAMENTO RÁPIDO

39

PROVISIONAMENTO RÁPIDO

40

Através de APIs

INFRA-ESTRUTURA COM O CÓDIGO

41

MONITORAMENTO

42

brunotrecenti@twitter trecenti@github

VALEU!