- Khi client kết nối tới Discord, chúng nhận các cập nhật thời gian thực về những gì đang diễn ra thông qua một dịch vụ gọi là "gateway"
- Từ cuối năm 2017, các kết nối gateway của client đã được nén bằng
zlib, giúp kích thước thông điệp nhỏ hơn từ 2 đến 10 lần
- Zstandard (
zstd) có tỷ lệ nén cao hơn zlib, thời gian nén ngắn hơn, và hỗ trợ tính năng dictionary để tiếp tục giảm băng thông
- Kết quả thử nghiệm
zstd năm 2019 không mấy tích cực, nhưng họ đánh giá việc thử lại là xứng đáng
Streaming với Zstd
zlib sử dụng nén dạng streaming, còn zstd thì không
- Với các payload nhỏ,
zstd cho hiệu năng kém hơn zlib
- Họ fork
ezstd, binding zstd cho Elixir, để bổ sung khả năng streaming
- Sau khi chuyển sang streaming với
zstd, họ đạt cải thiện lớn so với streaming zlib cả về tỷ lệ nén lẫn tốc độ
Nỗ lực tối ưu hóa
Tinh chỉnh
- Họ điều chỉnh các tham số nén
zstd như chainlog, hashlog, windowlog để cân bằng giữa mức dùng bộ nhớ và thời gian nén
Dictionary của Zstd
- Họ cố tận dụng tính năng dictionary của
zstd để tăng tỷ lệ nén, nhưng hiệu quả khá hạn chế
- Họ kết luận độ phức tạp khi dùng dictionary lớn hơn lợi ích mang lại nên quyết định không áp dụng
Nâng cấp buffer
- Họ triển khai một vòng phản hồi để nâng cấp buffer
zstd bằng cách tận dụng phần bộ nhớ dư vào giờ thấp điểm
- Tỷ lệ nâng cấp thấp hơn dự kiến; họ thử cải thiện bằng cách điều chỉnh cấu hình allocator của BEAM, nhưng cuối cùng rút lại vì lợi ích không tương xứng với độ phức tạp
Triển khai và phát hành
- Mức cải thiện băng thông từ
zstd đủ lớn để họ quyết định áp dụng không chỉ cho mobile mà cả desktop
- Họ tìm các binding
zstd phù hợp cho từng nền tảng như Java, Objective-C, Rust và phát hành theo từng giai đoạn trong nhiều tháng
Thành quả bổ sung: Passive Sessions V2
- Trong quá trình áp dụng
zstd, họ phát hiện thông điệp passive_update_v1 chiếm hơn 30% băng thông gateway
- Họ giới thiệu
passive_update_v2, chỉ gửi các kênh/thành viên đã thay đổi, giúp giảm phần băng thông này từ 35% xuống 5%
Mức tiết kiệm lớn
- Việc kết hợp Passive Sessions v2 và
zstd đã giúp giảm gần 40% băng thông gateway mà client sử dụng
- Việc phát hiện ra cơ hội tối ưu hóa ngoài dự tính cho thấy tầm quan trọng của đo đạc phù hợp và phân tích biểu đồ bằng tư duy phản biện
1 bình luận
Ý kiến trên Hacker News
Có ý kiến phàn nàn rằng thời gian khởi chạy của Discord mất tới 20–30 giây
Có vẻ bài viết tập trung vào tỷ lệ nén và việc giảm băng thông mạng
Cách tiếp cận nén dựa trên từ điển dùng JSON và Erlang ETF khá thú vị
Có người ngạc nhiên khi phản hồi bootstrap thông thường (
READY) lại lớn hơn 2MBCó nhắc đến nội dung thực tế của dispatch
PASSIVE_UPDATE_V1Không thấy đề cập đến mức độ an toàn trước các kiểu tấn công như compression oracle attack (BREACH)
Có vấn đề là chỉ cần mở tab Discord thì máy tính đã chậm đi
Có ý kiến cho rằng việc họ mô tả cả những thứ đã thử nhưng không hiệu quả là rất tốt
Có ý kiến rằng mIRC làm tốt hơn