tdc2016sp - o bê-a-bá da fila de processamento para você deixar o threadpool em paz
TRANSCRIPT
Globalcode – Open4education
Trilha Arquitetura .NETO bê-a-bá da fila de processamento
para deixar o ThreadPool em pazLucas Estêvão
Arquiteto de software no Route.to
Globalcode – Open4education
OU“É só um sisteminha de tarefas”,
eles disseramLucas Estêvão
Arquiteto de software no Route.to
Globalcode – Open4education
Agenda: 35-40min
1 O Route 4-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
Globalcode – Open4education
1 Route
• Iniciativa brasileira para marketing automation• Demanda interna (~600k contatos)
• soluções atuais caras/complexas• MongoDB• Redis• RabbitMQ• Elasticsearch
4
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
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
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
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• 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
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
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
Globalcode – Open4education
3.1 Liberar a interface
“loading.gif bom é loading.gif com display: none”
PROGRAMADOR, algum bom.
12
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 avisaremos quando tudo estiver concluído.”
Honestidade.
14
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
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
Globalcode – Open4education
3.3 Granularizar processos
Microserviços.
1. Pagamentoa. autorizar cartão no gateway de pagamentob. lançar saldo na conta do cliente
2. Notificar estoque3. Notificar status ao cliente4. Solicitar emissão de NF-e5. Notificar status ao cliente6. Solicitar coleta à transportadora
17
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
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
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
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• dados desatualizados no momento da execução
• é importante pra você?• mensagens maiores
• JSON short attribute names
22
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
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
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
Globalcode – Open4education
Muito obrigado!
Perguntas?
[email protected]://www.linkedin.com/in/lestevaos