MICRO SERVIÇOS
COM NODE.JS
BRUNO TRECENTI
trecenti@github /brunotrecenti@twitter
1
t h o u g h t w o r k s . c o m / 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ÇOS
Uma 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ÁRIO
Evoluindo 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ÍTICO
SERVIÇO
Extração
EVOLUINDO
17
MONOLÍTICO
SERVIÇO
HTTP
EVOLUINDO
18
MONOLÍTICO
SERVIÇ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.JS
Como 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!

Micro serviços com node.js