Bản GIF clip của Reachel từ “Friends” đã tăng lên hàng trăm gigabyte, làm sụp đổ các bản sao lưu của Discourse

Bản GIF clip của Reachel từ “Friends” đã tăng lên hàng trăm gigabyte, làm sụp đổ các bản sao lưu của Discourse

2 hardware

Tóm tắt ngắn gọn

Discourse là nền tảng thảo luận trực tuyến phổ biến, hiện có hơn 22 000 cộng đồng.

Gần đây khi sao lưu trang web đã gặp vấn đề nghiêm trọng: một tập tin GIF (1,6 MB) được người dùng sao chép 246 173 lần, vượt quá giới hạn liên kết cứng trong hệ thống tệp ext4 và làm tăng kích thước bản sao lưu lên 377 GB.

Dưới đây là phân tích chi tiết về tình huống, nguyên nhân và giải pháp.

1. Sự việc gì đã xảy ra?
- Discourse cho phép chèn emoji và GIF vào mọi tin nhắn.
- Khi di chuyển tệp từ một ngữ cảnh sang ngữ cảnh khác (ví dụ, từ trò chuyện riêng sang bài đăng công khai), hệ thống tạo bản sao mới với SHA‑1 ngẫu nhiên. Do đó, ngay cả khi nội dung giống nhau, Discourse coi nó là đối tượng mới.
- Một GIF có thể xuất hiện trong hàng chục nghìn tin nhắn và cuộc trò chuyện cá nhân – mỗi lần được tạo một tệp riêng. Tổng cộng 246 173 bản sao vượt quá giới hạn ext4, khiến hệ thống bắt đầu tạo tệp mới thay vì liên kết cứng, dẫn đến “mất” 181 000 bản sao lưu.

2. Giải pháp ban đầu – gom theo hash
- Khi sao lưu, Discourse cố gắng nhóm các tải lên theo SHA‑1:
1. Tập hợp tất cả các tệp có cùng hash.
2. Chỉ tải lên bản sao đầu tiên trong mỗi nhóm.
3. Đối với những bản còn lại tạo liên kết cứng.
- Phương pháp này trông tinh tế nhưng không tính đến giới hạn ext4 về số lượng liên kết. Khi đạt tới giới hạn, hệ thống tự động tạo tệp mới thay vì liên kết, làm tăng kích thước sao lưu đột ngột.

3. Giải pháp mới – “chuyển đổi” khi gặp lỗi EMLINK
- Discourse phát triển chiến lược linh hoạt hơn:
1. Tạo liên kết cứng như bình thường.
2. Nếu hệ thống trả về lỗi EMLINK (vượt quá giới hạn liên kết), bản sao tiếp theo trở thành “tệp chính”.
3. Từ đó, các liên kết mới lại được tạo tới phiên bản chính mới này.
- Như vậy, mỗi khi vượt qua giới hạn, hệ thống chuyển sang tệp cha mới và vẫn hoạt động mà không gặp lỗi. Giải pháp tương thích với mọi hệ thống tệp và không cần cấu hình thêm.

4. Kết quả và bài học
- Một GIF phổ biến (vũ điệu Rachel từ “Friends”) đã làm tăng kích thước sao lưu lên 377 GB.
- Giới hạn ext4 khoảng 65 000 liên kết cứng là yếu tố quyết định.
- Giải pháp ban đầu dựa trên hash không tính đến giới hạn tệp, dẫn tới mất dữ liệu.
- Chiến lược “chuyển đổi” khi gặp lỗi EMLINK cho phép quản lý hiệu quả số lượng bản sao lớn và duy trì hiệu suất sao lưu.

> *“Bây giờ chúng ta biết rằng Jennifer Aniston có thể thực hiện thử nghiệm tải nặng cho hạ tầng,”* — với một chút châm biếm, Discourse ghi trong blog của mình.

Bình luận (0)

Chia sẻ ý kiến của bạn — vui lòng lịch sự và đúng chủ đề.

Chưa có bình luận nào. Hãy để lại bình luận và chia sẻ ý kiến của bạn!

Để bình luận, vui lòng đăng nhập.

Đăng nhập để bình luận