VietTechiesHIỂU CÔNG NGHỆ. MỞ GÓC NHÌN.
☰ Chuyên mục

Xây dựng trình nhận Webhook vững chắc với Python và PostgreSQL

13/10/2026 · VietTechies · Biên tập

Một cơ cấu bánh răng bằng đồng được đánh bóng đặt bên cạnh một khối thủy tinh màu mờ phát sáng đại diện cho các gói dữ liệu trên bề mặt đá phiến tối.
Ảnh minh họa do AI tạo.

Các tích hợp webhook thường gặp sự cố dưới tải cao do các nhóm kỹ thuật hay dựa trên giả định sai lầm rằng việc phân phối sự kiện diễn ra chính xác một lần và theo đúng thứ tự thời gian. Theo các hướng dẫn kỹ thuật do Jayant Chaudhary, nhà sáng lập eProxim, công bố cùng tài liệu đi kèm từ công ty, các nhà cung cấp webhook thường chỉ đảm bảo phân phối ít nhất một lần mà không cam kết về thứ tự. Điều này có nghĩa là việc thử lại, xáo trộn mạng và dữ liệu trùng lặp là điều không thể tránh khỏi trong các sự cố hoặc khi điểm cuối phản hồi chậm.

Xác thực chữ ký và đảm bảo tính đồng thời

Việc xây dựng một trình nhận đáng tin cậy bắt đầu bằng việc xác thực chữ ký nghiêm ngặt hoạt động trực tiếp trên các byte dữ liệu thô thay vì đối tượng JSON đã phân tích cú pháp, giúp ngăn ngừa lỗi xác thực HMAC do thay đổi khoảng trắng hoặc thứ tự khóa. Như đã nêu trong tài liệu nguồn, các tiêu đề Webhook Tiêu chuẩn cung cấp mã định danh, dấu thời gian và chữ ký mã hóa base64, đòi hỏi phải thực hiện so sánh trong thời gian hằng định với dung sai dấu thời gian nghiêm ngặt để ngăn chặn các cuộc tấn công phát lại. Ở cấp độ cơ sở dữ liệu, việc chỉ dựa vào các kiểm tra ở tầng ứng dụng sẽ tạo ra tình trạng tranh chấp dữ liệu khi các yêu cầu đồng thời lọt qua; thay vào đó, hệ thống phải thực thi việc chống trùng lặp thông qua các ràng buộc duy nhất đối với ID sự kiện của nhà cung cấp trong ranh giới giao dịch, buộc các yêu cầu đồng thời phải chờ đợi hoặc hủy bỏ an toàn khi xảy ra xung đột.

Tách biệt việc tiếp nhận khỏi các tiến trình nền

Để ngăn chặn tình trạng quá thời gian chờ của nhà cung cấp trong điều kiện tải nặng, các kiến trúc nên tách biệt quá trình tiếp nhận khỏi việc xử lý nghiệp vụ. Điểm cuối HTTP có thể nhanh chóng xác thực chữ ký, đưa dữ liệu thô vào bảng hộp thư đến trong cơ sở dữ liệu và ngay lập tức trả về mã trạng thái xác nhận thành công, chẳng hạn như 204, để đáp ứng nhà cung cấp. Các tiến trình nền sau đó sẽ nhận các mục đang chờ xử lý bằng các kỹ thuật khóa cấp dòng như lệnh FOR UPDATE SKIP LOCKED của PostgreSQL. Mô hình này cho phép mở rộng quy mô theo chiều ngang trên nhiều thực thể worker mà không gặp rủi ro tranh chấp, đồng thời thực thi logic nghiệp vụ và cập nhật trạng thái hộp thư trong một giao dịch nguyên tử duy nhất.

Xử lý việc phân phối lệch thứ tự và thiếu ngữ cảnh

Việc chống trùng lặp đơn thuần không thể giải quyết các vấn đề về thứ tự, vì các bản cập nhật lỗi thời đôi khi có thể đến sau các trạng thái mới hơn. Cả hai nguồn đều nhấn mạnh rằng các nhà phát triển có thể phòng ngừa dữ liệu cũ bằng cách lưu trữ số phiên bản hoặc dấu thời gian sửa đổi cùng với các bản ghi thực thể, từ chối các bản cập nhật trong đó phiên bản nguồn đến cũ hơn trạng thái hiện tại của cơ sở dữ liệu. Ngoài ra, hệ thống có thể coi webhook như các thông báo thay đổi đơn giản và lấy trạng thái đối tượng mới nhất trực tiếp từ API của nhà cung cấp. Hơn nữa, khi các sự kiện đến cho các thực thể chưa tồn tại cục bộ—chẳng hạn như sự kiện hóa đơn cho một đăng ký chưa được ghi nhận—các trình xử lý nên kích hoạt các ngoại lệ cụ thể để gọi lại cơ chế thử lại có độ trễ tăng dần, lưu giữ các bản ghi chưa thể giải quyết vào một hàng đợi chuyên dụng thay vì tạo ra các hàng giữ chỗ chứa giá trị null gây ra vấn đề.

Lý do tính toàn vẹn bảo vệ logic cốt lõi của doanh nghiệp

Hậu quả vận hành của các sự cố webhook chưa được xử lý vượt xa các lỗi máy chủ nhỏ, thường dẫn đến việc tính phí khách hàng gấp đôi, giao sản phẩm trùng lặp hoặc hỏng bản ghi kinh doanh trong các đợt lưu lượng tăng đột biến. Mặc dù các nhà phát triển thường coi việc tích hợp webhook là việc làm sau cùng, dữ liệu triển khai thực tế chứng minh rằng sự bất ổn của mạng và việc nhà cung cấp thử lại sẽ sớm thử thách bất kỳ điểm cuối đơn giản nào. Việc triển khai các mẫu chống trùng lặp mạnh mẽ sẽ biến các tích hợp mong manh thành các đường ống kiên cường, nơi việc tự động thử lại, khởi động lại hệ thống và phát lại thủ công trở nên hoàn toàn an toàn. Ngoài các biện pháp bảo vệ cơ sở dữ liệu nội bộ, việc duy trì một mô hình hộp thư đi toàn diện và lên lịch đối chiếu API định kỳ giúp đảm bảo các thông điệp hạ lưu và các khoảng thời gian giao hàng bị bỏ lỡ được phát hiện và khắc phục chủ động. Cuối cùng, việc thiết kế các hệ thống dự kiến trước tình trạng trùng lặp và hỗn loạn sẽ giúp chuyển đổi các nhóm kỹ thuật từ việc ứng phó sự cố thụ động sang duy trì các kiến trúc hướng sự kiện có thể kiểm tra và dự đoán được.

Ảnh minh họa do AI tạo, không phải ảnh tư liệu.

Nguồn: Building an Idempotent Webhook Receiver with PostgreSQL and Python · Idempotent Webhooks: Duplicates, Retries and Ordering | eProxim