ESCALANDO ECONSUMINDO
QUEUES &
MATHEUS FIDELISDesenvolvedor Web DevOps Twitter: @fidelissauroWeb: http://nanoshots.com.brGithub: https://github.com/msfidelis
O QUE SÃO QUEUES1
O QUE SÃO QUEUES
◦ Lista de itens◦ FIFO (First In, First Out)
PROCESSAMENTO DE QUEUES
PROCESSAMENTO ASSÍNCRONO DE QUEUES
COMO UMA QUEUES AJUDARIAM A ESCALAR MINHA API?
NO QUE ISSO ME AJUDA?
◦ Processamento transparente◦Desacoplagem de sistemas◦Facil integração◦Comunicação uniforme◦“Deixa comigo e segue teu caminho”
“
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}
“
HISTORIA DE DESACOPLAMENTO
(3,2 s)
{status : 200}
“
HISTORIA DE DESACOPLAMENTO
(3,5 s)(5,9 s)
(4,3 s)
(3,2 s)
“
HISTORIA DE DESACOPLAMENTO
{status : 200}
“
HISTORIA DE DESACOPLAMENT
(20 ms)
{status : 200}
QUE LINGUA ISSO FALA?3
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
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.
ARQUITETURA DO AMQP
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)
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.
RABBITMQUma mão na roda na gestão de Queues em pequena, média e larga escala.
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/
“
CRIANDO UMA CONEXÃO COM O RABBITMQ
$ npm install amqplib --save
http://www.squaremobius.net/amqp.node/channel_api.html
“
CRIANDO UMA CONEXÃO COM O RABBITMQ
“
ENVIANDO UMA MENSAGEM SIMPLES
“
ENVIANDO UMA MENSAGEM SIMPLES
“
ENVIANDO UMA MENSAGEM SIMPLES
“
CONSUMINDO UMA MENSAGEM SIMPLES
“
CONSUMINDO UMA MENSAGEM SIMPLES
“
ENVIANDO VÁRIAS MENSAGENS - SIMULANDO CLIENTES
“
CONSUMINDO VÁRIAS MENSAGENS - SIMULANDO PROCESSAMENTO
ESCALANDOComo os Containers ajudam a escalar nossos consumers conforme a demanda
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
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/
“
DOCKERFILE DE BUILD
“
DOCKER COMPOSE COMO ORQUESTRADOR
FAZENDO DEPLOY DA NOSSA STACK
$ docker-compose build $ docker-compose up
FAZENDO DEPLOY DA NOSSA STACK
$ docker-compose ps
ESCALANDO SOB DEMANDA
ESCALANDO SOB DEMANDA
FAZENDO DEPLOY DA NOSSA STACK
FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS
$ docker-compose scale consumer=10
FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS
$ docker-compose ps
FAZENDO DEPLOY DE 10 CONTAINERS DE CONSUMERS
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.
EXEMPLOS
https://github.com/msfidelis/QueuesComNodeEDocker
Obrigado!PERGUNTAS?Contato:@[email protected]@gmail.com
https://github.com/msfidelishttp://nanoshots.com.br