Discord

Công ty Dành cho thành viên
Bài đọc thử: 1/3 · còn 2 bài miễn phí · Xem gói thành viên

Mạch tiến hoá

Hiếm có công ty nào kể cùng một bài toán qua 6 năm như Discord. Năm 2015 họ cố ý dùng một replica set MongoDB để ra sản phẩm trong 2 tháng, kèm đường thoát. Họ phân tích workload rồi chuyển sang Cassandra 12 node với partition key (channel, bucket) Discord 2017. Đến 2022 cụm đó lên 177 node và nhiều toil (hot partition, compaction, GC của JVM). Họ thêm data service Rust gộp request, rồi migrate sang ScyllaDB 72 node trong 9 ngày Discord 2023.

Song song là mạch về runtime. Elixir/BEAM được giữ và tối ưu bằng thư viện riêng cho fan-out và các đường nóng Discord 2017. Rust vào từ một service duy nhất (Read States) vì GC của Go Discord 2020 và đến 2022 thành ngôn ngữ của tầng data service. Theo Discord, họ đạt 250+ triệu user với dưới 50 kỹ sư (2020). Năm 2026 một thay đổi cấu hình khi lên Kubernetes gây sự cố voice dây chuyền; postmortem cho thấy mặt trái của mô hình actor (process đơn luồng trên đường nóng) Discord 2026. Năm 2026 họ thêm tracing vào stack Elixir: bọc message để mang trace context, lấy mẫu theo số người nhận của fan-out và cắt overhead của chính tracing Discord 2026. Ngoài tầng tin nhắn, rule engine safety Osprey xử lý khoảng 400 triệu action mỗi ngày (12/2025), nhận cả request đồng bộ lẫn event bất đồng bộ và được tách khỏi phụ thuộc nội bộ để mở mã năm 2026 Discord 2026. Ở phía client, Android chuyển sang React Native năm 2022 rồi được tối ưu theo người dùng nặng nhất trên máy yếu, có màn hình phải quay lại native Discord 2025. Cũng năm 2023, một cụm Scylla nhỏ cho xác thực sập khi thao tác nâng cấp theo zone gặp disk suy giảm ở zone khác, cho thấy cụm nhỏ mà tối quan trọng cần vận hành khác cụm lớn Discord 2023. Quanh tầng realtime, Discord hạ cấu trúc dữ liệu nóng xuống Rust qua NIF (2019) Discord 2019, rồi đẩy một guild lên hơn 1 triệu người online bằng passive session, relay và ETS, kèm một lần sửa GC của BEAM (2023) Discord 2023, và giảm 40% băng thông gateway bằng zstandard streaming (2024) Discord 2024. Ở tầng lưu trữ, họ ghép Local SSD với đĩa mạng bằng software RAID để ScyllaDB đọc nhanh mà vẫn bền (2022) Discord 2022, và năm 2026 thay script vận hành bằng một control plane có precondition và resume cho hàng trăm node ScyllaDB Discord 2026.

Timeline

Năm = năm sự kiện theo bài (có thể sớm hơn năm đăng bài).

Năm Giai đoạn Thay đổi Nguồn
2015 1. Khởi đầu Bản đầu viết trong <2 tháng; mọi dữ liệu trên một replica set MongoDB (cố ý). 11/2015: 100 triệu tin, dữ liệu + index không còn vừa RAM. Discord 2017
2016 2. Tăng trưởng Sang Cassandra: khoá ((channel_id, bucket), message_id), đọc/ghi kép rồi bỏ MongoDB trong một tuần; 12 node, RF 3; xử lý sự cố tombstone. Discord 2017
2017 2. Tăng trưởng ~5 triệu user đồng thời trên Elixir; viết Manifold (fan-out), FastGlobal, Semaphore. Discord 2017
2019 3. Quy mô lớn Viết lại service Read States từ Go sang Rust vì GC spike mỗi 2 phút; cache tăng lên 8 triệu mục. Discord 2020
2019 3. Quy mô lớn Sorted set cho member list bằng Rust NIF trong Elixir: 0,6–3,7 µs tới 1 triệu phần tử (bản Elixir thuần 640 µs ở 250.000). Discord 2019
2020 3. Quy mô lớn Mọi DB trừ cụm tin nhắn đã chuyển sang ScyllaDB. Discord 2023
2022 3. Quy mô lớn Data service Rust (request coalescing); migrate hàng nghìn tỷ tin sang ScyllaDB trong 9 ngày; 177 → 72 node, p99 đọc 40–125ms → 15ms. Discord 2023
2022 4. Điều chỉnh App Android sang React Native (2022), rồi tối ưu cho power user: ảo hoá danh sách, emoji picker Android viết lại native, FastestList (bài 3/2025). Discord 2025
2022 3. Quy mô lớn Super-disk cho ScyllaDB trên GCP: md RAID0 Local SSD + RAID1 write-mostly với Persistent Disk; đọc local, bền nhờ đĩa mạng. Discord 2022
2023 3. Quy mô lớn Sự cố xác thực 6/11/2023: nâng OS cụm Scylla theo zone + disk suy giảm + cache nguội + retry storm, khoảng 50 phút; nhân đôi cụm, đưa nâng cấp vào control plane. Discord 2023
2023 3. Quy mô lớn Guild hơn 1 triệu người online: passive session (−90% fan-out), relay, ETS + worker, sửa GC virtual binary heap. Discord 2023
2024 3. Quy mô lớn Gateway zlib → zstandard streaming qua dark launch, passive update delta; −40% băng thông. Discord 2024
2025 3. Quy mô lớn Osprey (open source 2026): rule engine khoảng 400 triệu action/ngày, gRPC đồng bộ + queue bất đồng bộ, Coordinator ưu tiên đồng bộ, luật phân phối qua etcd. Discord 2026
2026 3. Quy mô lớn Sự cố voice 3 giờ: đổi cấu hình pod khi lên Kubernetes làm 17% session dừng đột ngột → bão kết nối lại → supervisor đơn luồng của voice syncers tắc. Thêm admission webhook, PartitionSupervisor, rate limit. Discord 2026
2026 3. Quy mô lớn Tracing cho Elixir: Envelope mang trace context qua message passing; lấy mẫu theo kích thước fan-out; bỏ giải context của request không lấy mẫu. Discord 2026
2026 4. Điều chỉnh Scylla Control Plane (Rust): task có precondition, idempotent, workflow YAML theo zone, resume bằng SQLite; dựng cụm 36 giờ → dưới 2 giờ. Discord 2026

Concept liên quan

Tất cả bài viết của blog (58 bài)

Blog này có 58 bài – thành viên xem đầy đủ danh sách, nhóm theo năm, có link về bài gốc.

Xem gói thành viên