Phản xạ chữa cháy và cách làm của team Nhật
Khi hệ thống thanh toán hay ứng dụng ngân hàng gặp sự cố, phản xạ tự nhiên của lập trình viên là mở code ra tìm lỗi để sửa. Ở công ty IT Nhật, tự ý sửa thẳng trên production khi chưa báo ai và chưa có cách quay lại là điều rất bị kiêng. Thay vào đó, team đi theo bốn bước, và bước đầu tiên luôn là báo.
Từ vựng quan trọng
- 第一報だいいっぽう
- Báo cáo sơ bộ đầu tiên
- 暫定対応ざんていたいおう
- Xử lý tạm thời (để khôi phục dịch vụ nhanh nhất)
- 再発防止策さいはつぼうしさく
- Biện pháp phòng ngừa sự cố tái diễn
Bước 1 và 2: Báo sơ bộ và khôi phục dịch vụ trước tiên
Phát hiện sự cố là phải gửi 第一報 (báo sơ bộ) ngay, dù chưa ai biết nguyên nhân. Một 第一報 tốt gồm: hệ thống nào, hiện tượng gì, từ lúc nào, phạm vi ảnh hưởng (影響範囲: bao nhiêu người dùng, chức năng nào), điều đã biết và điều chưa biết, cùng giờ báo lần sau (ví dụ: "15:00 chúng tôi sẽ báo tiếp"). Gửi khách thì mở đầu bằng lời xin lỗi vì sự bất tiện, kể cả khi chưa rõ lỗi do bên nào.
Tiếp theo là 暫定対応 (xử lý tạm thời): đưa dịch vụ chạy lại sớm nhất có thể (復旧優先). Cách hay dùng: khởi động lại server, tăng tạm tài nguyên, tạm tắt một chức năng phụ, hoặc lùi về bản cũ (切り戻し). Nhưng "tạm thời" không có nghĩa là làm mù. Trước khi restart, hãy lưu log và trạng thái lại, vì restart xong là mất dấu vết để điều tra. Với hệ thống có dữ liệu như thanh toán, lùi bản khi đã có migration hay giao dịch đang chạy dở có thể làm hỏng dữ liệu; phải xem kỹ và có leader duyệt rồi mới làm.
Bước 3 và 4: Khắc phục triệt để và phòng ngừa tái diễn
Dịch vụ ổn định rồi mới đến 恒久対応 (xử lý triệt để): tìm nguyên nhân gốc (根本原因), tái hiện lỗi trên môi trường staging, sửa code, thêm test, rồi lên lịch đưa bản sửa lên production theo đúng quy trình release.
Cuối cùng là 再発防止 (phòng ngừa tái diễn). Sửa xong code chưa phải là xong việc. Team viết 障害報告書 (báo cáo sự cố) gửi khách, và dùng なぜなぜ分析 (hỏi "tại sao" nhiều lần, thường nói là năm lần) để tìm chỗ hở trong quy trình: vì sao lỗi lọt qua review, vì sao test không bắt được, vì sao phát hiện muộn. Mục tiêu là để lỗi cùng loại không lặp lại, không phải tìm người để trách.
Câu nói cửa miệng trong xử lý sự cố
障害が発生しましたので、まず第一報を関係者に共有します。
Sự cố đã xảy ra, trước hết tôi gửi báo cáo sơ bộ cho các bên liên quan.
ご迷惑をおかけして申し訳ございません。現在原因を調査しており、15時に改めてご報告いたします。
Chúng tôi thành thật xin lỗi vì sự bất tiện. Hiện chúng tôi đang điều tra nguyên nhân và sẽ báo lại lúc 15 giờ.
ログを保存したうえで、暫定対応としてサーバーを再起動します。
Sau khi lưu log, chúng tôi sẽ khởi động lại server như một biện pháp tạm thời.
同じ不具合を二度と起こさないよう、再発防止策をまとめました。
Để lỗi tương tự không xảy ra lần nữa, chúng tôi đã đưa ra các biện pháp phòng ngừa tái diễn.
Bài học cho kỹ sư
Phần mềm thì không tránh khỏi bug, nên đừng sợ sự cố. Điều khiến người Nhật tin bạn là báo sớm, nói rõ điều đã biết và chưa biết, không tự ý làm trên production, và theo việc đến tận bước phòng ngừa tái diễn.