Môi trường thử nghiệm được kết nối với dịch vụ production một lần để kiểm tra rồi bị quên ngắt. Một tháng sau, lần chạy tự động tạo hàng chục tài khoản thật trên dịch vụ production, còn cổng thanh toán trừ tiền thật cho một đơn hàng thử. Sự cố không nằm ở bản thân lần chạy mà ở chỗ môi trường thử nghiệm và production không được tách biệt ở cấp cấu hình. Chúng ta sẽ xem sự cố này xảy ra thế nào và cần kiểm tra gì để lần chạy tự động không trở thành sự cố thật.

Sự cố điển hình: lần chạy thử tạo ra tài khoản thật

Kịch bản gần như luôn giống nhau: cấu hình của môi trường thử nghiệm được sao chép từ production, đổi một phần giá trị nhưng quên địa chỉ API hoặc khóa truy cập. Các lần chạy diễn ra suốt nhiều tháng mà không có vấn đề, cho đến khi một lần chạm vào endpoint đăng ký hoặc thanh toán. Khi đó trong cơ sở dữ liệu production xuất hiện các tài khoản thật với tên thử nghiệm như test_user_1, còn trên cổng thanh toán là những khoản trừ tiền thật cho đơn hàng thử.

Tệ hơn nếu sự cố không được phát hiện ngay: những tài khoản này tồn tại trên production hàng tuần, lọt vào số liệu phân tích, làm sai lệch chỉ số chuyển đổi và bị lẫn với người dùng thật khi xử lý sự cố.

Tách cấu hình môi trường thử nghiệm và production theo khóa và địa chỉ

Cách đáng tin cậy để không phụ thuộc vào trí nhớ là tách hẳn cấu hình: môi trường thử nghiệm có bộ khóa truy cập riêng, địa chỉ API riêng và tên miền callback riêng. Một tệp cấu hình chung có công tắc "test/production" là nguồn gốc của phần lớn sự cố, vì công tắc có thể bị quên hoặc nhầm khi triển khai.

Nên đối chiếu định dạng khóa với tài liệu, ví dụ với tài liệu API thuê số điện thoại: khóa test và khóa production thường gần như giống hệt nhau về hình thức, sự khác biệt chỉ nhận ra qua tiền tố hoặc qua mục trong trang tài khoản nơi khóa được tạo.

Nhóm số và hộp thư email riêng cho các lần chạy

Lần chạy như vậy cần số điện thoại và hộp thư thật, nếu không thì không kiểm tra được việc nhận SMS hay email xác minh. Sai lầm là lấy chúng từ nhóm production dùng chung: số bị lần chạy chiếm sẽ không còn để bán, và sau lần chạy có thể vẫn gắn với một tài khoản thật mà không ai định tạo.

Mô hình đúng là một nhóm riêng có trạng thái "test" được gán ngay từ khâu cấp phát, cùng một sổ đăng ký riêng cho nhóm này: các trường giống như với tài nguyên production, gồm môi trường, ngày và trạng thái. Cách tổ chức sổ đăng ký như vậy nói chung được phân tích trong bài kiểm kê số điện thoại, hộp thư và IP.

Dấu hiệu cho thấy môi trường thử nghiệm đang trỏ sai chỗ

Một số tín hiệu nên kiểm tra trước mỗi lần phát hành cấu hình: trong log của môi trường thử nghiệm xuất hiện tên miền production hoặc địa chỉ production lấy từ nhóm xoay IP qua API; bộ đếm trong phân tích production tăng đồng thời với lần chạy tự động; hộp thư hỗ trợ production nhận các thư tự động có tên thử nghiệm; số dư ví production giảm mà không có thao tác thủ công vào đúng lúc chỉ nên có một lần chạy thử.

Bất kỳ dấu hiệu nào trong số này cũng là lý do để dừng lần chạy ngay lập tức, chứ không phải thêm điều kiện "bỏ qua trên production".

Quy tắc "khóa test không được tồn tại trên production" và checklist trước lần chạy đầu tiên

Quy tắc đáng tin cậy nhất đơn giản hơn mọi hệ thống giám sát: khóa của môi trường thử nghiệm không được tồn tại trong môi trường production, và khóa production không được tồn tại trong môi trường test. Không phải "mặc định bị tắt" mà là hoàn toàn vắng mặt, khi đó lời gọi sai sẽ thất bại ở bước xác thực thay vì đi vào dịch vụ production.

Trước lần chạy tự động đầu tiên nên kiểm tra bốn điều: địa chỉ API và khóa truy cập trong cấu hình môi trường thử nghiệm không được sao chép từ production; nhóm số và hộp thư cho lần chạy là nhóm riêng và được đánh dấu là test; môi trường thử nghiệm có giới hạn số thao tác để lỗi không nhân lên hàng trăm yêu cầu trước khi bị phát hiện; và log của lần chạy xem được ngay, không phải chờ yêu cầu thủ công.

Câu hỏi thường gặp

Làm thế nào để nhanh chóng kiểm tra môi trường thử nghiệm không trỏ vào production?

Thực hiện một lời gọi test dễ nhận biết, ví dụ tạo một tài nguyên có tên duy nhất, rồi kiểm tra xem nó có xuất hiện trong trang tài khoản production không. Nếu có thì cấu hình đã bị nhầm.

Có thể dùng số production cho một lần chạy ngắn không?

Không: ngay cả lần chạy ngắn cũng chiếm một tài nguyên từ nhóm production, và nếu bước dọn dẹp thất bại thì tài nguyên không được trả về bán đúng lúc.

Phải làm gì nếu lần chạy test đã tạo ra tài khoản thật?

Xuất danh sách theo dấu hiệu nhận biết, như tiền tố tên hoặc ngày tạo nằm ngoài lưu lượng thông thường, xóa hoặc vô hiệu hóa thủ công, sau đó xử lý nguyên nhân gốc: khóa dùng chung hoặc địa chỉ API dùng chung.

Nếu cần một nhóm số điện thoại và hộp thư thật riêng cho test mà không gây rủi ro cho dữ liệu production, trong mục thuê số và hộp thư email các tài nguyên được cấp theo từng đơn vị và mặc định không trùng với môi trường của người khác.