Fluxer - Notice history

All systems operational

API - Operational

100% - uptime
May 2026 · 100.0%Jun · 99.92%Jul · 100.0%
May 2026
Jun 2026
Jul 2026

Media Proxy - Operational

100% - uptime
May 2026 · 100.0%Jun · 100.0%Jul · 100.0%
May 2026
Jun 2026
Jul 2026

Gateway - Operational

100% - uptime
May 2026 · 99.96%Jun · 99.92%Jul · 100.0%
May 2026
Jun 2026
Jul 2026

Client - Operational

100% - uptime
May 2026 · 100.0%Jun · 100.0%Jul · 100.0%
May 2026
Jun 2026
Jul 2026

Web CDN - Operational

100% - uptime
May 2026 · 100.0%Jun · 100.0%Jul · 100.0%
May 2026
Jun 2026
Jul 2026

Marketing Site - Operational

100% - uptime
May 2026 · 100.0%Jun · 100.0%Jul · 100.0%
May 2026
Jun 2026
Jul 2026
Operational

🇦🇺 Australia - Operational

🇧🇷 Brazil - Operational

🇨🇱 Chile - Operational

🇪🇺 EU Central - Operational

🇪🇺 EU East - Operational

🇪🇺 EU West - Operational

🇮🇳 India - Operational

🇸🇬 Singapore - Operational

🇿🇦 South Africa - Operational

🇰🇷 South Korea - Operational

🇺🇸 US East - Operational

🇺🇸 US South - Operational

🇺🇸 US West - Operational

Notice history

Jul 2026

No notices reported this month

Jun 2026

Issues with community availability, elevated API error rates
  • Postmortem
    UTC
    Postmortem

    As mentioned, the bottleneck in the users service (now fixed, and glad we caught it) was a secondary effect of the guilds-2 node being OOM-killed, not the cause. We initially assumed the OOM-kill was a one-off and closed the incident, but the root cause turned out to be different.

    The node spawned an unbounded worker for every async query. When a request came in for a guild's data, such as a member list, it started a separate lightweight worker so the guild's main process stayed responsive, but nothing capped how many could run at once. On top of that, each worker loaded its own copy of the guild data it was serving (the member list, plus every member's profile and presence), which for a very large community is a lot of memory per worker. When a burst of requests arrived together, as happens when many clients reconnect after a node restart, thousands of workers ran in parallel, each holding its own copy, and exhausted the node's memory, killing it and restarting the cycle.

    We've shipped two changes for this, both as no-downtime hot patches that are now live across the fleet.

    The first caps how many of these workers run concurrently. Extra requests now wait briefly for a free slot rather than all running at once, so memory stays bounded however large the spike. Since it went out, the previously affected node has held steady with no further restarts.

    The second removes the duplication at its source. Workers no longer hold their own copies of the guild's member data; they read from a single shared in-memory copy instead, so a worker's footprint is now a small fraction of what it was before. Between the two, a burst of requests can no longer balloon a node's memory the way it did here.

    Thanks for your patience!

  • Resolved
    UTC
    Resolved

    We're so back!

  • Monitoring
    UTC
    Monitoring

    Some guild crashes are reoccurring and we are investigating.

  • Postmortem
    UTC
    Postmortem

    A sudden memory spike on guilds-2, one of our 12 guilds nodes, caused that node to be OOM-killed and triggered a thundering herd of guild restart requests against our API infrastructure.

    Until this point, we had not been aware of a bottleneck in the users service's routing layer, which processed messages serially. When the router picked up a request from the API to load a batch of users from the database (to populate the member lists in those guilds after a node failure such as this one), it waited for the request to be routed to a shard and to receive its reply. It did so without spawning a green thread in Tokio, so the wait blocked the main request loop in the router. We had only three router pods, which meant we could handle at most three concurrent requests to the users service.

    This had worked fine for a very long time. Under normal conditions our L1 cache absorbed the hits, so little or no work was done, and when work was done the requests were quick and did not run into timeout issues. When guilds-2 was OOM-killed, however, we received a flood of requests, all of which missed the cache. This was amplified by API retries, which overflowed the subscription queue into a permanent slow-consumer state, at which point NATS began dropping messages.

    The slow-consumer state then fed a second amplifier. NATS emitted a stream of slow-consumer events for the affected subscription, and our transport layer logged a warning for each one without any throttling. At the peak these warnings were firing at roughly 134 a second, and the logging alone burned enough CPU to slow the router further, which deepened the backlog and produced yet more slow-consumer events. With messages being dropped and the router starved, the API timed out, and requests that depend on the users service (including the logic to start a new session in the gateway) returned 500s.

    We restored service by scaling out the users service router capacity. We have since implemented a permanent fix, now being rolled out, in two parts. First, the router no longer blocks on the shard round-trip: it acquires a permit from a semaphore that caps the maximum concurrency and then spawns a green thread for each request, so the receive loop keeps draining the subscription at NATS speed rather than stalling on each shard reply. This mirrors the pattern our shard service already uses, where the same concurrency limit is set to 64. Second, we throttled the slow-consumer warning to at most once per second, so it can no longer burn CPU and amplify a future incident.

    Thanks for your patience!

  • Resolved
    UTC
    Resolved
    This incident has been resolved.
  • Investigating
    UTC
    Investigating
    We are currently investigating this incident.
Scheduled maintenance for real-time infrastructure improvements
  • Completed
    June 14, 2026 at 3:58 AMUTC
    Completed
    June 14, 2026 at 3:58 AMUTC

    Maintenance has completed successfully. It took some time to identify an edge case where if you had a DM open with the system user ("Fluxer"), you were actually not reconnected properly, hence the presence oscillation. We're now all back again. Thanks for your patience!

  • Update
    June 14, 2026 at 3:36 AMUTC
    Update
    June 14, 2026 at 3:36 AMUTC

    All users have reconnected at this point, but we're diagnosing a bug with rapid presence oscillation. Member lists have been temporarily disabled in a select few guilds.

  • Update
    June 14, 2026 at 3:00 AMUTC
    Update
    June 14, 2026 at 3:00 AMUTC

    We're monitoring recovery.

  • Update
    June 14, 2026 at 2:19 AMUTC
    Update
    June 14, 2026 at 2:19 AMUTC

    We identified a bug with our new hotpatching system that was not caught in testing and are fixing this before finalising the rollout.

  • Update
    June 14, 2026 at 1:50 AMUTC
    Update
    June 14, 2026 at 1:50 AMUTC

    We're restoring access to the app as quickly as capacity allows. Hang in there!

  • In progress
    June 14, 2026 at 1:30 AMUTC
    In progress
    June 14, 2026 at 1:30 AMUTC
    Maintenance is now in progress.
  • Planned
    June 11, 2026 at 4:44 AMUTC
    Planned
    June 11, 2026 at 4:44 AMUTC

    The gateway has been running smoothly for the past 10 days, with no major issues.

    We've now got scheduled maintenance planned to move our gateway infrastructure onto a new code version. For context, that infrastructure is a cluster of 54 nodes spread across six specialised tiers for redundancy and load distribution, and it's served us very well. The new version introduces a system for safe, durable, and strongly consistent code updates that can roll out across the whole cluster in seconds, all through a standardised process that minimises human error. It also stabilises the wider deployment pipeline, should we ever need to carry out a rolling deployment of our stateful tiers.

    Our lead scientist, Rick Sanchez, reckons it'll be a quick twenty-minute adventure, in and out, though you might want to take that with a pinch of salt. The work we've put into boosting our backend's performance and helping it absorb load means we can promise a faster recovery time than on previous occasions.

    Once this new durable hotpatch deployment system is in place, we shouldn't ever need to "restart Fluxer" again, unless something catastrophic triggers cascading failures in our real-time stack. We're aiming for that 99.99% uptime!

May 2026

May 2026 to Jul 2026

Next