How We Rebuilt Our Log Storage and Search Infrastructure for Scale

Bài tóm tắt Railway 2022 2. Tăng trưởng Độ khó: Cơ bản

Railway · 2022 · 2. Tăng trưởng · Độ khó: Cơ bản — bài gốc

Bài ngắn; phần đọc và stream log chỉ được tóm tắt.

Bối cảnh

  • Đầu 2022, hơn 500.000 deployment trên Railway lấy log thẳng từ Docker: mỗi lần mở trang log, request đi tới hạ tầng deployment, đọc log từ Docker rồi trả về frontend, bằng polling mỗi 2 giây.
  • Việc này đè lên Docker daemon, vốn có việc quan trọng hơn nhiều là giữ deployment chạy. Theo Railway, cách đơn giản đó đúng lúc đầu vì cho ra sản phẩm nhanh.

Thay đổi chính

  • Docker chỉ còn một việc với log: đẩy qua syslog driver tới một Vector cục bộ trên mỗi node.
  • Vector cục bộ chuyển tiếp tới một Vector trung tâm, nơi log vừa được stream ra filesystem (bucket theo giờ, giữ vài giờ, dùng cho stream realtime bằng tail file và query ngắn hạn) vừa ghi theo batch lên Google Cloud Storage để giữ lâu; query ngoài cửa sổ vài giờ thì đọc GCS.
  • Đọc: frontend mở GraphQL subscription → backend kiểm quyền, mở gRPC stream tới log service → log service đẩy thẳng về frontend. Thay polling bằng stream.
  • Giám sát chính pipeline bằng metric nội bộ của Vector gửi DataDog.
  • Tính năng mới có được nhờ kiến trúc mới: xem log của mọi deployment cũ, lọc theo từ khoá cho cả lịch sử lẫn stream.

Bài học cho SWE

  • Đường đọc phụ (xem log) không được đè lên thành phần giữ hệ chạy (Docker daemon); tách nó ra một service riêng (Nền tảng nội bộ cho service (đường ray chung)).
  • Polling định kỳ nhân với số người xem là tải lớn; chuyển sang push/stream (Realtime và fan-out).
  • Hai tầng lưu: đĩa cục bộ cho dữ liệu nóng vài giờ, object storage cho lâu dài.

Liên quan