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

26
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

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

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

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

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

Globalcode – Open4education

OU“É só um sisteminha de tarefas”,

eles disseramLucas Estêvão

Arquiteto de software no Route.to

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

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

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

Globalcode – Open4education

1 Route

• Iniciativa brasileira para marketing automation• Demanda interna (~600k contatos)

• soluções atuais caras/complexas• MongoDB• Redis• RabbitMQ• Elasticsearch

4

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

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

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

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

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

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

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

Globalcode – Open4education

2 O que são filas?

8

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

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

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

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

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

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

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

Globalcode – Open4education

3.1 Liberar a interface

“loading.gif bom é loading.gif com display: none”

PROGRAMADOR, algum bom.

12

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

Globalcode – Open4education

3.1 Liberar a interface

Ao invés disso…“Sua solicitação foi processada com sucesso!”

13

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Globalcode – Open4education

5 Como enfileirar?

De forma complexa: registros autosuficientes

21

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

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

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

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

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

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

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

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

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

Globalcode – Open4education

Muito obrigado!

Perguntas?

[email protected]://www.linkedin.com/in/lestevaos