Abordar los tiempos de cola elevados y garantizar la fiabilidad
Anoche sufrimos una interrupción sobre la que prometimos dar más detalles. A las 22:35 CET nos dimos cuenta de que teníamos tiempos de cola elevados.
Estos se debieron principalmente a 20k Jobs pendientes de /http/import. Nuestro autoescalador no los tuvo en cuenta para escalar porque, en comparación con el encoding de video, son muy baratos y suelen ser pocos.
Estaba claro que esta cola no bajaba con suficiente rapidez, así que escalamos manualmente.
Alrededor de las 23:00 notamos que la cola seguía sin bajar muy rápido y parecía que algunas máquinas tenían problemas para ponerse en línea (hacemos pruebas preflight antes de poner una en producción, y algunas de ellas expiraban por tiempo de espera)
Resultó que redis no estaba disponible para muchas (aunque no todas) las máquinas, a pesar de que el servicio seguía funcionando.
Hicimos algunas pruebas y notamos que había (lo que no podemos explicar de otra manera que como) una interrupción de la LAN de EC2 entre nuestras 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 '^]'.
Esto explicaba por qué la cola de /http/import no se reducía mucho, los Jobs fallaban y se volvían a encolar automáticamente.
A las 23:10 desplegamos una corrección:
- Conectarse a redis por IP pública
A las 23:15 había 18.115 Jobs de http/import en la cola y, 15 minutos después,
ya estaban todos procesados. Aun así, para asegurarnos de no reducir la escala con esas cantidades en
cola, desplegamos otra corrección:
- Hacer que el autoescalador tenga en cuenta el tamaño de la cola de
http/import(y de todos los Robots excepto file/filter, sin importar si se consideran insignificantes)
De aquí en adelante desplegaremos más mejoras:
- Alternar entre las IP de redis de la LAN y la WAN para que, si hay problemas de enrutamiento en una red, cambiemos automáticamente a la otra
- Mejor registro de logs para detectar estos errores en una etapa más temprana
Le pedimos a Amazon que confirme esta interrupción y te informaremos con más detalles cuando lo hagan.
Lamentamos mucho las molestias que causó esta interrupción. Como puedes ver, nos tomamos estos asuntos en serio y trabajamos constantemente para ofrecer una plataforma cada vez más robusta sobre la que nuestros clientes puedan construir su negocio.
Si tienes preguntas, no dudes en preguntarme en twitter o crear un ticket de soporte.
