SlideShare uma empresa Scribd logo
ESCALANDO E
CONSUMINDO
QUEUES
&
MATHEUS FIDELIS
Desenvolvedor Web DevOps
Twitter: @fidelissauro
Web: http://nanoshots.com.br
Github: 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.
RABBITMQ
Uma 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
ESCALANDO
Como 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 Swarm
Ferramenta de
criação e
orquestração de
Clusters nativa do
Docker.
Pequena, média e
grande escala.
Google
Kubernetes
Ferramenta 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:
@fidelissauro
matheus.fidelis@superlogica.com
msfidelis01@gmail.com
https://github.com/msfidelis
http://nanoshots.com.br
Anúncio

Mais conteúdo relacionado

Mais procurados (20)

HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Salesforce Developers Japan
 
FAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにFAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのために
Nat Sakimura
 
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Black Belt Techシリーズ  Amazon KinesisAWS Black Belt Techシリーズ  Amazon Kinesis
AWS Black Belt Techシリーズ Amazon Kinesis
Amazon Web Services Japan
 
Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례 - 박경표 AWS 솔루션즈 아키텍트 / 임상석...
Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례  - 박경표 AWS 솔루션즈 아키텍트 / 임상석...Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례  - 박경표 AWS 솔루션즈 아키텍트 / 임상석...
Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례 - 박경표 AWS 솔루션즈 아키텍트 / 임상석...
Amazon Web Services Korea
 
[Azure Governance] Lesson 3 : Azure Tags
[Azure Governance] Lesson 3 : Azure Tags[Azure Governance] Lesson 3 : Azure Tags
[Azure Governance] Lesson 3 : Azure Tags
☁ Hicham KADIRI ☁
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 
S3 整合性モデルと Hadoop/Spark の話
S3 整合性モデルと Hadoop/Spark の話S3 整合性モデルと Hadoop/Spark の話
S3 整合性モデルと Hadoop/Spark の話
Noritaka Sekiyama
 
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
Amazon Web Services Japan
 
20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM 20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM
Amazon Web Services Japan
 
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
Amazon Web Services Korea
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
Yoonsung Jung
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
Computação em nuvem
Computação em nuvemComputação em nuvem
Computação em nuvem
Thiago Rodrigues
 
AWS RDSでの冗長化
AWS RDSでの冗長化AWS RDSでの冗長化
AWS RDSでの冗長化
iPride Co., Ltd.
 
Introdução Ao Web Design
Introdução Ao Web DesignIntrodução Ao Web Design
Introdução Ao Web Design
Sandra Oliveira
 
データ活用を加速するAWS分析サービスのご紹介
データ活用を加速するAWS分析サービスのご紹介データ活用を加速するAWS分析サービスのご紹介
データ活用を加速するAWS分析サービスのご紹介
Amazon Web Services Japan
 
AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
Amazon Web Services Japan
 
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNA
 
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...
Amazon Web Services Korea
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Salesforce Developers Japan
 
FAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのためにFAPI and beyond - よりよいセキュリティのために
FAPI and beyond - よりよいセキュリティのために
Nat Sakimura
 
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Black Belt Techシリーズ  Amazon KinesisAWS Black Belt Techシリーズ  Amazon Kinesis
AWS Black Belt Techシリーズ Amazon Kinesis
Amazon Web Services Japan
 
Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례 - 박경표 AWS 솔루션즈 아키텍트 / 임상석...
Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례  - 박경표 AWS 솔루션즈 아키텍트 / 임상석...Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례  - 박경표 AWS 솔루션즈 아키텍트 / 임상석...
Kurly는 AWS를 어떻게 사용하고 있을까? - 성공적 리테일 디지털 트랜스포메이션 사례 - 박경표 AWS 솔루션즈 아키텍트 / 임상석...
Amazon Web Services Korea
 
[Azure Governance] Lesson 3 : Azure Tags
[Azure Governance] Lesson 3 : Azure Tags[Azure Governance] Lesson 3 : Azure Tags
[Azure Governance] Lesson 3 : Azure Tags
☁ Hicham KADIRI ☁
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 
S3 整合性モデルと Hadoop/Spark の話
S3 整合性モデルと Hadoop/Spark の話S3 整合性モデルと Hadoop/Spark の話
S3 整合性モデルと Hadoop/Spark の話
Noritaka Sekiyama
 
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
Amazon Web Services Japan
 
20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM 20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM
Amazon Web Services Japan
 
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
Amazon Web Services Korea
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
Yoonsung Jung
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
Introdução Ao Web Design
Introdução Ao Web DesignIntrodução Ao Web Design
Introdução Ao Web Design
Sandra Oliveira
 
データ活用を加速するAWS分析サービスのご紹介
データ活用を加速するAWS分析サービスのご紹介データ活用を加速するAWS分析サービスのご紹介
データ活用を加速するAWS分析サービスのご紹介
Amazon Web Services Japan
 
AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
Amazon Web Services Japan
 
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNA
 
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...
Amazon Web Services Korea
 

Destaque (9)

Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
Matheus Fidelis
 
Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"
Ricardo Maganhati Junior
 
Desmistificando a Amazon AWS
Desmistificando a Amazon AWSDesmistificando a Amazon AWS
Desmistificando a Amazon AWS
Matheus Fidelis
 
O Fantástico Mundo de Git
O Fantástico Mundo de GitO Fantástico Mundo de Git
O Fantástico Mundo de Git
Matheus Fidelis
 
Slide pronto
Slide prontoSlide pronto
Slide pronto
Bia Bernardino
 
Slides prontos
Slides prontosSlides prontos
Slides prontos
niceoliveira
 
Slides para Apresentação acadêmica
Slides para Apresentação acadêmicaSlides para Apresentação acadêmica
Slides para Apresentação acadêmica
RafaelBorges3
 
Apresentação de slides pronto
Apresentação de slides prontoApresentação de slides pronto
Apresentação de slides pronto
candidacbertao
 
Web scraping com python
Web scraping com pythonWeb scraping com python
Web scraping com python
Matheus Fidelis
 
Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"Certificado de palestra proferida: "O Inimigo Interno"
Certificado de palestra proferida: "O Inimigo Interno"
Ricardo Maganhati Junior
 
Desmistificando a Amazon AWS
Desmistificando a Amazon AWSDesmistificando a Amazon AWS
Desmistificando a Amazon AWS
Matheus Fidelis
 
O Fantástico Mundo de Git
O Fantástico Mundo de GitO Fantástico Mundo de Git
O Fantástico Mundo de Git
Matheus Fidelis
 
Slides para Apresentação acadêmica
Slides para Apresentação acadêmicaSlides para Apresentação acadêmica
Slides para Apresentação acadêmica
RafaelBorges3
 
Apresentação de slides pronto
Apresentação de slides prontoApresentação de slides pronto
Apresentação de slides pronto
candidacbertao
 
Anúncio

Semelhante a Escalando API's com NodeJS, Docker e RabbitMQ (20)

DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
Leandro Silva
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
Alexandre Brandão Lustosa
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
Ravan Scafi
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
Giovanni Kenji Shiroma
 
Escalando para os primeiros 10 milhões de usuários
Escalando para os primeiros 10 milhões de usuáriosEscalando para os primeiros 10 milhões de usuários
Escalando para os primeiros 10 milhões de usuários
Amazon Web Services LATAM
 
Webinar Melhores práticas e lições aprendidas com aplicações sem servidor
Webinar Melhores práticas e lições aprendidas com aplicações sem servidorWebinar Melhores práticas e lições aprendidas com aplicações sem servidor
Webinar Melhores práticas e lições aprendidas com aplicações sem servidor
Amazon Web Services LATAM
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
Felipe Ribeiro
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Daniel Lopes
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
Bruno Luiz Pereira da Silva
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
David Robert Camargo de Campos
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
Kinn Julião
 
Meetup Stoodi Data & Tech #3 - Data Pipelines na AWS
Meetup Stoodi Data & Tech #3 - Data Pipelines na AWSMeetup Stoodi Data & Tech #3 - Data Pipelines na AWS
Meetup Stoodi Data & Tech #3 - Data Pipelines na AWS
Alexsandro Francisco dos Santos
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
ECRAYON Tecnologia Criativa
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
Campus Party Brasil
 
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Daniel Lopes
 
Plack
PlackPlack
Plack
Pedro Melo
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
Conviso Application Security
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancado
Amazon Web Services LATAM
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoT
GDGFoz
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
Alexandre Brandão Lustosa
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
Ravan Scafi
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
Giovanni Kenji Shiroma
 
Escalando para os primeiros 10 milhões de usuários
Escalando para os primeiros 10 milhões de usuáriosEscalando para os primeiros 10 milhões de usuários
Escalando para os primeiros 10 milhões de usuários
Amazon Web Services LATAM
 
Webinar Melhores práticas e lições aprendidas com aplicações sem servidor
Webinar Melhores práticas e lições aprendidas com aplicações sem servidorWebinar Melhores práticas e lições aprendidas com aplicações sem servidor
Webinar Melhores práticas e lições aprendidas com aplicações sem servidor
Amazon Web Services LATAM
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
Felipe Ribeiro
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Daniel Lopes
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
Bruno Luiz Pereira da Silva
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
Kinn Julião
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
Campus Party Brasil
 
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Daniel Lopes
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
Conviso Application Security
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancado
Amazon Web Services LATAM
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoT
GDGFoz
 
Anúncio

Mais de Matheus Fidelis (6)

Road to serverless
Road to serverlessRoad to serverless
Road to serverless
Matheus Fidelis
 
Criando API's com HapiJS
Criando API's com HapiJSCriando API's com HapiJS
Criando API's com HapiJS
Matheus Fidelis
 
Desbravando o REST com Python
Desbravando o REST com PythonDesbravando o REST com Python
Desbravando o REST com Python
Matheus Fidelis
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
Matheus Fidelis
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
Matheus Fidelis
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação Web
Matheus Fidelis
 
Criando API's com HapiJS
Criando API's com HapiJSCriando API's com HapiJS
Criando API's com HapiJS
Matheus Fidelis
 
Desbravando o REST com Python
Desbravando o REST com PythonDesbravando o REST com Python
Desbravando o REST com Python
Matheus Fidelis
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
Matheus Fidelis
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
Matheus Fidelis
 
Aula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação WebAula 1 - Testando a Segurança de Sua Aplicação Web
Aula 1 - Testando a Segurança de Sua Aplicação Web
Matheus Fidelis
 

Último (10)

AutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamentalAutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamental
DayaneSoares55
 
Treinamento Sistemas de Reserva - Vtex..
Treinamento Sistemas de Reserva - Vtex..Treinamento Sistemas de Reserva - Vtex..
Treinamento Sistemas de Reserva - Vtex..
rafaelarocha646077
 
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptxVenha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Renato de Oliveira
 
AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...
AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...
AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...
Faga1939
 
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptxAC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
Susana Cascais
 
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptxVenha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Renato de Oliveira
 
Manual Segurança_Internet_CD_B2_D.ppt____
Manual Segurança_Internet_CD_B2_D.ppt____Manual Segurança_Internet_CD_B2_D.ppt____
Manual Segurança_Internet_CD_B2_D.ppt____
IEFP
 
A História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdf
A História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdfA História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdf
A História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdf
MaxMller84
 
Slide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdfSlide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdf
FtGames1
 
Ficha 5.docx____________________________
Ficha 5.docx____________________________Ficha 5.docx____________________________
Ficha 5.docx____________________________
IEFP
 
AutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamentalAutoriaDigital.pdf ensino médio e fundamental
AutoriaDigital.pdf ensino médio e fundamental
DayaneSoares55
 
Treinamento Sistemas de Reserva - Vtex..
Treinamento Sistemas de Reserva - Vtex..Treinamento Sistemas de Reserva - Vtex..
Treinamento Sistemas de Reserva - Vtex..
rafaelarocha646077
 
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptxVenha Aprender Sobre MuleSoft - Dia 10.pptx
Venha Aprender Sobre MuleSoft - Dia 10.pptx
Renato de Oliveira
 
AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...
AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...
AS FONTES DE ENERGIA QUE MUDARAM O MUNDO AO LONGO DA HISTÓRIA E O REQUERIDO F...
Faga1939
 
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptxAC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
AC M1 1 Sistemas Digitais - Sistemas de Numeracao e Codigos.pptx
Susana Cascais
 
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptxVenha Aprender Sobre MuleSoft - Dia 11.pptx
Venha Aprender Sobre MuleSoft - Dia 11.pptx
Renato de Oliveira
 
Manual Segurança_Internet_CD_B2_D.ppt____
Manual Segurança_Internet_CD_B2_D.ppt____Manual Segurança_Internet_CD_B2_D.ppt____
Manual Segurança_Internet_CD_B2_D.ppt____
IEFP
 
A História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdf
A História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdfA História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdf
A História do Computador Subtítulo Da Antiguidade aos Dias Atuais.pdf
MaxMller84
 
Slide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdfSlide - Linguagem de Definição de Dados - TLBADII.pdf
Slide - Linguagem de Definição de Dados - TLBADII.pdf
FtGames1
 
Ficha 5.docx____________________________
Ficha 5.docx____________________________Ficha 5.docx____________________________
Ficha 5.docx____________________________
IEFP
 

Escalando API's com NodeJS, Docker e RabbitMQ

Notas do Editor

  • #5: De modo grotesco as Queues são uma lista de dados enfileirados por ordem de alocação. Literalmente é como uma fila de lotérica (sem preferencial), onde o primeiro que chega é o primeiro a ser atendido e sair da fila, e assim o segundo, terceiro, quarto e consecutivamente.
  • #6: De um modo mais básico, o processamento de queues, ou fila, se consiste em requisitar itens alocados na mesma, um a um, para serem processados um a um por um ou mais destinatários, que respondem pra essa fila se a mensagem foi processada com exito ou não.
  • #7: Da mesma forma ocorre no processamento assíncrono de Queues, onde basicamente temos vários clientes que enviam mensagens para nosso Message Storage e vários clientes conectados a nossa queue pegando e consumindo de maneira assíncrona todos os itens assim que estiverem preparados para serem disponibilizados em um pool de mensagens.
  • #8: Então beleza, entendi o conceito grotesco de filas. Mas como essa paradinha vai me ajudar a escalar minha aplicação, API, Web Service? Como isso me ajuda, e quais as vantagens que um processamento de mensagens vai trazer pra mim e pro meu cliente?
  • #9: Quando nós falamos de Queues em web apps e api`s, estamos falando de uma das maiores sacadas no conceito de arquitetura e backend.Você pode enviar strings, JSON, parâmetros para as filas e escalar a responsabilidade de leitura e processamento dessas mensagens para outros microsservicos, crons ou módulos do seu seu ecossistemas. Inclusive integrar aplicações feitas em diferentes linguagens, respeitando diferentes paradigmas provendo uma comunicação uniforme entre eles. Simplesmente ter um serviço que está preopado simplesmente em enviar algo pra lá sem precisar se preocupar onde, quando e por quem aqueles dados enviados vão ser processados.
  • #10: Bom, num exemplo mais claro, imaginem que vocês tem uma aplicação responsável por receber uma solicitação de compra de clientes. Esse cliente vai te enviar todos os dados os produtos junto as informações do seu cartão de crédito. Sua aplicação faz o trabalho dela. Ela recebe esses dados, verifica a disponibilidade em estoque, congela os itens, pega os dados do cartão, valida a integridade dos mesmos, valida com um retorno da adquirente, verifica o limite disponível, calcula o valor dos itens, do frente, registra a compra, atualiza as informações de estoque, envia e-mail, e depois devolve uma resposta pro cliente. Em toda essa volta, no melhor dos casos nós pagamos um preço razoável na requisição.
  • #11: E esse preço ele é pago pelo cliente que integra com a nossa API, ou consome no nosso e-commerce e etc. Tudo isso pra receber uma resposta. O tempo que ele aguarda é vivo, é doloroso dependendo dos casos. Podendo deixar pessoas extremamente putas e insatisfeitas.
  • #12: E pensando que nossa aplicação possa parar de atender 5, 6 clientes para passar a atender centenas, milhares, esse preço de processamento pode, e vai aumentar, gerando uma insatisfação maior ainda para os usuários da nossa API ou Aplicação.
  • #13: Pra isso nós utilizamos serviços de mensageria, onde o nosso endpoint da aplicação vai ser responsável somente por receber a solicitação, que seja validar alguns itens mínimos e jogar em um servidor de queues, onde podem haver um ou mais `minions`, `workers` ou `consumidores` esperando para pegar essas mensagens por ordem de chegada e processá-las uma a uma.
  • #14: Nesse case simples nós conseguimos deixar todo o nosso trabalho sujo transparente para o usuário, onde o mesmo vai receber um “Ow, ok! Recebi sua solicitação. Segue o jogo” E poderá esperar por um e-mail de confirmação, ou tentar consultar o resultado do processamento através de outro endpoint da API e etc. Veja como nós conseguimos escalar nossa aplicação de tal forma, que nem nossa aplicação é mais responsável por processar as informações enviadas pra ela.
  • #15: Beleza, mas onde eu consigo, por onde eu começo e como eu me comunico com um sistema desses pra acoplar isso na minha arquitetura?
  • #16: Pra isso existe um protocolo legal chamado AMQP. Ele é um protocolo de comunicação de rede muito simples e rápido, que se apropria de uma comunicação TCP, apenas uma, pra criar vários canais virtuais dentro dela. O TCP é um pouco custoso em larga escala, e até mesmo o próprio sistema operacional limita a quantidade de conexões TCP, mas a quantidade de canais virtuais dentro de uma conexão TCP é ilimitada. Então criamos apenas um, ou algumas conexões TCP com o servidor, onde várias threads compartilham dessas conexões para criar vários canais.
  • #17: A arquitetura do AMQP é razoavelmente simples. E possui dois atores principais (pelo menos), sendo eles os Publishers, que são os responsáveis por publicar itens nas nossas filas, e os Consumers, que vão consumir esses itens um a um. Dentro dessa nossa arquitetura nós temos uma fase chamada Exchanges, ou os pontos de troca, onde os Publishers publicam as mensagens através de um endpoint da API do AMQP. Depois nós ainda temos uma camada chamada de Routes, ou Binginds que vão ler alguns metadados da nossa mensagem e redirecioná-los para sua fila apropriada. E finalmente nossa queue, onde ficam armazenadas nossas mensagens que estão prontas para serem consumidas pelos nossos consumers, workers e etc.
  • #18: Essa é o fluxo básico do ciclo de vida das mensagens. Onde um publisher envia uma mensagem para a Exchange, que roteia para a Queue destino e é consumida por um ou vários consumers da mesma.
  • #19: Nossas mensagens enviadas e consumidas também precisam obedecer um padrão minimalista. Onde elas precisam obrigatóriamente ter um payload, ou corpo da mensagem, que pode conter vários tipos de dados, como blobs, strings, objetos JSON, XML’s e etc. E a Label, que vão descrever instruções simples como pra onde a mensagens vai ser encaminhada e etc.
  • #20: O fluxo de envio também não tem segredo, obedece ao simples conceito de Round and Robin, onde ele vai distribuir igualmente as mensagens para o numero de consumers disponíveis a consumí-las. O consumer solicita, a queue entrega a mensagem, o consumer processa o que precisa ser processado, envia um e-mail, sms, processa a Nota e etc e envia uma requisição de ACK para a queue de sucesso, onde a mesma vai dar como concluido e excluir aquela mensagem, ou um NACK em caso de falha, onde ela vai disponibilizar novamente essa mensagem pra ser consumida na próxima tentativa. Pow, mais essa parada ainda é muito complicada de implementar na mão, o que eu faço?
  • #21: Pra isso existe uma ferramenta bem bacana chamada RabbitMQ.
  • #22: O RabbitMQ é um servidor de mensagens que tem suporte para AMQP. Ele é escrito em Erlang ® e é Open Source. Uma ótima solução para quem quer fugir de soluções da IBM, Microsoft, Amazon por exemplo. Ele é extremamente pequeno e rápido e pode rodar em servidores distribuidos. Apesar de ser pequeno ele possui uma API interessante, pode ser gerenciado via CLI ou por uma Web UI bem simples. E possibilita nós criarmos dinamicamente quantas queues quisermos sem nenhuma interação humana.
  • #23: Essa aqui é a carinha da Web UI do RabbitMQ. Não é nada linda mas é bastante funcional. Da um feedback quase constante dos status das nossas filas e é isso que importa.
  • #24: Pra fazer a comunicação do Node com o AMQP nós utilizamos uma biblioteca chamada amqplib, o site da documentação é esse.
  • #25: E pra criar uma conexão também não tem segredo. Essa é a versão mais simples de uma conexão. Onde nós chamamos o amqp.connect, que me responde a uma promisse que vai me retornar um objeto de conexão pra outra promisse que vai me retornar um canal com o servidor. Sem segredo.
  • #26: Pra enviar uma mensagem também seguimos o mesmo conceito. Nós definimos através no nosso objeto de conexão com o canal o nome da fila, que caso não exista, será criada dinamicamente com o assertQueue() e podemos enviar um buffer pra fila através do parâmetro sentToQueue, onde especificamos a fila e o conteûdo da nossa mensagem, que nessa caso é um JSON que contém algumas informações de e-mail.
  • #27: A partir do momento que nós rodamos o sender simples, automaticamente o RabbitMQ mostra a nova fila criada e que ea possui uma mensagem pronta para ser consumida.
  • #29: Pra consumir as mensagem também não tem mistério. Aproveitamos a mesma estrutura de conexão, definimos através do prefetch quantas mensagens vamos pegar por vez. Cuidado aqui, é perigoso. E utilizamos o parâmetro consume para pegar a mensagem que estiver disponível. Em seguida enviamos um ACK ou NOACK pro servidor pra indicar o sucesso do processamento.
  • #30: Pra consumir as mensagem também não tem mistério. Aproveitamos a mesma estrutura de conexão, definimos através do prefetch quantas mensagens vamos pegar por vez. Cuidado aqui, é perigoso. E utilizamos o parâmetro consume para pegar a mensagem que estiver disponível. Em seguida enviamos um ACK ou NOACK pro servidor pra indicar o sucesso do processamento.
  • #31: Aqui nós colocamos alguns setInterval pra simular o envio de várias requisições pro servidor. Basicamente servidor como um papel abstrato de clientes que enviam mensagens a todo momento pra nossa fila.
  • #32: E a mesma coisa pro consumer. Que vai criar uma conexão persistente via AMQP e consumir mensagens assim que estiverem prontas. Aqui eu coloquei um setTimeout pra simular algum processamento real, seja um e-mail, algum faturamento, tratamento de cobranças e etc.
  • #33: Bom, visto que eu já tenha algum serviço desses rodando no meu ambiente, mas meu processamento aumentou, meu numero de clientes aumentou, meu número de funcionalidades aumentou. Como eu faço pra escalar essas paradas junto a minha demanda? Uma solução simples é utilizando containers pra escalar horizontalmente nosso numero de consumers dentro da nossa máquina ou dentro do nosso clusters dependendo da sua escala.
  • #34: Beleza, mas por que utilizar containers pra scalar meus atores dentro dos meus workflows? Bom, pela praticidade, pela velocidade, pela capacidade de escalar em numeros altíssimos em pouco tempo. A facilidade de integração com pipelines, e workflows de CI e Container, a gente pensa em Docker pelo Hype, mas container pode ser de qualquer tipo, pode ser um LXC nativo, pode ser via Docker Mesmo, Mesos, Rocket e etc.
  • #35: Review básicão sobre Docker, não esnder muito sobre o assunto. Docker é um empacotador de ambientes que não faz nada de novo, ele simplesmente gerencia containers de baixo nível do Linux, no caso o LXC, mas de uma maneira muito performática e simples. E pra containerizar e orquestrar nosso ambiente, nós vamos utilizazr um utilitário chamado Docker Compose. Que era nativamente um outro projeto paralelo chamado fig, que foi adotado pela comunidade e agora faz parte do toolbox oficial do Docker como Docker compose. Ele é capaz de empacotar e gerenciar stacks inteiras com inumeros containers e fazer todas as nossas pequenas ‘receitinhas’ dos nossos containers, que seriam as Dockerfiles, virarem um almoço completo.
  • #36: Pra empacotar nosso serviço eu vou utilizar uma imagem oficial do Node, que já tem ele e várias outras paradinhas legais instaladas nativamente, vou criar nosso Workdir e copiar todo nosso package.json, nosso código em si pra dentro da pasta de trabalho, resolver as dependências do build com o npm e definir um comando de entrada, que seria o node app.js pra startar nossos serviços. Essa dockerfile vai ser utilizada para containerizar tanto nosso agente de sender quanto o de consumer.
  • #37: Aqui nos temos o arquivo YML lido pelo docker-compose, onde vamos definir todos os parâmetros para o nosso ambiente. Vou utilizar inclusive uma imagem pronta do RabbitMQ, vou definir as variáveis de ambiente do mesmo, como usuário, senha e o vhost eu vou colocar na raiz mesmo. Mapear a porta 8080 da minha máquina pra 15672, que corresponde a porta da WebUI do Rabbit, só pra ficar mais amigável, e mapear a porta 5672, que vai ser a porta do serviço do AMQP em si.
  • #38: Pra startar um ambiente é simples, basta dar o docker-compose build pra construir os containers e o up pra subir nossa Stack. Caso você nunca tenha realizado o Build antes, no próprio UP ele vai buildar da primeira vez.
  • #39: Dando um PS nós podemos acompanhar que temos 3 containers rodando, um consumer, um sender e o do rabbitmq
  • #42: Naquela nossa imagem nós criamos um loop de envio de mensagens. No mundo real, o ato de processar costuma ser muito mais lento que o ato de envio para o rabbitmq, por motivos obvios. Então nosso exemplo seguiu essa linha de raciocinio. Com o passar do tempo, ou do aumento do consumo da nossa aplicação, nossa fila de mensagens pode acabar por se tornar um gargalo também, e receber mais mensagens do qe nosso consumer é capaz de processar por segundo.
  • #43: Pra isso precisariamos levantar mais workers pra consumir nossas mensagens gargaladas. Com o compose, temos essa opção com o parâmetro Scale. Se você estiver rodando sua stack num cluster de várias máquinas, você pode escalar a níveis estratosféricos, se estiver numa máquina só, é bom contabilizar os recursos antes de sair escalando 10, 20 containers pra realizar essas ações.
  • #44: De novo com o ps, podemos ver que agora nós temos 10 containers de consumers rodando.
  • #45: E nossas mensagens começam a ser consumidas num nível maior, acabando com o gargalo e aumentando o processamento das solicitações dos clientes.
  • #46: Claro que pra larga escala, num ambiente mais Rock n’ Roll, nós não podemos contar apenas com o Compose, pra isso existem várias outras ferramentas para gestão de clusters Docker, como o próprio Swarm que possibilita a criação e gestão de clusters, e é uma solução nativa do Docker. O Kubernetes, da Google que nos permite gerenciar ambientes de complejidades desde médias a escalas absurdas. Tanto que o próprio Google sobrevive de Kubernetes no seu Backend. E o Rocket que utiliza o CoreOS pra criação de clusters de containers. É uma solução muito foda também que vale a pena dar uma estudada.