API, ChatGPT & Sora Facing Issues (incident write-up)

Bài tóm tắt OpenAI 2024 3. Quy mô lớn Độ khó: Trung bình

OpenAI · 2024 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Chuyện gì đã xảy ra

  • 11/12/2024, từ 15:16 tới 19:38 (PST), mọi dịch vụ của OpenAI (API, ChatGPT, Sora) suy giảm nặng hoặc ngừng hẳn.
  • OpenAI chạy hàng trăm cụm Kubernetes. Lúc 15:12 họ deploy một service telemetry mới để thu metric chi tiết của control plane, như một phần nỗ lực tăng độ tin cậy. Cấu hình của nó khiến mọi node trong cụm chạy các thao tác API Kubernetes nặng, có chi phí tăng theo kích thước cụm; hàng nghìn node cùng làm thì API server sập, control plane của phần lớn cụm lớn ngừng.
  • Data plane chạy được khá độc lập với control plane, nhưng DNS thì cần control plane: service không tìm được nhau.

Vì sao lọt qua

  • Đã thử trên một cụm staging, không thấy vấn đề: lỗi chỉ xuất hiện ở cụm vượt một kích thước nhất định.
  • Trước deploy họ chỉ đánh giá CPU/bộ nhớ của chính service telemetry ở mọi cụm, không đánh giá tải lên API server; quy trình rollout theo dõi sức khoẻ service nhưng không theo dõi đủ sức khoẻ cụm.
  • DNS cache trên từng node trả bản ghi cũ nhưng còn dùng được trong khoảng 20 phút, nên lỗi hiện ra chậm và rollout kịp phủ mọi cụm (14:51–15:20). Khi cache hết hạn, tải dồn vào DNS làm tệ thêm.

Khôi phục

  • Phát hiện vài phút trước khi khách bị ảnh hưởng, nhưng muốn gỡ service phải vào control plane, mà control plane đang quá tải (bị khoá ngoài). Ba hướng song song: thu nhỏ cụm (giảm tổng tải API), chặn mạng tới API quản trị (ngăn request đắt mới), tăng tài nguyên API server. Cụm đầu hồi lúc 16:36; dời traffic sang cụm khoẻ; vài cụm vẫn kẹt vì nhiều service cùng tải tài nguyên lúc khởi động và phải can thiệp tay.

Thay đổi sau sự cố

  • Rollout theo pha cho mọi thay đổi cấu hình hạ tầng, theo dõi cả sức khoẻ cụm (kể cả control plane).
  • Fault injection: kiểm data plane sống được lâu hơn khi không có control plane; cố ý rollout thay đổi xấu để kiểm việc phát hiện và rollback.
  • Cơ chế break-glass để luôn vào được API server.
  • Tách data plane khỏi control plane (service discovery không phụ thuộc DNS của Kubernetes).
  • Khôi phục nhanh hơn: cache và rate limit động cho tài nguyên cần lúc khởi động cụm, diễn tập thay nguyên một cụm.

Bài học cho SWE

  • Công cụ quan sát cũng là một thay đổi có thể làm sập hệ thống; tác dụng phụ của nó tỉ lệ với quy mô cụm, nên staging nhỏ không bắt được.
  • Cache che lỗi thì cũng che tín hiệu dừng rollout.
  • Đường sửa lỗi không được phụ thuộc vào chính thành phần đang hỏng.

Liên quan