Hai mươi giờ năm phút, tối mười một tháng mười một
Đỉnh tải năm của một cổng thanh toán Việt Nam. Hàng triệu lệnh giao dịch chạy qua hệ thống mỗi phút. Trên dashboard giám sát, biểu đồ TPS chạy gần đường giới hạn thiết kế. Hệ thống đang hoạt động đúng theo dự kiến cho ngày 11/11.
Ở phút thứ ba của giờ đỉnh, biểu đồ tỷ lệ timeout nhảy lên một mức bất thường. 0.3% lệnh bị timeout trong cửa sổ ba mươi giây. Trong bối cảnh lưu lượng cao điểm, con số đó tương đương hàng chục nghìn giao dịch. Mỗi giao dịch là một câu chuyện riêng: một khách hàng đã bấm "Thanh toán" trên ứng dụng thương mại điện tử, đã thấy màn hình quay, đã thấy thông báo "Giao dịch không thành công", đã nhìn vào số dư tài khoản và thấy đã bị trừ tiền.
Trong vòng năm phút, customer service nhận hàng nghìn ticket cùng nội dung: "Tôi bị trừ tiền nhưng đơn hàng chưa cập nhật". Đội operations chạy lệnh reconciliation thủ công, tra cứu từng giao dịch. Trong vòng hai giờ, mọi giao dịch được khôi phục về trạng thái đúng. Không ai mất tiền vĩnh viễn. Nhưng niềm tin khách hàng đã bị mài mòn một chút. Một số khách hàng sẽ chuyển sang cổng thanh toán đối thủ trong những lần mua sắm tiếp theo.
Sau ba ngày điều tra, nguyên nhân được ghi nhận trong báo cáo: một xung điện vài chục microsecond từ tủ điều hoà của khối office tầng kế bên, đẩy qua đường nguồn chung của khu kỹ thuật, gây "ho" trên một bộ load balancer ngay tại đỉnh tải. Bộ load balancer không hỏng, không reboot, không alarm. Nó chỉ "ngạt" trong nửa giây và bỏ qua một số lệnh đang trong hàng đợi.
Trên báo cáo hàng tuần gửi Ban Tổng giám đốc, có một dòng "Sự cố tỷ lệ timeout bất thường, 0.3% trong cửa sổ 30 giây tại đỉnh tải 11/11" với câu hỏi tiếp theo: "Sẽ phòng ngừa lại bằng cách nào?".
