Bộ kiểm tra linkback đã chặn bản phát hành của chúng tôi: một bài phân tích nguyên nhân giả định
Đội ngũ và sự cố được hư cấu, cơ chế hoạt động là thực. Chúng tôi kể lại theo thứ tự một kỹ sư trực ban sẽ ghi chép.
Nhóm nghiên cứu Contentin ·
Đây là một ví dụ
Đội ngũ, sản phẩm và các mốc thời gian dưới đây được hư cấu để minh họa cách một sự cố diễn ra. Không có công ty, khách hàng hoặc số liệu đo lường thực nào được đề cập.
Diễn biến sự cố
1
09:10, trang ra mắt được đưa vào CMS
Một nhóm sản phẩm gồm sáu người vận hành trang marketing trên một CMS headless và quy trình build tĩnh. Một biên tập viên chuẩn bị một thông báo hợp tác có liên kết đến tên miền đối tác được đăng ký vào tuần trước.
2
09:14, biên tập viên nhấn nút xuất bản
Webhook publish gọi một hàm. Hàm này thực hiện lệnh gọi kiểm tra linkback đến tên miền đối tác và được cấu hình để chặn bản phát hành khi nhận bất kỳ phản hồi nào không thành công.
3
09:14, quy trình build không bao giờ bắt đầu
Hai sự cố xảy ra đồng thời. Tên miền mới nên chỉ mục của chúng tôi có thể chưa biết đến. Ngoài ra, số dư trả trước trên khóa của nhóm đã cạn, nên lệnh gọi theo dõi trả về HTTP 402.
4
09:40, nhóm phát hiện ra vấn đề
Biên tập viên báo cáo một lỗi mơ hồ. Một kỹ sư đọc nhật ký hàm, thấy mã 402 và kết quả trống, và dành hai mươi phút để xác định nguyên nhân thực sự của việc chặn.
5
10:05, bản phát hành được thực hiện thủ công
Ai đó đã bỏ qua webhook bằng cách triển khai thủ công. Bản phát hành chậm 55 phút và việc bỏ qua này không để lại dấu vết về các kiểm tra nào đã bị bỏ qua.
Những gì nhóm đã kiểm tra trước khi ra mắt
Rất ít, như thực tế đã chứng minh. Danh sách kiểm tra chỉ bao gồm các tên miền nổi tiếng, đó là lý do tại sao lỗ hổng vẫn bị ẩn cho đến khi một liên kết đối tác xuất hiện. Một bài kiểm tra trên một trang web nổi tiếng chỉ chứng minh rằng hệ thống hoạt động, nhưng không nói lên điều gì về một tên miền mà chỉ mục chưa từng thấy.
Danh sách kiểm tra tốt hơn nên bao gồm ba loại tên miền: một tên miền đã có uy tín, một tên miền ngách nhỏ và một tên miền được đăng ký gần đây. Hãy chạy tất cả ba loại này qua webhook trước khi ai đó tin tưởng nó.
Các bài kiểm tra đã bao phủ những tên miền nào?
Chỉ những tên miền dễ dàng. Mọi tên miền trong danh sách đều có lịch sử lâu năm, nên mọi phản hồi đều đầy đủ và không ai thấy phản hồi trống ảnh hưởng thế nào đến việc xuất bản.
Thêm một tên miền thực sự mới và đọc kết quả của nó bằng tay. Nếu ghi chú ghi là "bad" (không tốt) thay vì "unknown" (không xác định), quy tắc cần được viết lại trước khi ra mắt.
Quy trình kiểm thử trên môi trường staging đã bỏ sót điều gì?
Quy trình trên staging sử dụng một khóa có số dư khỏe mạnh, nên đường dẫn cạn kiệt số dư chưa bao giờ được thực thi. Không ai viết một bài kiểm tra tiêu hao hết tín dụng một cách chủ đích.
Hãy giữ đường dẫn đó dưới sự kiểm thử. Buộc xảy ra lỗi 402 một lần mỗi quý và đọc những gì biên tập viên thấy sau đó, vì một đường dẫn thất bại mà không ai chạy là một đường dẫn mà không ai có thể tin tưởng.
Nguyên nhân xảy ra
Cổng kiểm tra coi mọi phản hồi không thành công là một phán quyết cuối cùng. Đó là nguyên nhân gốc rễ. Vấn đề về số dư và một tên miền chưa xác định là những thực tế về công cụ và chỉ mục, và không có cái nào nói lên điều gì về trang web.
Đồ thị của chúng tôi được xây dựng lại khoảng một lần mỗi tháng. Một tên miền được đăng ký sau lần cập nhật gần nhất có thể hiển thị trống, và một đối tác mới là trường hợp bình thường cho một trang ra mắt. Không ai đã kiểm tra. Nhóm chỉ kiểm thử webhook với các tên miền cũ, nổi tiếng như nytimes.com.
Lỗi thứ hai là sự im lặng. Hàm đã ghi lỗi nhưng không gửi cảnh báo, và biên tập viên thấy một thông báo lỗi chung chung không gợi ý rằng tín dụng đã hết.
Chi phí không bao giờ là vấn đề. Với giá 2 tín dụng cho mỗi lệnh gọi, tổng chi phí kiểm tra cho tháng của trang web giả định này chỉ khoảng $0.60, cùng mức với hàng 3.000 bản phát hành trong bảng chi phí. Cổng kiểm tra rẻ tiền nhưng vẫn khiến nhóm mất một giờ vào năm 2026.
Mã 402 xứng đáng có một dòng riêng. Số dư trả trước là một trạng thái có thể theo dõi, vì vậy một cảnh báo đơn giản ở mức 10.000 tín dụng, tương đương $1, sẽ kích hoạt sớm hơn nhiều ngày.
Các mục hành động nhóm đã ghi nhận
Chủ sở hữu là vai trò, không phải con người. Tất cả các mục đều là một phần của ví dụ.
Thay đổi
Chủ sở hữu
Lý do
Xử lý 402 là bỏ qua cộng với cảnh báo đến kênh nền tảng
Nền tảng
Tín dụng là trạng thái thanh toán, không phải trạng thái trang
Xử lý kết quả trống cho một tên miền mới là không xác định, không phải không tốt
Nền tảng
Chỉ mục bị trễ khoảng một tháng
Hiển thị lý do cho biên tập viên bằng lời rõ ràng
Công cụ biên tập
Mất 20 phút đọc nhật ký
Ghi lại các kiểm tra đã bỏ qua trên mục bài viết
Nền tảng
Triển khai thủ công không để lại dấu vết
Kiểm thử webhook với một tên miền được đăng ký trong tuần này
QA
Các tên miền cũ che giấu lỗ hổng
Một buổi diễn tập cho tuần ra mắt
Chạy những điều này trước lần ra mắt tiếp theo, không phải sau lần thất bại tiếp theo.
1
Chọn một tên miền chưa từng được kiểm tra
Chọn một tên miền được đăng ký gần đây và gọi hành động xem tổng quan miễn phí trên tên miền đó. Xác nhận rằng một phản hồi mỏng được ghi nhận là không xác định thay vì là một lệnh chặn.
2
Làm cạn số dư kiểm thử
Sử dụng một khóa kiểm thử có số dư nhỏ và để nó chạy đến mức 0 một cách chủ đích. Theo dõi mã 402 xuất hiện, cảnh báo kích hoạt và quy trình xuất bản tiếp tục sang build.
3
Đọc to thông báo của biên tập viên
Yêu cầu một đồng nghiệp chưa từng thấy webhook đọc văn bản lỗi. Nếu họ không thể nói phải làm gì tiếp theo, hãy viết lại thông báo trước khi ra mắt.
4
Ghi lại việc bỏ qua vào mục bài viết
Xác nhận rằng một kiểm tra bị bỏ qua để lại một ghi chú có ngày tháng trên mục bài viết, kèm theo lý do. Một lệnh triển khai thủ công khi đó sẽ không bao giờ để lại một khoảng trống mà không ai giải thích được.
Cách khắc phục được viết như thế nào
Nhóm đã tách một lỗi chung thành ba lỗi riêng biệt, vì mỗi phản hồi có một chủ sở hữu khác nhau. Lỗi 401 là vấn đề về khóa, lỗi 402 là trạng thái thanh toán, và kết quả trống cho một tên miền mới đơn giản là không xác định. Mỗi lỗi có một nhánh xử lý và thông báo riêng. Đó là toàn bộ thay đổi.
Không ai cần đọc dấu vết ngăn xếp để biết lỗi nào đã xảy ra. Tên cảnh báo nêu rõ trạng thái, và biên tập viên thấy một câu nói về những gì cần làm tiếp theo.
Tại sao cảnh báo số dư được đặt ở mức cao hơn nhiều so với 0?
Mười nghìn tín dụng tương đương $1 ở mức giá công bố, một số tiền nhỏ nhưng vẫn cung cấp đủ cảnh báo khi nó đến sớm. Hãy đặt cảnh báo ở mức mà con người sẽ thấy, không phải trong nhật ký mà không ai mở vào thứ Sáu.
Một kiểm tra thất bại rõ ràng một lần mỗi ngày tốt hơn một kiểm tra im lặng thất bại trong lúc ra mắt.
Thống nhất con số với nhóm và ghi nó vào cùng vị trí với quy tắc xoay khóa, để cả hai được xem xét cùng nhau.
Một tên miền mới có nên được tính là một lỗi không?
Không. Một tên miền mà chỉ mục chưa từng thấy là một thực tế về chỉ mục, không phải về trang web. Hãy lưu trữ nó là không xác định kèm theo ngày, và để một biên tập viên quyết định có nên chờ lần cập nhật tiếp theo hay không.
Quy tắc tương tự áp dụng cho bất kỳ phản hồi mỏng nào. Hãy coi đó là dữ liệu bị thiếu và không bao giờ là một phán quyết về đối tác.
Ghi lại các phản hồi không xác định trong một danh sách riêng, để một mẫu hình của chúng có thể được nhìn thấy trong lần xem xét tiếp theo thay vì bị chôn vùi trong nhật ký chung.
Bài học rút ra
Mở rộng khi dữ liệu liên kết thất bại, cảnh báo mạnh khi sự cố xảy ra
Một kiểm tra liên kết không bao giờ nên là thứ duy nhất đứng giữa biên tập viên và việc ra mắt. Hãy cho trang web đi qua, gắn thẻ mục bài viết và làm cho lỗi không thể bị bỏ qua đối với người sở hữu khóa.
Phân biệt 401, 402 và kết quả trống trong mã nguồn
Giữ cảnh báo số dư ở mức cao hơn nhiều so với 0 (xem bảng chi phí)
Diễn tập tình huống lỗi trên môi trường staging trước ngày ra mắt
Các câu hỏi nhóm đã đặt ra sau đó
Cuộc họp xem xét đã nêu ra cùng một nhóm câu hỏi trong mọi phiên bản của câu chuyện này. Dưới đây là cách nhóm giả định đã trả lời chúng và lý do tại sao những câu trả lời đó sẽ khác nhau giữa các tổ chức.
Không có câu trả lời nào trong số này là phổ quát, và mỗi câu trả lời phụ thuộc vào mục đích của trang web. Điểm mấu chốt là có một câu trả lời trên giấy trước lần phát hành tiếp theo.
Cổng kiểm tra có nên chặn lại không?
Đối với nhóm giả định này, không. Một kiểm tra liên kết là một tín hiệu dựa trên chỉ mục hàng tháng và nó không nên là thứ duy nhất đứng giữa biên tập viên và việc ra mắt.
Viết chính sách thành một câu, để kỹ sư tiếp theo có thể phân biệt giữa việc chặn có chủ đích và lỗi.
Số dư lớn hơn có thể ngăn chặn sự cố không?
Nó chỉ làm chậm vấn đề chứ không sửa thiết kế. Số dư lớn hơn vẫn có thể cạn kiệt, và một cổng kiểm tra coi mọi phản hồi không thành công là phán quyết cuối cùng vẫn sẽ chặn khi gặp tên miền chưa xác định đầu tiên.
Giải pháp là tách thành ba phản hồi riêng biệt, cộng với một cảnh báo kích hoạt sớm. Số dư chỉ là một phần của câu chuyện.
Hãy đặt cùng câu hỏi cho bất kỳ cổng kiểm tra nào bạn xây dựng: lỗi nào sẽ im lặng, và ai sẽ là người đầu tiên phát hiện ra nó?
Lưu ý về kịch bản giả định
Các nhóm thực tế sẽ khác nhau. Nhóm của bạn có thể chọn chặn lại vì những lý do chính đáng, chẳng hạn như một trang web được quản chế nơi mọi liên kết đầu ra đều được một người xem xét. Tốt. Chỉ cần biến nó thành một lựa chọn.