escalando api's com nodejs, docker e rabbitmq
TRANSCRIPT
![Page 1: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/1.jpg)
ESCALANDO ECONSUMINDO
QUEUES &
![Page 2: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/2.jpg)
MATHEUS FIDELISDesenvolvedor Web DevOps Twitter: @fidelissauroWeb: http://nanoshots.com.brGithub: https://github.com/msfidelis
![Page 3: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/3.jpg)
O QUE SÃO QUEUES1
![Page 4: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/4.jpg)
O QUE SÃO QUEUES
◦ Lista de itens◦ FIFO (First In, First Out)
![Page 5: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/5.jpg)
PROCESSAMENTO DE QUEUES
![Page 6: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/6.jpg)
PROCESSAMENTO ASSÍNCRONO DE QUEUES
![Page 7: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/7.jpg)
COMO UMA QUEUES AJUDARIAM A ESCALAR MINHA API?
![Page 8: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/8.jpg)
NO QUE ISSO ME AJUDA?
◦ Processamento transparente◦Desacoplagem de sistemas◦Facil integração◦Comunicação uniforme◦“Deixa comigo e segue teu caminho”
![Page 9: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/9.jpg)
“
HISTORIA DE DESACOPLAMENTO
(3,2 s)
{ NOME: JOÃO PRODUTOS: { { item: geladeira, valor: 1200.00 } }, cc : { numero: 123123123, cvv: 123123 validade 01/08/2028 }}
{status : 200}
![Page 10: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/10.jpg)
“
HISTORIA DE DESACOPLAMENTO
(3,2 s)
{status : 200}
![Page 11: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/11.jpg)
“
HISTORIA DE DESACOPLAMENTO
(3,5 s)(5,9 s)
(4,3 s)
(3,2 s)
![Page 12: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/12.jpg)
“
HISTORIA DE DESACOPLAMENTO
{status : 200}
![Page 13: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/13.jpg)
“
HISTORIA DE DESACOPLAMENT
(20 ms)
{status : 200}
![Page 14: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/14.jpg)
QUE LINGUA ISSO FALA?3
![Page 15: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/15.jpg)
QUE LINGUA ISSO FALA?
◦AMQP▫(Mais) Um protocolo de comunicação em
rede▫Cria um canal virtual dentro de uma conexão
TCP▫TCP é custoso e demorado e limitado. ▫Canais virtuais dentro do TCP ilimitados. ▫Muitas threads compartilham a mesma
conexão TCP
![Page 16: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/16.jpg)
ARQUITETURA DO AMQP
◦Publishers e Consumers◦Exchanges: Onde os Publishers publicam as mensagens
◦Routes ou Bindings: Padrões que definem a Queue destino da mensagem.
◦Queue: Armazena as mensagens que vão ser consumidas pelos Consumers.
![Page 17: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/17.jpg)
ARQUITETURA DO AMQP
![Page 18: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/18.jpg)
MENSAGENS PARA O EXCHANGES
◦Payload: Corpo da mensagem. Pode ser um JSON, um XML, uma imagem, um vídeo, uma string e etc
◦Label: Header que descreve o Payload e pra onde ele vai ser enviado (Queue)
![Page 19: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/19.jpg)
CONSUMERS E QUEUES
◦Classico Round-Robin◦A queue envia a mensagem para um consumer.
◦O consumer pega a mensagem e envia o sucesso do recebimento/execução (ACK).
◦O servidor apaga a mensagem da fila◦Em caso de erro, ou sem ACK, o servidor retorna para distribuição.
![Page 20: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/20.jpg)
RABBITMQUma mão na roda na gestão de Queues em pequena, média e larga escala.
![Page 21: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/21.jpg)
QUE LINGUA ISSO FALA?
◦RabbitMQ▫É um servidor de mensagens▫Suporte a AMQP▫Escrito em Erlang▫Open Source▫Minimalista▫Possibilidade de Distribuição▫API▫CLI▫Web UI
https://www.rabbitmq.com/
![Page 22: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/22.jpg)
“
![Page 23: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/23.jpg)
CRIANDO UMA CONEXÃO COM O RABBITMQ
$ npm install amqplib --save
http://www.squaremobius.net/amqp.node/channel_api.html
![Page 24: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/24.jpg)
“
CRIANDO UMA CONEXÃO COM O RABBITMQ
![Page 25: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/25.jpg)
“
ENVIANDO UMA MENSAGEM SIMPLES
![Page 26: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/26.jpg)
“
ENVIANDO UMA MENSAGEM SIMPLES
![Page 27: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/27.jpg)
“
ENVIANDO UMA MENSAGEM SIMPLES
![Page 28: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/28.jpg)
“
CONSUMINDO UMA MENSAGEM SIMPLES
![Page 29: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/29.jpg)
“
CONSUMINDO UMA MENSAGEM SIMPLES
![Page 30: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/30.jpg)
“
ENVIANDO VÁRIAS MENSAGENS - SIMULANDO CLIENTES
![Page 31: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/31.jpg)
“
CONSUMINDO VÁRIAS MENSAGENS - SIMULANDO PROCESSAMENTO
![Page 32: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/32.jpg)
ESCALANDOComo os Containers ajudam a escalar nossos consumers conforme a demanda
![Page 33: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/33.jpg)
ESCALANDO CONTAINERS DE CONSUMERS
◦Escalando sob demanda!▫Containers são rápidos▫Fácil replicação▫Escalar em quantidade horizontalmente▫Integração com ambientes de CI & CD▫Failover ▫Poder ser Docker, LXC, Rocket e etc.▫Criar vários cenários
![Page 34: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/34.jpg)
Docker◦Empacotador
de ambientes◦Gerenciador de
Containers LXC
ESCALANDO CONTAINERS DE CONSUMERS
Docker-Compose
◦Orquestrador de Containers Docker
◦Gerenciamento Simplista
https://docs.docker.com/https://docs.docker.com/compose/
![Page 35: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/35.jpg)
“
DOCKERFILE DE BUILD
![Page 36: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/36.jpg)
“
DOCKER COMPOSE COMO ORQUESTRADOR
![Page 37: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/37.jpg)
FAZENDO DEPLOY DA NOSSA STACK
$ docker-compose build $ docker-compose up
![Page 38: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/38.jpg)
FAZENDO DEPLOY DA NOSSA STACK
$ docker-compose ps
![Page 39: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/39.jpg)
ESCALANDO SOB DEMANDA
![Page 40: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/40.jpg)
ESCALANDO SOB DEMANDA
![Page 41: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/41.jpg)
FAZENDO DEPLOY DA NOSSA STACK
![Page 42: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/42.jpg)
FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS
$ docker-compose scale consumer=10
![Page 43: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/43.jpg)
FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS
$ docker-compose ps
![Page 44: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/44.jpg)
FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS
![Page 45: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/45.jpg)
OPÇÕES MAIS AVANÇADAS DE ORQUESTRAÇÃO
Docker SwarmFerramenta de criação e orquestração de Clusters nativa do Docker. Pequena, média e grande escala.
Google KubernetesFerramenta para gerenciamento de Clusters de Containers Docker ou Rocket. Média, grande e enorme escala.
Rocket (Ou RKT) Ferramenta de orquestração de containers e clusters de CoreOS. Média, grande e enorme escala.
![Page 46: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/46.jpg)
EXEMPLOS
https://github.com/msfidelis/QueuesComNodeEDocker
![Page 47: Escalando API's com NodeJS, Docker e RabbitMQ](https://reader035.vdocuments.pub/reader035/viewer/2022062306/58a3148f1a28ab1d068b55a1/html5/thumbnails/47.jpg)
Obrigado!PERGUNTAS?Contato:@[email protected]@gmail.com
https://github.com/msfidelishttp://nanoshots.com.br