escalando api's com nodejs, docker e rabbitmq

Post on 14-Feb-2017

64 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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:@fidelissauromatheus.fidelis@superlogica.commsfidelis01@gmail.com

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

top related