Cases2 cases
1 to 2 of 2
- Symptoms
On 16 March 2020 at 14:19 PDT most of Discord's Elixir services, which handle real-time connections and chat message processing, crashed at once. Discord lost much of its real-time capacity, the failure cascaded into dependent systems, and most users could not connect for about an hour.
- Trigger
At 14:18 the Google Cloud managed instance group autoscaler added a node to Discord's API cluster, and the TCP connection of its first announce request to etcd was reset after the request headers were sent but before the body.
- Root cause
- Component
- Contributing factor
- Detection
At 14:21 several internal alarms fired on a drop in key metrics, along with anomaly alerts for cluster utilization, and a SEV1 incident was declared.
- Remediation
- Restarted the lost real-time capacity and repaired the failed nodes
- Throttled connections to Discord to help services recover
- Stopped anti-entropy repairs on two ScyllaDB clusters so reconnecting users would not starve them of resources
- Raised the connection throttle step by step to let more users reconnect
- Action items
- Make the etcd clients send each announce request in a single TCP packet, so headers and body arrive together or not at all
- Add error handling that ignores services whose key value is corrupt instead of crash-looping
- File an upstream bug report with the Go project about net/http not checking the body against Content-Length
- Lessons
Discord's service discovery code handled many etcd failure modes but did not expect a client to write a key without a value because of a transient network error. Go's net/http accepts a request whose body is shorter than its Content-Length header, which breaks the HTTP 1.1 specification and added a failure case nobody had anticipated.
IL-0261Discord went fully offline twice as short network losses on Google Cloud sessions nodes wedged Erlang distributionDiscord2017- Symptoms
On 17 and 18 November 2017 nodes of Discord's 'sessions' cluster on Google Cloud Platform lost network connectivity for short periods, 16 times in all. Engineers saw a service impact, a node whose service had died and restarted, and pages for low memory on other sessions nodes; twice the failure cascaded and Discord was completely offline for about 30 minutes.
- Trigger
A software change that Google rolled out to the Google Cloud Platform networking stack on Friday introduced a bug that made VMs in Discord's sessions cluster lose network connectivity for short periods.
- Root cause
- Component
- Contributing factor
- Detection
At 11:52 PST on 17 November engineers noticed a service impact and escalated it in the incident chat. Later affected nodes showed up as pages to the on-call engineer for low memory on sessions nodes, and on 18 November as a page for a networking incident on sessions-1-11 together with issue reports that the customer experience team escalated from support channels.
- Remediation
- Forcefully terminated sessions nodes whose Erlang distribution port had failed
- Escalated the Google support ticket to P1 and notified the Technical Account Manager
- Restarted several core Discord services on 17 November, making clients reconnect over about 20 minutes
- Began terminating and rebooting the entire sessions cluster after seeing that rebooted machines did not fail again
- Disabled message sending globally on 18 November to help the service recover
- Restarted all members of the sessions cluster
- Re-enabled message sending after the initial all clear
- Google rolled back the software change made to its networking stack
- Action items
- Continue the project to improve how Discord's Erlang clusters handle node failure
- Expand how upgrades to these services are load tested so the rollout can be completed safely
- Replace the HTTP library used by Discord's Elixir/Erlang services
- Fix the instability seen in Erlang's net_kernel component
- Replace the pieces of the service discovery component that degraded with more performant implementations
- Work with Google on the issues Discord met while working with Google on this incident
- Expand the internal procedure for communicating with Google so the progress of P1 issues is tracked
- Lessons
Discord concluded that performance and stability issues in its own system, in Erlang's net_kernel, the service discovery component and the HTTP library, were what turned short network losses on part of the fleet from isolated issues for some users into two full system outages.
These 2 cases involve Service discovery and Coordination and key-value store. 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 cause2
Software defect1 case
- Contributing factor
- Organisation
Cloud provider outage1 case
- Component
- Contributing factor
- Organisation