O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Globalcode – Open4education
Trilha Arquitetura .NET
O bê-a-bá da fila de processamento
para deixar o ThreadPool em paz
Luc...
Globalcode – Open4education
OU
“É só um sisteminha de tarefas”,
eles disseram
Lucas Estêvão
Arquiteto de software no Route...
Globalcode – Open4education
Agenda: 35-40min
1 O Route4-5
2 O que são filas de processamento?6-10
3 Por que enfileirar?11-...
Globalcode – Open4education
1 Route
• Iniciativa brasileira para marketing automation
• Demanda interna (~600k contatos)
•...
Globalcode – Open4education
1 Route
Métricas de vaidade
• 200 milhões de trackings/mês: 2,5 bi/ano
• JS tracker
• events
•...
Globalcode – Open4education
2 O que são filas?
“[...] filas de mensagens são componentes de
engenharia de software utiliza...
Globalcode – Open4education
2 O que são filas?
“[...] filas de mensagens são componentes de
engenharia de software utiliza...
Globalcode – Open4education
2 O que são filas?
8
Globalcode – Open4education
2 O que são filas?
• Assincronia: remetente e destinatário não se
comunicam em tempo real
• re...
Globalcode – Open4education
2 O que são filas?
• Filtro e roteamento: tópico baseado em um pattern
• queue topic: srv_87, ...
Globalcode – Open4education
3 Por que enfileirar?
“A ideia principal é evitar executar tarefas de
consumo intensivo de rec...
Globalcode – Open4education
3.1 Liberar a interface
“loading.gif bom é loading.gif com display:
none”
PROGRAMADOR, algum b...
Globalcode – Open4education
3.1 Liberar a interface
Ao invés disso…
“Sua solicitação foi processada com sucesso!”
13
Globalcode – Open4education
3.1 Liberar a interface
Isso.
“Estamos trabalhando em sua solicitação.
Navegue de boas que lhe...
Globalcode – Open4education
Ao invés disso…
• 10 mil clientes JS requisitando ao servidor:
“Tem alguma tarefa do cliente i...
Globalcode – Open4education
Isso
• consumidor processa item do cliente id = {id}
• consumidor adiciona notificação ao clie...
Globalcode – Open4education
3.3 Granularizar processos
Microserviços.
1. Pagamento
a. autorizar cartão no gateway de pagam...
Globalcode – Open4education
4 O que enfileirar?
• Muito uso de CPU
• processar modelos 3D
• Atividades longas
• enviar 30k...
Globalcode – Open4education
4 O que enfileirar?
• Operações com alta probabilidade de falha
• acessar uma API java
• mover...
Globalcode – Open4education
5 Como enfileirar?
De forma enxuta: apenas _ids
• acessos em O(1) ao seu banco
• dados atualiz...
Globalcode – Open4education
5 Como enfileirar?
De forma complexa: registros autosuficientes
21
Globalcode – Open4education
5 Como enfileirar?
De forma complexa: registros autosuficientes
• nenhum acesso ao seu banco
•...
Globalcode – Open4education
6 Qual ferramenta usar?
“Procura por ‘MSMQ vs’ no Google que você vai
achar todas essas ferram...
Globalcode – Open4education
6 Qual ferramenta usar?
• RabbitMQ (AMQP)
• Install-Package RabbitMQ.Client (760k downloads)
•...
Globalcode – Open4education
6 Qual ferramenta usar?
Cloud-based
• IronMQ
• Install-Package IronSharp.IronMQ (2k)
• Amazon ...
Globalcode – Open4education
Muito obrigado!
Perguntas?
lucas@route.to
https://www.linkedin.com/in/lestevaos
Próximos SlideShares
Carregando em…5
×

TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool em paz

140 visualizações

Publicada em

O bê-a-bá da fila de processamento para você deixar o ThreadPool em paz

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool em paz

  1. 1. Globalcode – Open4education Trilha Arquitetura .NET O bê-a-bá da fila de processamento para deixar o ThreadPool em paz Lucas Estêvão Arquiteto de software no Route.to
  2. 2. Globalcode – Open4education OU “É só um sisteminha de tarefas”, eles disseram Lucas Estêvão Arquiteto de software no Route.to
  3. 3. Globalcode – Open4education Agenda: 35-40min 1 O Route4-5 2 O que são filas de processamento?6-10 3 Por que enfileirar?11-17 4 O que enfileirar?18-19 5 Como enfileirar?20-22 6 Qual ferramenta usar?23-25 7 Perguntas/debate 3
  4. 4. Globalcode – Open4education 1 Route • Iniciativa brasileira para marketing automation • Demanda interna (~600k contatos) • soluções atuais caras/complexas • MongoDB • Redis • RabbitMQ • Elasticsearch 4
  5. 5. Globalcode – Open4education 1 Route Métricas de vaidade • 200 milhões de trackings/mês: 2,5 bi/ano • JS tracker • events • forms • HTTP API • user events • email events • 5 milhões de emails comportamentais 5
  6. 6. Globalcode – Open4education 2 O que são filas? “[...] filas de mensagens são componentes de engenharia de software utilizados para comunicação entre processos (IPC), ou para a comunicação dentro de um mesmo processo. Estes usam uma fila para comunicar a passagem de controle ou de conteúdo.” en.wikipedia.org 6
  7. 7. Globalcode – Open4education 2 O que são filas? “[...] filas de mensagens são componentes de engenharia de software utilizados para comunicação entre processos (IPC), ou para a comunicação dentro de um mesmo processo. Estes usam uma fila para comunicar a passagem de controle ou de conteúdo.” en.wikipedia.org 7
  8. 8. Globalcode – Open4education 2 O que são filas? 8
  9. 9. Globalcode – Open4education 2 O que são filas? • Assincronia: remetente e destinatário não se comunicam em tempo real • remetente: app • destinatário: background worker[s] (winservice[s]) • Durabilidade: memória, disco, database... • Expiração: TTL • se nenhum consumidor capturar este log em 24h... 9
  10. 10. Globalcode – Open4education 2 O que são filas? • Filtro e roteamento: tópico baseado em um pattern • queue topic: srv_87, customer_{id} • Notificação de recebimento: acks • consumidor recebe mensagem • consumidor inicia o processamento da mensagem • consumidor é interrompido (queda de energia) • broker não recebe o OK final do consumidor • broker envia a mensagem novamente à fila 10
  11. 11. Globalcode – Open4education 3 Por que enfileirar? “A ideia principal é evitar executar tarefas de consumo intensivo de recursos e ter de esperar por estas tarefas serem completadas em tempo real.” rabbitmq.com 11
  12. 12. Globalcode – Open4education 3.1 Liberar a interface “loading.gif bom é loading.gif com display: none” PROGRAMADOR, algum bom. 12
  13. 13. Globalcode – Open4education 3.1 Liberar a interface Ao invés disso… “Sua solicitação foi processada com sucesso!” 13
  14. 14. Globalcode – Open4education 3.1 Liberar a interface Isso. “Estamos trabalhando em sua solicitação. Navegue de boas que lhe avisaremos quando tudo estiver concluído.” Honestidade. 14
  15. 15. Globalcode – Open4education Ao invés disso… • 10 mil clientes JS requisitando ao servidor: “Tem alguma tarefa do cliente id = {id} aí pra eu mostrar nessa status bar marota?” • 10 mil O(log(N)) no seu tabelão de tarefas • A cada 5 segundos 3.2 Inverter servidor > cliente 15
  16. 16. Globalcode – Open4education Isso • consumidor processa item do cliente id = {id} • consumidor adiciona notificação ao cliente à fila • consumidor processa notificação (SignalR, Node…) • Sem tabelão de tarefas • Apenas quando necessário 3.2 Inverter servidor > cliente 16
  17. 17. Globalcode – Open4education 3.3 Granularizar processos Microserviços. 1. Pagamento a. autorizar cartão no gateway de pagamento b. lançar saldo na conta do cliente 2. Notificar estoque 3. Notificar status ao cliente 4. Solicitar emissão de NF-e 5. Notificar status ao cliente 6. Solicitar coleta à transportadora 17
  18. 18. Globalcode – Open4education 4 O que enfileirar? • Muito uso de CPU • processar modelos 3D • Atividades longas • enviar 30k emails • Alto custo de I/O • processar arquivos TXT (boleto) 18
  19. 19. Globalcode – Open4education 4 O que enfileirar? • Operações com alta probabilidade de falha • acessar uma API java • mover arquivos via FTP • Operações em outros ambientes • mover arquivos para o diretório X no server Y (hosting) • Operações futuras • reavaliar se determinado contato deve receber um email, sms, zapier... 19
  20. 20. Globalcode – Open4education 5 Como enfileirar? De forma enxuta: apenas _ids • acessos em O(1) ao seu banco • dados atualizados no momento da execução 20
  21. 21. Globalcode – Open4education 5 Como enfileirar? De forma complexa: registros autosuficientes 21
  22. 22. Globalcode – Open4education 5 Como enfileirar? De forma complexa: registros autosuficientes • nenhum acesso ao seu banco • dados desatualizados no momento da execução • é importante pra você? • mensagens maiores • JSON short attribute names 22
  23. 23. Globalcode – Open4education 6 Qual ferramenta usar? “Procura por ‘MSMQ vs’ no Google que você vai achar todas essas ferramentas relacionadas…” JR., Elemar (algum anos atrás num TDC POA enquanto mastigava um salgadinho) 23
  24. 24. Globalcode – Open4education 6 Qual ferramenta usar? • RabbitMQ (AMQP) • Install-Package RabbitMQ.Client (760k downloads) • Install-Package EasyNetQ (237k) • muito boa documentação • Apache ActiveMQ (AMQP) • Install-Package Apache.NMS.ActiveMQ (53k) • Apache Kafka • Install-Package kafka-net (16k) • ZeroMQ • Install-Package ZeroMQ (12k) 24
  25. 25. Globalcode – Open4education 6 Qual ferramenta usar? Cloud-based • IronMQ • Install-Package IronSharp.IronMQ (2k) • Amazon SQS • Install-Package AWSSDK.SQS (39k) • Microsoft Azure Service Bus • Install-Package WindowsAzure.ServiceBus (2.7m) 25
  26. 26. Globalcode – Open4education Muito obrigado! Perguntas? lucas@route.to https://www.linkedin.com/in/lestevaos

×