Cases3 cases
1 to 3 of 3
IL-0270Discord's ScyllaDB authentication cluster overloaded during an OS upgrade, and logins failed for about 50 minutesDiscord2023- Symptoms
On 6 November 2023 at 10:52 AM PST, when an upgrade script drained all connections from zone [c] of the scylla-authentication ScyllaDB cluster, Discord's availability, measured as the share of HTTP requests that return a 200-level response, fell at once to about 25%. Users could not connect, log in, read or send messages.
- Trigger
During an OS upgrade that takes one zone of a ScyllaDB cluster offline at a time, the upgrade script drained all connections from zone [c] of scylla-authentication at 10:52 AM, while one node in the just-upgraded zone [b] had a degraded NVMe Local SSD.
- Root cause
- Component
- Contributing factor
- Detection
An incident response call had already started when the first alerts fired at 10:56 AM, four minutes after the start. The time spent by downstream service graph showed the authentication service spending far more time on user requests than normal, and the authentication alerts fired moments later.
- Remediation
- Turned off sending typing events and marking messages as read to shed load from the authentication cluster
- Waited for the zone [c] RAID rebuild instead of restarting nodes, and the two zone [c] nodes came back online at 11:41 AM
- Restarted the two zone [b] nodes one at a time
- Action items
- Double the size of the scylla-authentication cluster so each node takes half as many requests
- Rebuild scylla-authentication-b-2 with new, non-degraded disks
- Build a way to detect disk degradation that is too subtle to affect overall latency but still threatens reliability
- Move upgrade operations into a more automatic control plane for the Scylla clusters that analyses cluster state, such as cache hit rate
- Increase the redundancy of the scylla-authentication cluster; the options being explored, not yet decided, are a higher replication factor or a hot-standby cluster in another region
- Lessons
Taking a whole zone out of a three-zone cluster leaves no margin, so one additional slow node in another zone was enough to overload it. For some Scylla clusters the row cache hit rate of restarted nodes must reach a safe level before the next zone goes down, and a short zonal test beforehand gave false confidence. The small but critical authentication cluster needs to be run differently from Discord's much larger Scylla clusters, with more redundancy.
IL-0212Many Slack users could not connect because a Vitess keyspace for channel membership was overloaded by cache-miss queriesSlack2022- Symptoms
Just after 6 a.m. Pacific Time on 22 February 2022, user tickets about problems connecting to Slack, problems reported by internal users, and pages and alerts to several engineering teams all arrived at almost the same moment. Many users could not connect: the Slack client could not finish booting, the step that fetches channel lists, preferences and recent conversations, and showed an error page.
- Trigger
A percentage-based rollout step upgraded the Consul agent on 25% of the fleet, followed by a slow sequential restart of the agents. Each restart on a Memcached node removed it from the Consul service catalog, so Mcrib, the cache-tier control plane, replaced it with an empty spare or flushed it when it rejoined, and the cache hit rate dropped as Slack reached its daily peak traffic.
- Root cause
- Component
- Contributing factor
- Detection
User tickets about connection problems, reports from internal users and pages and alerts to several engineering teams arrived almost at the same time, just after 6 a.m. Pacific Time.
- Remediation
- Paused the Consul agent restart operation
- Throttled client boot requests to reduce load on the database tier
- Cut the client boot rate limit again after a too-large increase and then raised it in smaller steps
- Changed the GDM membership query to read from Vitess only the data missing from Memcached
- Let the query read from replicas as well as Vitess primaries
- Raised the client boot rate limit slowly back to normal traffic levels as the caches refilled
- Action items
- Change the process for Consul rollouts so upgrades do not trigger this failure mode again
- Change the Mcrib control loop so a brief network outage or partition of cache nodes does not set off the same cascading failure
- Make the GDM membership query read from a table sharded by channel
- Check the other cache-fronted database queries for high-volume scatter queries
- Explore longer-term ways to make the caching tier more resilient
- Lessons
Slack describes performance bottlenecks, a cascading failure, dependence on a warm cache and a change as the trigger. Once the system had passed the tipping point, lower cache hit rates caused high database load that in turn kept the cache from filling, and a system in that state stays there until an outside intervention, a large cut in load or an increase in capacity, changes it. Mcrib contributed not by being wrong but by being faster than the old Consul lock scheme at replacing Memcached nodes, which increased churn in the cache tier. Client retries still added load despite backoff and jitter. A brief network partition of the cache nodes could set off the same failure, and the interaction between Consul and the caching architecture is now more widely understood.
IL-0297Mezmo users could not sign in and log indexing lagged after the auth cache's Redis servers were OOM killedMezmo2019- Symptoms
On 15 May 2019, alerts and customer reports showed that the Mezmo web application did not let users sign in, and the status page reported an indexing delay: incoming logs reached live tail and search late.
- Trigger
A traffic spike that the tool tracking batches of logs was not sized to handle.
- Root cause
- Component
- Contributing factor
- Detection
Alerts and customer reports in the early morning hours triggered the escalation procedure and woke the on-call engineers.
- Remediation
- Resized specific parts of the cluster to handle a much higher load
- Action items
- Retool the batch tracking system to reduce its direct impact on the Redis clusters
- Add observability instrumentation around the batch tracking feature set
- Improve monitoring for Redis
- Remove the bottlenecks in the pipeline that were involved in this incident
- Lessons
Mezmo took from the incident that deep instrumentation, tracing and observability across the platform matter more as features scale up.
These 3 cases involve Database and In-memory cache. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause1
Capacity exhaustion3 cases
- Contributing factor
IL-0270Discord's ScyllaDB authentication cluster overloaded during an OS upgrade, and logins failed for about 50 minutesDiscord2023IL-0212Many Slack users could not connect because a Vitess keyspace for channel membership was overloaded by cache-miss queriesSlack2022IL-0297Mezmo users could not sign in and log indexing lagged after the auth cache's Redis servers were OOM killedMezmo2019