Tailscale tìm ra con bug hỏng dữ liệu 16 năm tuổi trong SQLite

Tailscale tìm ra con bug hỏng dữ liệu 16 năm tuổi trong SQLite

Một lỗi cơ sở dữ liệu bí ẩn khiến Tailscale gián đoạn dịch vụ 19 lần, trước khi các kỹ sư tóm được con bug 16 năm tuổi ẩn sâu trong SQLite.

Tailscale chạy hệ thống control plane trên SQLite, sử dụng một process Go duy nhất cho mỗi shard nội bộ. Từ tháng 8 năm ngoái, các bản kiểm tra backup liên tục báo file database bị hỏng, kéo theo 19 đợt downtime riêng biệt trong suốt 6 tháng. Không thể tái dựng lỗi trong môi trường giả lập, Tailscale đã hợp tác với Antithesis và triển khai telemetry trực tiếp trên hệ thống thực tế để tìm hung thủ: một lỗi 16 năm tuổi nằm ở logic reset WAL (write-ahead log) của SQLite.

Vì sao việc này đáng chú ý: SQLite vốn là chuẩn mực cho phần mềm đơn giản, tin cậy. Con bug này cho thấy ngay cả codebase được tin tưởng nhất vẫn có thể giấu những lỗi bất đồng bộ (concurrency) hiếm gặp suốt hàng thập kỷ — cho đến khi tải hệ thống cực lớn ép nó chạm mốc giới hạn.

Tóm gọn lại là: Tailscale không làm rò rỉ khóa mã hóa hay lưu lượng mạng nào, nhưng việc khôi phục các shard bị hỏng khiến dịch vụ gián đoạn nhiều lần. Đội ngũ kỹ sư sau đó đã phối hợp vá luôn con bug này trên bản gốc SQLite.

Đến cả công nghệ đáng tin nhất đôi khi cũng giấu vài "hồn ma" cổ đại trong codebase.