Transcript
MICRO SERVIÇOS COM NODE.JSBRUNO TRECENTI trecenti@github /brunotrecenti@twitter
1
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!
top related