23 poin oleh GN⁺ 2024-09-23 | 1 komentar | Bagikan ke WhatsApp
  • Saat klien terhubung ke Discord, mereka menerima pembaruan real-time tentang apa yang sedang terjadi melalui layanan yang disebut "gateway"
  • Sejak akhir 2017, koneksi gateway klien dikompresi menggunakan zlib sehingga ukuran pesan menjadi 2 hingga 10 kali lebih kecil
  • Zstandard (zstd) memiliki rasio kompresi lebih tinggi dan waktu kompresi lebih singkat dibanding zlib, serta mendukung fitur dictionary yang dapat lebih lanjut mengurangi bandwidth
  • Hasil pengujian zstd pada 2019 tidak terlalu positif, tetapi dinilai layak untuk dicoba lagi

Streaming Zstd

  • Zlib menggunakan kompresi streaming, sedangkan zstd tidak
  • Pada payload kecil, performa zstd lebih buruk daripada zlib
  • Mereka melakukan fork pada ezstd, binding zstd untuk Elixir, lalu menambahkan streaming
  • Setelah beralih ke streaming zstd, ada peningkatan besar dalam rasio kompresi dan kecepatan dibanding streaming zlib

Upaya optimasi

Tuning

  • Parameter kompresi zstd seperti chainlog, hashlog, dan windowlog disesuaikan untuk menyeimbangkan penggunaan memori dan waktu kompresi

Dictionary Zstd

  • Mereka mencoba memanfaatkan fitur dictionary zstd untuk meningkatkan rasio kompresi, tetapi efeknya terbatas
  • Karena kompleksitas penggunaan dictionary dinilai lebih besar daripada manfaatnya, mereka memutuskan untuk tidak mengadopsinya

Upgrade buffer

  • Mereka mengimplementasikan loop umpan balik yang memanfaatkan memori cadangan pada jam-jam tidak sibuk untuk meng-upgrade buffer zstd
  • Tingkat upgrade lebih rendah dari yang diharapkan, dan meski sempat mencoba perbaikan seperti menyesuaikan pengaturan allocator BEAM, manfaatnya tidak sebanding dengan kompleksitasnya sehingga pendekatan ini dibatalkan

Implementasi dan peluncuran

  • Karena peningkatan bandwidth dari Zstd cukup besar, mereka memutuskan untuk menerapkannya tidak hanya di mobile tetapi juga di desktop
  • Mereka menemukan binding zstd yang sesuai untuk tiap platform seperti Java, Objective-C, dan Rust, lalu merilisnya secara bertahap selama beberapa bulan

Hasil tambahan: Passive Sessions V2

  • Dalam proses penerapan zstd, mereka menemukan bahwa pesan passive_update_v1 menyumbang lebih dari 30% bandwidth gateway
  • Dengan memperkenalkan passive_update_v2 yang hanya mengirim kanal/anggota yang berubah, porsi bandwidth itu turun dari 35% menjadi 5%

Penghematan besar

  • Kombinasi Passive Sessions v2 dan zstd mengurangi hampir 40% bandwidth gateway yang digunakan klien
  • Menemukan peluang optimasi yang tidak disengaja ini menunjukkan pentingnya instrumentasi yang tepat dan menganalisis grafik dengan sudut pandang kritis

1 komentar

 
GN⁺ 2024-09-23
Komentar Hacker News
  • Ada keluhan tentang waktu startup Discord yang memakan 20-30 detik

    • Dipertanyakan mengapa startup tetap lambat bahkan di PC seharga $5000
    • Digunakan analogi seolah klien dikompilasi ulang ke single-core setiap kali dijalankan
  • Tampaknya fokusnya ada pada rasio kompresi dan pengurangan bandwidth jaringan

    • Tidak ada penyebutan tentang waktu CPU atau peningkatan yang benar-benar terukur bagi pengguna
    • Saat melakukan upaya serupa di perusahaan, performa justru memburuk karena overhead kompresi/dekompresi
  • Pendekatan kompresi berbasis kamus dengan JSON dan Erlang ETF terasa menarik

    • Ini dipilih alih-alih beralih ke sistem berbasis skema seperti Cap'n Proto atau Protobufs
    • Ada ketertarikan pada benchmark Zstandard dan LZ4
    • Untuk data overlay/HUD streaming drone, digunakan LZ4, dan kompresi serupa dengan kecepatan tinggi dicapai memakai kamus yang dibuat dengan alat kamus Zstd
  • Mengejutkan bahwa respons bootstrapping umum (READY) berukuran lebih dari 2MB

  • Ada penyebutan tentang isi aktual dispatch PASSIVE_UPDATE_V1

    • Bahkan ketika hanya satu elemen yang berubah, semua channel, member, atau voice member tetap dikirim
    • Metrik yang ditemukan selama eksperimen zstd menunjukkan perilaku yang mengejutkan
    • Dipertanyakan mengapa analisis metrik tidak dilakukan sejak awal
    • Dipertanyakan mengapa delta tidak dikirim sejak awal
  • Tidak ada penyebutan tentang keamanan terhadap serangan seperti compression oracle attack (BREACH)

    • Mengingat Discord mengerahkan banyak upaya untuk rollout kompresi ini, diyakini hal tersebut pasti telah dipertimbangkan
    • Ada pendapat bahwa akan lebih baik jika mereka menuliskan detail yang lebih spesifik
  • Ada masalah di mana membuka tab Discord membuat komputer melambat

  • Sangat bagus karena dijelaskan juga hal-hal yang sudah dicoba tetapi tidak berhasil

    • Artikel yang menjelaskan percobaan yang gagal makin jarang, padahal ini sangat menarik dan membantu
  • Ada pendapat bahwa mIRC melakukannya dengan lebih baik