Resolvendo tempos de fila elevados e garantindo a confiabilidade
Ontem à noite tivemos uma interrupção sobre a qual prometemos dar mais detalhes. Às 22:35 CET, percebemos que os tempos de fila estavam elevados.
Isso foi causado principalmente por 20k Jobs /http/import pendentes. Nosso autoscaler não os considerava ao escalar, porque, em comparação com a codificação de vídeo, eles são muito baratos e normalmente são poucos.
Estava claro que essa fila não estava diminuindo rápido o suficiente, então escalamos manualmente.
Por volta das 23:00, notamos que a fila ainda não estava diminuindo muito rapidamente e parecia que algumas máquinas estavam com problemas para ficar online (temos testes prévios antes de colocar uma máquina em produção, e alguns deles estavam atingindo o tempo limite).
Descobrimos que o redis estava indisponível para muitas máquinas (mas não todas), embora o serviço continuasse no ar e funcionando.
Fizemos alguns testes e notamos que havia (o que não conseguimos explicar de outra forma senão como) uma interrupção da LAN do EC2 entre nossas máquinas:
# LAN chan -> Redis
root@chan:~# telnet redis.transloadit.com 6379
Trying 10.192.211.175...
# LAN Redis -> chan (one of our drones)
root@redis2:# telnet chan.transloadit.com 80
Trying 10.241.127.187...
# WAN chan -> Redis
root@chan:~# telnet 107.21.80.77 6379
Trying 107.21.80.77...
Connected to 107.21.80.77.
Escape character is '^]'.
# WAN Redis -> chan (one of our drones)
root@redis2:# telnet 50.17.94.169 80
Trying 50.17.94.169...
Connected to 50.17.94.169.
Escape character is '^]'.
Isso explicava por que a fila do /http/import não diminuía muito: os Jobs falhavam e eram recolocados na fila automaticamente.
Às 23:10, implantamos uma correção:
- Conectar ao redis pelo IP público
Às 23:15 havia 18.115 Jobs http/import na fila e, 15 minutos depois, todos já
tinham sido processados. Ainda assim, para garantir que não reduzíssemos a escala com esses números
na fila, implantamos outra correção:
- Fazer o autoscaler considerar o tamanho da fila de
http/import(e de todos os bots, exceto file/filter, mesmo que sejam considerados insignificantes)
Daqui para frente, implantaremos mais melhorias:
- Alternar entre os IPs de LAN e WAN do redis para que, se houver problemas de roteamento em uma rede, passemos automaticamente para a outra
- Logs aprimorados para identificar esses erros em um estágio mais inicial
Pedimos à Amazon que confirme essa interrupção e vamos atualizar você com mais informações quando isso acontecer.
Lamentamos muito o transtorno causado por essa interrupção. Como você pode ver, levamos essas questões a sério e trabalhamos constantemente para oferecer uma plataforma cada vez mais robusta, sobre a qual nossos clientes possam construir seus negócios.
Se tiver dúvidas, fique à vontade para me perguntar no twitter ou abrir um ticket de suporte.
