escalando api's com nodejs, docker e rabbitmq

47
ESCALANDO E CONSUMINDO QUEUES &

Upload: matheus-fidelis

Post on 14-Feb-2017

67 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Escalando API's com NodeJS, Docker e RabbitMQ

ESCALANDO ECONSUMINDO

QUEUES &

Page 2: Escalando API's com NodeJS, Docker e RabbitMQ

MATHEUS FIDELISDesenvolvedor Web DevOps Twitter: @fidelissauroWeb: http://nanoshots.com.brGithub: https://github.com/msfidelis

Page 3: Escalando API's com NodeJS, Docker e RabbitMQ

O QUE SÃO QUEUES1

Page 4: Escalando API's com NodeJS, Docker e RabbitMQ

O QUE SÃO QUEUES

◦ Lista de itens◦ FIFO (First In, First Out)

Page 5: Escalando API's com NodeJS, Docker e RabbitMQ

PROCESSAMENTO DE QUEUES

Page 6: Escalando API's com NodeJS, Docker e RabbitMQ

PROCESSAMENTO ASSÍNCRONO DE QUEUES

Page 7: Escalando API's com NodeJS, Docker e RabbitMQ

COMO UMA QUEUES AJUDARIAM A ESCALAR MINHA API?

Page 8: Escalando API's com NodeJS, Docker e RabbitMQ

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

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

HISTORIA DE DESACOPLAMENTO

(3,2 s)

{status : 200}

Page 11: Escalando API's com NodeJS, Docker e RabbitMQ

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

HISTORIA DE DESACOPLAMENTO

{status : 200}

Page 13: Escalando API's com NodeJS, Docker e RabbitMQ

HISTORIA DE DESACOPLAMENT

(20 ms)

{status : 200}

Page 14: Escalando API's com NodeJS, Docker e RabbitMQ

QUE LINGUA ISSO FALA?3

Page 15: Escalando API's com NodeJS, Docker e RabbitMQ

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

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

ARQUITETURA DO AMQP

Page 18: Escalando API's com NodeJS, Docker e RabbitMQ

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

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

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

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

Page 23: Escalando API's com NodeJS, Docker e RabbitMQ

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

CRIANDO UMA CONEXÃO COM O RABBITMQ

Page 25: Escalando API's com NodeJS, Docker e RabbitMQ

ENVIANDO UMA MENSAGEM SIMPLES

Page 26: Escalando API's com NodeJS, Docker e RabbitMQ

ENVIANDO UMA MENSAGEM SIMPLES

Page 27: Escalando API's com NodeJS, Docker e RabbitMQ

ENVIANDO UMA MENSAGEM SIMPLES

Page 28: Escalando API's com NodeJS, Docker e RabbitMQ

CONSUMINDO UMA MENSAGEM SIMPLES

Page 29: Escalando API's com NodeJS, Docker e RabbitMQ

CONSUMINDO UMA MENSAGEM SIMPLES

Page 30: Escalando API's com NodeJS, Docker e RabbitMQ

ENVIANDO VÁRIAS MENSAGENS - SIMULANDO CLIENTES

Page 31: Escalando API's com NodeJS, Docker e RabbitMQ

CONSUMINDO VÁRIAS MENSAGENS - SIMULANDO PROCESSAMENTO

Page 32: Escalando API's com NodeJS, Docker e RabbitMQ

ESCALANDOComo os Containers ajudam a escalar nossos consumers conforme a demanda

Page 33: Escalando API's com NodeJS, Docker e RabbitMQ

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

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

DOCKERFILE DE BUILD

Page 36: Escalando API's com NodeJS, Docker e RabbitMQ

DOCKER COMPOSE COMO ORQUESTRADOR

Page 37: Escalando API's com NodeJS, Docker e RabbitMQ

FAZENDO DEPLOY DA NOSSA STACK

$ docker-compose build $ docker-compose up

Page 38: Escalando API's com NodeJS, Docker e RabbitMQ

FAZENDO DEPLOY DA NOSSA STACK

$ docker-compose ps

Page 39: Escalando API's com NodeJS, Docker e RabbitMQ

ESCALANDO SOB DEMANDA

Page 40: Escalando API's com NodeJS, Docker e RabbitMQ

ESCALANDO SOB DEMANDA

Page 41: Escalando API's com NodeJS, Docker e RabbitMQ

FAZENDO DEPLOY DA NOSSA STACK

Page 42: Escalando API's com NodeJS, Docker e RabbitMQ

FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS

$ docker-compose scale consumer=10

Page 43: Escalando API's com NodeJS, Docker e RabbitMQ

FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS

$ docker-compose ps

Page 44: Escalando API's com NodeJS, Docker e RabbitMQ

FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS

Page 45: Escalando API's com NodeJS, Docker e RabbitMQ

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

EXEMPLOS

https://github.com/msfidelis/QueuesComNodeEDocker

Page 47: Escalando API's com NodeJS, Docker e RabbitMQ

Obrigado!PERGUNTAS?Contato:@[email protected]@gmail.com

https://github.com/msfidelishttp://nanoshots.com.br