2 poin oleh GN⁺ 2024-09-29 | 1 komentar | Bagikan ke WhatsApp

Pengantar

  • Pada 2017, Discord membagikan cara mereka memigrasikan basis data dari MongoDB ke Cassandra untuk menyimpan pesan
  • Cassandra menawarkan skalabilitas, toleransi kesalahan, dan kemudahan pemeliharaan, tetapi seiring waktu masalah performa dan beban pemeliharaan meningkat
  • Pada 2022, Discord kembali memigrasikan basis datanya ke ScyllaDB

Masalah di Cassandra

  • Struktur penyimpanan pesan: pesan disimpan dengan partisi berdasarkan channel_id dan bucket
  • Masalah partisi panas: ketika trafik terkonsentrasi pada kanal tertentu, latensi seluruh basis data meningkat
  • Masalah pemeliharaan: penurunan performa terjadi akibat proses kompresi SSTable dan masalah garbage collection pada JVM

Perubahan arsitektur

  • Adopsi ScyllaDB: basis data kompatibel Cassandra yang ditulis dalam C++, yang menyelesaikan masalah garbage collection
  • Layanan data: menempatkan layanan perantara antara API dan basis data untuk mengendalikan trafik dan meningkatkan performa
  • Penggunaan Rust: menggunakan Rust untuk menulis kode konkurensi yang aman dan cepat

Layanan data

  • Penggabungan permintaan: ketika beberapa pengguna meminta data yang sama, hanya satu kueri dikirim ke basis data dan hasilnya dibagikan
  • Routing berbasis consistent hashing: permintaan untuk kanal yang sama diarahkan ke instance layanan yang sama untuk mengurangi beban basis data

Migrasi skala besar

  • Membangun klaster ScyllaDB: menyusun penyimpanan yang cepat dan tahan lama dengan SSD lokal dan RAID
  • Migrasi data: memindahkan data dengan cepat menggunakan data migrator yang ditulis dalam Rust
  • Validasi data otomatis: mengirim sedikit permintaan baca ke kedua basis data lalu membandingkan hasilnya untuk memastikan integritas data

Beberapa bulan kemudian

  • Peningkatan performa: memberikan performa yang lebih baik dengan lebih sedikit node dibanding Cassandra
  • Pengurangan latensi: performa pengambilan dan penyisipan pesan meningkat secara signifikan
  • Use case produk baru: berkat peningkatan performa, fitur-fitur baru menjadi mungkin untuk diimplementasikan

# Ringkasan GN⁺

  • Discord memigrasikan basis datanya ke ScyllaDB untuk mengatasi masalah performa Cassandra
  • Melalui layanan data yang ditulis dalam Rust dan ScyllaDB, mereka mengelola trafik secara efektif dan meningkatkan performa
  • Dalam proses migrasi data, mereka menggunakan metode yang cepat dan efisien untuk menyelesaikan perpindahan tanpa downtime
  • Tulisan ini membahas tantangan dan solusi dalam migrasi basis data berskala besar, sehingga bermanfaat bagi orang yang tertarik pada operasi sistem berskala besar

1 komentar

 
GN⁺ 2024-09-29
Komentar Hacker News
  • Tulisan blog tersebut menyalahkan GC, tetapi sebenarnya masalahnya ada pada cara Cassandra digunakan atau cara Cassandra menangani penghapusan dalam jumlah besar

    • "Ketika jutaan pesan dihapus melalui API, Cassandra harus memindai jutaan tombstone"
    • Ada pembahasan tentang tuning GC, tetapi sebenarnya mereka menggunakan versi Cassandra dan JVM yang sudah lama
  • Jika menggunakan protokol chat terdistribusi, masalah seperti ini tidak akan terjadi

    • Ada spesifikasi terbuka dan berbagai implementasi seperti IRC, Matrix, dan XMPP
    • Sulit memahami bagaimana Discord bisa mendominasi pasar
  • Pendapat tambahan dari salah satu pendiri ScyllaDB

    • Discord tidak dapat menyelesaikan perbaikan dengan Cassandra, tetapi hal itu memungkinkan di Scylla
    • Scylla memiliki banyak kesamaan dengan Cassandra, tetapi memprioritaskan kueri melalui scheduler CPU dan IO miliknya sendiri
    • Scylla memiliki mode baru tombstone_gc=repair
    • Arsitektur Raft dan tablet baru Scylla baru-baru ini dirilis
  • Lapisan layanan mengingatkan pada Varnish Cache

    • Mereka tidak menyebutkan caching, tetapi mirip dengan "grace mode" milik Varnish
    • Menyenangkan melihat consistent hashing muncul berulang kali
  • Menghapus pesan lama hampir mustahil

    • Ini adalah mimpi buruk privasi, dan membuat orang bertanya-tanya mengapa UE tidak turun tangan
  • Artikelnya ditulis dengan sangat baik

    • Beralih dari Cassandra ke Scylla merupakan bagian dari solusi
  • Jumlah node penyimpanan pesan Discord lebih sedikit dari perkiraan

    • Mengharapkan arsitektur yang lebih kompleks, tetapi kenyataannya mereka hanya menggunakan 200 node
    • Arsitektur cloud modern tampaknya terlalu banyak dirancang
  • Menyimpan data dan melakukan data mining adalah dua masalah yang berbeda

  • Tim ScyllaDB memprioritaskan peningkatan performa dan mengimplementasikan kueri terbalik

    • Jadi penasaran berapa besar biaya yang dibayarkan sebelum menggunakan ScyllaDB
  • Diskusi tentang "How Discord Stores Trillions of Messages"

    • Pada Maret 2023 ada 10 komentar