Discord GiảmSSFWorkbook Traffic By 40%
Discord, một nền tảng giao tiếp phổ biến, đã có một vấn đề nghiêm trọng trên tay. Dịch vụ truyền thông thời gian thực của nó, Gateway, đang tiêu thụ nhiều tài nguyên hơn, dẫn đến chi phí tăng ước tính hàng trăm nghìn đô la. Đây là một vấn đề lớn cho công ty cho đến khi họ phát hiện ra cách giảm lưu lượng traffic xuống 40%.
Dịch vụ Truyền thông Thời gian Thực của Discord
Gateway, một dịch vụ cung cấp các bản cập nhật tức thời cho các client, đã sử dụng zlib压缩 cho các kết nối kể từ năm 2017. zlib là một thư viện nén dữ liệu mất dữ liệu được sử dụng rộng rãi. Nó được thiết kế để nhỏ gọn, nhanh và di động, khiến nó phù hợp với nhiều ứng dụng khác nhau.
Cách zlib Compression Works
zlib 압축 combines LZ77 và mã hóa Huffman. LZ77压缩 works by maintaining a sliding window of size n của dữ liệu đã thấy trước đó và một look-ahead window của size M. Nó tìm kiếm sự phù hợp dài nhất giữa look-ahead window và sliding window. Đầu ra bao gồm một chuỗi các ký tự và các tham chiếu ngược lại sliding window.
Mã hóa Huffman là một phương pháp mã hóa dữ liệu bằng mã có độ dài biến. Nó gán mã ngắn hơn cho các ký tự thường xuyên hơn, giảm kích thước dữ liệu tổng thể.
Streaming Compression
Đội ngũ tại Discord đã thí nghiệm với streaming compression, cho phép bộ nén duy trì"context" trên nhiều tin nhắn. Điều này cho phép bộ nén tối ưu hóa nén dựa trên dữ liệu lịch sử mà không cần phải khởi động lại với mỗi tin nhắn.
Tuy nhiên, dịch vụ Gateway của Discord được viết bằng một ngôn ngữ cũ hơn, và họ không thể tìm thấy bất kỳ gói kết nối nào cung cấp chức năng này. Để vượt qua hạn chế này, đội ngũ đã fork repository và thêm hỗ trợ streaming. Họ đã đóng góp lại phần mềm này cho dự án gốc.
Thí nghiệm và Tối ưu hóa
Đội ngũ tại Discord đã thí nghiệm với các thuật toán nén dữ liệu và tham số khác nhau để đạt được tỉ lệ nén tốt nhất. Họ tập trung vào ba tham số chính: chain lock, hash lock, và window lock. Các tham số này cung cấp một sự lựa chọn giữa tốc độ nén, sử dụng bộ nhớ, và tỉ lệ nén.
Sau khi thí nghiệm với các setting khác nhau, họ đã chọn các setting cao hơn một chút so với mặc định, cung cấp nén cải thiện đồng thời cũng đáp ứng các hạn chế bộ nhớ của gateway node.
Passive Update v2
Đội ngũ cũng nhận thấy rằng passive update v1, chiếm hơn 35% lưu lượng traffic của Gateway, đang gửi thông tin không cần thiết. Họ đã tạo ra passive update v2, chỉ gửi thông tin cần thiết, giảm sử dụng passive update từ 35% xuống chỉ 5% lưu lượng traffic của Gateway.
Implementation và Rollout
Đội ngũ đã implement Zstandard cho người dùng desktop, đã tham gia và tích hợp các gói kết nối Zstandard phù hợp cho từng nền tảng. Họ cũng đã viết các gói kết nối của riêng mình cho Rust.
Để giảm thiểu rủi ro của thay đổi lớn, quá trình triển khai đã được thực hiện đằng sau một flag tính năng, cho phép quay lại nhanh chóng nếu có vấn đề, giúp xác thực kết quả và cho phép theo dõi và đạt chuẩn metrics để đảm bảo rằng thay đổi không ảnh hưởng tiêu cực đến trải nghiệm người dùng.
Kết quả
Sau tất cả các thay đổi, Discord đã giảm lưu lượng traffic của Gateway xuống gần 40%. Đây là một chiến thắng lớn, tiết kiệm hàng trăm nghìn đô la mỗi năm.