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

Post on 10-Jan-2017

73 views 5 download

Transcript of 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

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?

lucas@route.tohttps://www.linkedin.com/in/lestevaos