The First ziglang.org Outage
Bài tóm tắt Zig Software Foundation 2025 4. Điều chỉnh Độ khó: Dễ
Zig Software Foundation · 2025 · 4. Điều chỉnh · Độ khó: Dễ — bài gốc
Phần tiếp của Zig Software Foundation 2024: sự cố đầu tiên sau khi chuyển ziglang.org về một máy tự host.
Bối cảnh
- Ngày 2025-09-01, cộng đồng báo ziglang.org chậm và trả HTTP 500. Dashboard cho thấy lượng truyền dữ liệu tăng vọt trong 24 giờ trước.
- Access log: một bot với user agent
facebookexternalhit/1.1crawl vòng vòng, trong khoảng 36 giờ tải cùng một tarball hơn một triệu lần.
Thay đổi chính
- Giảm thiểu: trả 403 cho user agent đó, site về bình thường. Bot vẫn còn hoạt động, có thể phải chặn theo IP.
- Không đổi kiến trúc để chịu tải: theo Zig, site được thiết kế để "gãy chứ không oằn" khi quá tải. Các đề xuất bị từ chối và lý do (theo Zig): dùng S3/serverless tự scale thì tốn tiền nuôi bot; xin CDN hay credit miễn phí thì phụ thuộc vào thiện chí của một công ty cloud; phát hành qua GitHub thì ngược hướng giảm phụ thuộc vào GitHub.
- Thay vào đó dựa vào mirror cộng đồng: người dùng bản phát hành có tag hầu như không bị ảnh hưởng vì mirror đã cache. Người dùng bản dựng không ổn định thì có gặp lỗi khi mirror chưa có bản đó.
- Phát hiện mới: một số mirror thử lại lấy tarball từ ziglang.org nhiều lần, gây timeout rất dài và client không kịp chuyển sang mirror khác. Sửa: bổ sung đặc tả mirror với giới hạn timeout cho cả client và mirror; dự định viết bản mirror tham chiếu bằng Zig.
Vì sao (theo Zig)
Tài nguyên (trả tiền hay được cho) không nên bị âm thầm lãng phí cho bot viết kém hay CI không cache. Hơn 90% tiền quyên góp được dùng trả công người đóng góp; năm 2024 ngân sách tăng 13% và 92% thu nhập trả cho contributor.
Bài học cho SWE
- Chọn "gãy" thay vì "tự scale" là một quyết định chi phí có chủ đích; phần sẵn sàng được đẩy sang lớp phân phối dự phòng (mirror) (Chi phí hạ tầng và build vs buy).
- Lớp dự phòng chỉ có ích khi timeout và thử lại có giới hạn: mirror thử lại nguồn gốc mãi thì client không bao giờ chuyển sang nguồn khác (Sự cố và postmortem).
- Lỗi đầu tiên của một thiết kế mới là bài kiểm tra thật đầu tiên; ghi lại cái gì chạy được và cái gì không.
Liên quan
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (1)