2 điểm bởi GN⁺ 2024-09-29 | 1 bình luận | Chia sẻ qua WhatsApp

Giới thiệu

  • Năm 2017, Discord đã chia sẻ cách họ chuyển cơ sở dữ liệu từ MongoDB sang Cassandra để lưu trữ tin nhắn
  • Cassandra mang lại khả năng mở rộng, khả năng chịu lỗi và dễ bảo trì, nhưng theo thời gian, các vấn đề hiệu năng và gánh nặng bảo trì ngày càng tăng
  • Năm 2022, Discord tiếp tục chuyển cơ sở dữ liệu sang ScyllaDB

Các vấn đề với Cassandra

  • Cấu trúc lưu trữ tin nhắn: Tin nhắn được phân vùng và lưu trữ theo channel_idbucket
  • Vấn đề hot partition: Khi lưu lượng dồn vào một kênh cụ thể, độ trễ của toàn bộ cơ sở dữ liệu sẽ tăng lên
  • Vấn đề bảo trì: Hiệu năng suy giảm do các tác vụ nén SSTable và vấn đề garbage collection của JVM

Thay đổi kiến trúc

  • Áp dụng ScyllaDB: Cơ sở dữ liệu tương thích Cassandra được viết bằng C++, giúp giải quyết vấn đề garbage collection
  • Dịch vụ dữ liệu: Đặt một dịch vụ trung gian giữa API và cơ sở dữ liệu để điều tiết lưu lượng và cải thiện hiệu năng
  • Sử dụng Rust: Dùng Rust để viết mã đồng thời an toàn và nhanh

Dịch vụ dữ liệu

  • Gộp yêu cầu: Khi nhiều người dùng yêu cầu cùng một dữ liệu, chỉ truy vấn cơ sở dữ liệu một lần rồi chia sẻ kết quả
  • Định tuyến dựa trên consistent hashing: Định tuyến các yêu cầu của cùng một kênh đến cùng một instance dịch vụ để giảm tải cho cơ sở dữ liệu

Di trú quy mô lớn

  • Xây dựng cụm ScyllaDB: Sử dụng SSD cục bộ và RAID để tạo cấu hình lưu trữ nhanh và bền bỉ
  • Di trú dữ liệu: Dùng trình di trú dữ liệu viết bằng Rust để chuyển dữ liệu nhanh chóng
  • Xác thực dữ liệu tự động: Gửi một lượng nhỏ yêu cầu đọc đến cả hai cơ sở dữ liệu rồi so sánh kết quả để xác minh tính toàn vẹn dữ liệu

Vài tháng sau

  • Hiệu năng cải thiện: Mang lại hiệu năng tốt hơn Cassandra với số lượng node ít hơn
  • Giảm độ trễ: Hiệu năng truy xuất và chèn tin nhắn được cải thiện đáng kể
  • Trường hợp sử dụng sản phẩm mới: Nhờ cải thiện hiệu năng, có thể triển khai các tính năng mới

# Tóm tắt của GN⁺

  • Discord đã chuyển cơ sở dữ liệu sang ScyllaDB để giải quyết các vấn đề hiệu năng của Cassandra
  • Thông qua dịch vụ dữ liệu viết bằng Rust và ScyllaDB, Discord quản lý lưu lượng hiệu quả và cải thiện hiệu năng
  • Trong quá trình di trú dữ liệu, Discord đã sử dụng các phương pháp nhanh và hiệu quả để hoàn tất việc chuyển đổi mà không có downtime
  • Bài viết này trình bày những thách thức và cách giải quyết trong một cuộc di trú cơ sở dữ liệu quy mô lớn, hữu ích với những ai quan tâm đến vận hành hệ thống lớn

1 bình luận

 
GN⁺ 2024-09-29
Ý kiến trên Hacker News
  • Bài blog đổ lỗi cho GC, nhưng thực ra vấn đề nằm ở cách dùng Cassandra hoặc cách Cassandra xử lý việc xóa hàng loạt

    • "Khi xóa hàng triệu tin nhắn qua API, Cassandra đã phải quét hàng triệu tombstone"
    • Bài có nhắc đến việc tinh chỉnh GC, nhưng thực tế họ đang dùng phiên bản Cassandra và JVM cũ
  • Nếu dùng giao thức chat phân tán thì đã không gặp vấn đề này

    • Có các đặc tả mở và nhiều cách triển khai như IRC, Matrix, XMPP
    • Khó hiểu vì sao Discord lại thống trị được thị trường
  • Ý kiến bổ sung từ đồng sáng lập ScyllaDB

    • Discord không thể hoàn tất repair với Cassandra, nhưng với Scylla thì có thể
    • Scylla có nhiều điểm chung với Cassandra, nhưng ưu tiên truy vấn thông qua bộ lập lịch CPU và IO riêng
    • Scylla có chế độ tombstone_gc=repair mới
    • Kiến trúc Raft và tablet mới của Scylla đã được phát hành gần đây
  • Lớp dịch vụ gợi nhớ đến Varnish Cache

    • Dù không nhắc đến caching, nó giống với "grace mode" của Varnish
    • Thật tốt khi thấy consistent hashing liên tục xuất hiện
  • Việc xóa các tin nhắn cũ gần như là bất khả thi

    • Đây là cơn ác mộng về quyền riêng tư, và thật khó hiểu vì sao EU chưa can thiệp
  • Đây là một bài viết được viết rất tốt

    • Việc chuyển từ Cassandra sang Scylla là một phần của giải pháp
  • Số lượng node lưu trữ tin nhắn của Discord ít hơn dự đoán

    • Tôi từng nghĩ họ sẽ có kiến trúc phức tạp hơn, nhưng thực tế chỉ dùng 200 node
    • Có vẻ kiến trúc cloud hiện đại đang bị thiết kế quá mức
  • Lưu trữ dữ liệu và khai thác dữ liệu là hai vấn đề khác nhau

  • Đội ngũ ScyllaDB đã ưu tiên cải thiện hiệu năng và triển khai truy vấn ngược

    • Không rõ trước khi dùng ScyllaDB thì họ đã phải trả bao nhiêu chi phí
  • Thảo luận về "How Discord Stores Trillions of Messages"

    • Vào tháng 3 năm 2023 đã có 10 bình luận