Erhöhte Queue-Zeiten beheben und Zuverlässigkeit sichern
Gestern Nacht kam es zu einem Ausfall, zu dem wir mehr Licht ins Dunkel bringen wollten. Um 22:35 Uhr MEZ wurde uns bewusst, dass wir erhöhte Queue-Zeiten hatten.
Verursacht wurden diese in erster Linie durch 20k ausstehende /http/import-Jobs. Unser Autoscaler berücksichtigte sie beim Hochskalieren nicht, weil sie im Vergleich zum Video-Encoding sehr günstig und in der Regel selten sind.
Es war klar, dass diese Queue nicht schnell genug abgebaut wurde, also haben wir manuell hochskaliert.
Gegen 23:00 Uhr fiel uns auf, dass die Queue immer noch nicht sehr schnell abgebaut wurde und dass einige Maschinen offenbar Probleme hatten, online zu gehen (wir führen Preflight-Tests durch, bevor wir eine Maschine in Produktion nehmen; einige davon liefen in einen Timeout)
Es stellte sich heraus, dass redis für viele (aber nicht alle) Maschinen nicht erreichbar war, obwohl der Dienst noch lief.
Wir haben einige Tests durchgeführt und festgestellt, dass es zwischen unseren Maschinen einen (anders können wir es uns nicht erklären) EC2-LAN-Ausfall gab:
# 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 '^]'.
Das erklärte, warum die /http/import-Queue kaum schrumpfte: Jobs liefen auf Fehler und wurden automatisch wieder in die Queue eingereiht.
Um 23:10 Uhr haben wir einen Fix ausgerollt:
- Verbindung zu redis über die öffentliche IP
Um 23:15 Uhr befanden sich 18.115 Jobs vom Typ http/import in der Queue,
15 Minuten später waren sie alle verarbeitet. Dennoch haben wir einen weiteren Fix ausgerollt, um
sicherzustellen, dass wir bei solchen Zahlen in der Queue nicht herunterskalieren:
- Der Autoscaler berücksichtigt die Queue-Größe von
http/import(und die aller Bots außer file/filter, unabhängig davon, ob sie als unbedeutend eingestuft werden)
Künftig werden wir weitere Maßnahmen ausrollen:
- Zwischen den redis-IPs im LAN und im WAN rotieren, sodass wir bei Routing-Problemen in einem Netzwerk automatisch auf das andere umschalten
- Verbessertes Logging, um solche Fehler früher zu erkennen
Wir haben Amazon gebeten, diesen Ausfall zu bestätigen, und werden Sie informieren, sobald uns weitere Informationen vorliegen.
Wir bedauern die Unannehmlichkeiten sehr, die dieser Ausfall verursacht hat. Wie Sie sehen, nehmen wir diese Themen ernst und arbeiten kontinuierlich an einer immer robusteren Plattform, auf der unsere Kunden ihr Geschäft aufbauen können.
Bei Fragen können Sie mich gerne auf Twitter ansprechen oder ein Support-Ticket erstellen.
