Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
TDC2016SP - O bê-a-bá da fila de processamento para você deixar o ThreadPool em paz
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
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
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. 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. 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
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. 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. 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. Globalcode – Open4education
3.1 Liberar a interface
“loading.gif bom é loading.gif com display:
none”
PROGRAMADOR, algum bom.
12
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. 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. 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. 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. 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. 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. 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
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. 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