Nguồn: Discord Engineering

Tóm tắt

Vào ngày 25 tháng 3 năm 2026, dịch vụ voice và video của Discord bị gián đoạn nghiêm trọng trong khoảng 3 tiếng đồng hồ, từ 12:13 đến 15:30 PDT. Nguyên nhân bắt nguồn từ một thay đổi cấu hình định kỳ trong quá trình migration sang Kubernetes — nhóm kỹ thuật tăng CPU/memory của pod và giảm số lượng pod theo tỷ lệ để kiểm tra CPU utilization. Tuy nhiên, cơ chế kiểm tra an toàn khiến tiến trình handoff không thể hoàn thành trước khi grace period của Kubernetes hết hạn, dẫn đến 17% session của người dùng bị tắt đột ngột.

Discord sử dụng mô hình actor (GenServer processes của Elixir), trong đó mỗi thiết bị kết nối sẽ tạo ra một session process. Khi 17% session tắt đồng loạt, các process monitor gửi hàng triệu thông báo :DOWN lan tỏa khắp hệ thống realtime, kích hoạt cascade qua gateway, guilds, presence và hệ thống A/V. Gateway service tại zone us-east1-b bị quá tải do rate limit chưa được điều chỉnh sau migration, memory usage tăng đột biến lên gần 100% và các node bắt đầu restart.

Phần phức tạp nhất của sự cố là hệ thống voice syncers — service điều phối 25.000+ SFU instance trên toàn cầu. Mỗi khi session reconnect, voice syncers phải gửi HTTPS request đến fleet SFU, đi qua internal library Holster và Erlang HTTP client (gun). Vấn đề cốt lõi là hai Erlang supervisor process dùng “selective receive” để chờ ACK từ child process — với mailbox ~100k message, thời gian spawn tăng thêm ~1ms, và khi mailbox tăng lên 1 triệu message, hệ thống không thể bắt kịp. Bottleneck lan đến cả kết nối etcd, khiến các voice syncer instance liên tục drop khỏi consistent hash ring sau khi TTL 60 giây hết hạn.

Quá trình khôi phục đòi hỏi phải restart toàn bộ hệ thống voice syncer theo cách có kiểm soát. Kể từ sự cố, Discord đã triển khai nhiều cải tiến: tối ưu hóa handoff logic, điều chỉnh rate limit sau migration, thay thế Holster pooling bằng cách tiếp cận không có bottleneck supervisor, và cải thiện cơ chế theo dõi sức khỏe etcd. Đây là bài học điển hình về cách một thay đổi nhỏ có thể kích hoạt cascade failure trong distributed system có tính trạng thái cao.

👉 Đọc bài gốc