Vì tôi chưa kịp viết tài liệu.
Vì anh Triệu nói “quý sau”.
Tôi nhìn điện thoại, hít sâu một hơi.
Rồi gõ một đoạn.
“Cấu hình pool kết nối ở /opt/scripts/custom_init.sh. Trước khi khởi động lại thì chạy script này trước, rồi mới khởi động cơ sở dữ liệu, sau đó khởi động dịch vụ ứng dụng. Trình tự không được ngược.”
Gửi đi rồi.
Trần Quân trả lời ngay lập tức: “Cảm ơn Chị Chỉ!!!”
Hai mươi phút sau.
Trần Quân: “Chị Chỉ, trong thư mục /opt/scripts/ không có file custom_init.sh.”
Tôi sững ra một chút.
Rồi chợt nhớ ra.
Cái script đó, gọi tới một công cụ cá nhân khác của tôi.
Tôi đã gỡ công cụ ra, nên vì thiếu phụ thuộc, script đã bị hệ thống tự động dọn dẹp xóa nhầm như một tệp bất thường trong một lần dọn file định kỳ nào đó của hệ thống.
Tôi nhắm mắt lại.
“Không còn nữa. Script đó phụ thuộc vào công cụ cá nhân của tôi, sau khi gỡ công cụ ra thì script có lẽ đã bị tự động dọn mất rồi.”
Năm phút sau, Trần Quân mới trả lời.
“Vậy phải làm sao?”
“Cậu cần tự cấu hình tham số pool kết nối. Số kết nối tối đa 200, số kết nối nhàn rỗi tối thiểu 20, thời gian chờ 30 giây, câu lệnh kiểm tra SELECT 1. Cấu hình trong application.properties của cơ sở dữ liệu.”
“Được.”
Lại nửa tiếng trôi qua.
Trần Quân: “Đã cấu hình rồi, nhưng lúc khởi động lại báo lỗi khác. Nó nói cấu hình của message queue có vấn đề.”
“Cấu hình hàng đợi tin nhắn cũng ở trong script đó.”
“……”
“Cổng 5672, virtual host /production, số lượng prefetch là 100.”
“Còn gì nữa không?”
“Còn cấu hình sentinel của Redis. Cậu biết IP của ba nút sentinel không?”
“Không biết.”
“10.0.1.101, 10.0.1.102, 10.0.1.103. Cổng sentinel là 26379.”
“Chị Chỉ, sao chị nhớ hết vậy?”
Tôi không trả lời câu hỏi này.
Bởi vì đáp án là — ba năm qua, những con số này như được khắc vào đầu tôi vậy.
Ngày nào cũng dùng.
Ngày nào.
Nhưng chưa từng có ai hỏi.
Chín giờ sáng, cuối cùng Trần Quân cũng miễn cưỡng khởi động được hệ thống.
Nhưng cậu ta nói: “Chạy được rồi, nhưng rất không ổn định, cách một lúc lại báo lỗi.”
Bởi vì mười hai công cụ cá nhân của tôi, có bảy cái liên quan trực tiếp đến việc vận hành hằng ngày của hệ thống.
Thiếu chúng, hệ thống giống như một chiếc xe bị tháo mất bảy con ốc.
Vẫn chạy được, nhưng lúc nào cũng có thể tan rã.
Mười giờ sáng, anh Triệu tự mình gọi điện cho tôi.
Lần này tôi nghe máy.
“Lâm Chỉ.”
“anh Triệu.”
“Chuyện hệ thống em đều biết rồi chứ?”
“Trần Quân đã nói với em rồi.”
“Em có thể… quay lại xem một chút được không?”
Tôi im lặng hai giây.
“anh Triệu, em đã nghỉ việc rồi.”
“Anh biết. Nhưng bây giờ hệ thống không ổn định, bên khách hàng đã bắt đầu khiếu nại rồi. CTO vừa mới nổi giận với anh.”
“Những vấn đề này, lúc em còn làm ở đó, tháng nào em cũng nhắc. Rủi ro hệ thống phụ thuộc vào script cá nhân, trong cuộc họp tuần em đã nói không dưới mười lần.”
anh Triệu im lặng.
“Mỗi lần, anh đều nói sang quý sau.”
“……”
“anh Triệu, em không quay lại. Không phải vì giận dỗi.”
Giọng tôi rất bình tĩnh.
“Mà là vì em ở đó ba năm, 87 người, ai cũng cho rằng em là người vô dụng nhất. Đây không phải hiểu lầm, mà là kết quả của ba năm.”
“Lâm Chỉ——”
“Em không cần các anh nhìn thấy em. Em chỉ cần các anh, sau khi em đi rồi, nhìn thấy màn hình đen.”
Tôi cúp máy.
8.
Buổi chiều, mọi chuyện còn nghiêm trọng hơn buổi sáng.
Trần Quân gửi một tin trong nhóm: “Hệ thống lại sập rồi.”
Lần này không phải vấn đề ổ đĩa.
Mà là logic xử lý bất đồng bộ của mô-đun giao dịch cốt lõi bị lỗi.
Cái module này là do tôi viết ba năm trước, sau đó từng được đại tu hai lần. Khi đại tu, tôi có đưa vào một middleware tin nhắn tùy chỉnh — cũng là một trong những công cụ cá nhân của tôi.