AllianceProject Handbook
← Goals

Vận hành tin cậy ở quy mô 500.000 người dùng

Đang thực hiện

Hệ thống chịu được tải mục tiêu, tự báo khi hỏng trước lúc người dùng than, và khi có sự cố thì chặn thiệt hại trong vòng một giờ.

15%
Quý nàyNgười chịu trách nhiệm: Chủ kỹ thuật

Kết quả cần đạt

  • Đạt 99,9% thời gian hoạt động cho Chat và Task, 99,95% cho Bán hàng
  • Phát hiện sự cố từ cảnh báo tự động trước khi người dùng báo, ít nhất 80% số lần
  • Thời gian từ lúc bắt đầu sự cố tới lúc chặn được thiệt hại dưới 1 giờ
  • Chịu được tải gấp đôi mục tiêu trong bài test tải định kỳ

Vì sao tách thành mục tiêu riêng

Chất lượng sản phẩm nói về phần mềm đúng. Mục tiêu này nói về hệ thống đứng vững — hai việc khác nhau và hỏng theo hai cách khác nhau.

Code có thể đúng hoàn toàn mà hệ thống vẫn sập vì 50.000 người cùng mở app lúc 8 giờ sáng, vì một truy vấn thiếu index chạy chậm dần theo lượng dữ liệu, hay vì một migration khoá bảng trong giờ cao điểm. Ở quy mô nhỏ, những lỗi này không xuất hiện. Ở 500.000 người dùng, chúng là loại lỗi thường gặp nhất.

Ngân sách lỗi

Mục tiêu về độ sẵn sàng được phát biểu thành thời gian được phép hỏng, để nó là một con số có thể tiêu và có thể hết:

ModuleMục tiêuĐược phép hỏng mỗi tháng
Chat99,9%43 phút
Task99,9%43 phút
Bán hàng99,95%22 phút

Luật: hết ngân sách trong tháng thì dừng phát hành tính năng mới, toàn bộ sức của đội chuyển sang phần ổn định cho tới đầu tháng sau. Không xin ngoại lệ, vì ngoại lệ được cấp một lần thì tháng nào cũng sẽ có lý do để xin.

Ngân sách còn dư cũng là thông tin: dư nhiều liên tục nghĩa là đội đang quá thận trọng và có thể đi nhanh hơn.

Ba lớp phòng thủ

LớpMục đíchCông cụ chính
Ngăn xảy raKhông để lỗi ra tới productionQuality gate, test tải, review, performance budget
Giới hạn thiệt hạiNếu lọt thì chỉ chạm ít ngườiBật dần theo tỷ lệ, feature flag, giới hạn tần suất
Hồi phục nhanhĐã hỏng thì dừng chảy máuRollback, kill switch, chế độ bảo trì, quy trình trực

Không lớp nào thay được lớp nào. Đội chỉ đầu tư vào lớp một sẽ có sự cố dài; đội chỉ đầu tư vào lớp ba sẽ có sự cố liên tục.

Đo bằng gì

Chỉ sốMục tiêuNguồn
Thời gian hoạt động theo moduleXem bảng ngân sáchGiám sát hạ tầng
Tỷ lệ sự cố phát hiện bởi cảnh báo, không phải bởi người dùng≥ 80%Sổ sự cố
Thời gian tới lúc chặn được thiệt hại< 1 giờSổ sự cố
Thời gian phản hồi P95 của các API chínhTheo performance budgetGiám sát hạ tầng
Số cảnh báo giả mỗi tuần< 3Hệ thống cảnh báo
Kết quả test tải định kỳĐạt ở mức gấp đôi tải mục tiêuBáo cáo test tải

Dòng cảnh báo giả không phải chỉ số phụ. Đội bị đánh thức vì chuyện không đâu ba lần một tuần sẽ bắt đầu bỏ qua cảnh báo, và lần thứ tư là lần thật.

Tải mục tiêu

Hạng mụcMức phải chịu được
Người dùng đồng thời50.000
Kết nối thời gian thực đồng thời50.000
Tin nhắn mỗi giây2.000
Yêu cầu API mỗi giây5.000
Đơn hàng mỗi phút500

Test ở gấp đôi các con số này, và quan tâm tới việc hệ thống gãy thế nào chứ không chỉ gãy ở đâu. Chi tiết ở test tải và quy mô.

Việc cần làm để đạt

  1. Dựng dashboard kỹ thuật và dashboard nghiệp vụ, tách số liệu theo phiên bản.
  2. Đặt cảnh báo theo ngưỡng đọc ra được số người, mỗi cảnh báo có đúng một người nhận.
  3. Lập lịch trực xoay vòng, có người dự phòng, có bù nghỉ.
  4. Diễn tập sự cố một lần mỗi quý — bao gồm cả diễn tập rollback thật.
  5. Chạy test tải trước mỗi mốc tăng trưởng lớn, không chờ tới lúc tăng rồi mới đo.
  6. Rà lại các truy vấn và migration theo danh sách ở quy mô 500.000 người dùng.