Incident Library

IL-0296 Transloadit · 2016-05-30 (published)databaseaws

Transloadit's us-east Redis cluster lost queued jobs and heartbeats, raising WORKER_JOB_ERROR errors for 81 customers

Transloadit queues Jobs and passes heartbeats between Uploaders and Drones through a regional Redis cluster on AWS Elasticache. HLS splits large videos into many small fragments and can mean a thousand times more metadata for each video, and a steep rise in HLS traffic, combined with more Drones being online, saturated the network bandwidth of the 3 node us-east cluster. Jobs and heartbeats were lost and 81 customers were affected. Transloadit found no change to its own code or infrastructure that explained the sudden saturation.

As a stopgap the team re-added lost messages and relaxed heartbeat monitoring, which made Assemblies take longer. A wider investigation found that Redis was not on the latest version, which fixed several bugs including some marked as data loss fixes, so Redis was upgraded; an audit of the client library found no problems; and monitoring, metrics and alerts were extended. Once bandwidth throttling was clear, the cluster was doubled to six nodes and then grown to nine, which made it worse: every write went to the leader, which now had to replicate it to eight nodes instead of two, four times the outgoing traffic, for data that is write-heavy and deleted soon after it is written. Because missing data can be re-added and Elasticache requires replication for automatic failover, the team cut the read replicas down to one, and traffic, failure rates and Assembly times dropped immediately.

Afterwards Transloadit added logging and alarms for approaching saturation, capped how far Drones scale up in each region, and began adding sharding per Uploader on top of the existing sharding per region, because a single Redis node accepting all writes could not carry further growth.

Severity
–
Scope
Job queueing and heartbeats between Uploaders and Drones in the us-east region; slower Assemblies and some that could not be replayed
Users affected
81 customers
Region
us-east
Time to detect
–
Time to resolve
–

Symptoms

Reports came in of more WORKER_JOB_ERROR errors, which tell Transloadit there is a communication problem between its Uploaders, the machines that receive files and orchestrate Assemblies, and its Drones, the machines that run encoding tasks. Many Assemblies became much slower because retries with exponential back-off kicked in, and a few could not be replayed.

Logs and debugging showed that Jobs queued in the us-east regional Redis cluster were being lost, along with the heartbeats between Uploaders and Drones that let a Job move to another Drone when its Drone stops sending them. Redis commands, connections and swap usage were monitored, but bandwidth was not, and saturating the network cards of a 3 node cluster had seemed unlikely; on a closer look that was exactly what was happening.

Doubling the cluster to six nodes raised bandwidth use at once, but it quickly reached new saturation points and many Assemblies stayed slow. Adding three more nodes made things worse: the cluster leader alone was sending about 4Gbit/s of outgoing traffic, more than Amazon advertises as possible, while traffic on the other Redis nodes stayed within limits, even though reads should have been spread across the whole cluster.

Symptom High error rateHigh latencyLoad imbalance

Root cause

Trigger
A steep increase in HLS traffic, together with more Drones online processing the same volume faster, which put more load on the central Redis nodes.

Detection

Reports of an increased number of WORKER_JOB_ERROR errors.

Remediation

Action items

Lessons

To handle more traffic Transloadit had to use fewer Redis nodes, not more: each added replica multiplied the replication traffic from the single leader that takes every write, so scaling up the number of nodes was the wrong call. Bandwidth had not been among the monitored Redis metrics.

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, In-memory cache, Database replication among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.