Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Webhook vs polling

Technical Basics

Vì sao có những cập nhật không bao giờ tức thời — và cách spec đúng độ trễ thay vì hứa "ngay lập tức".

Bạn đang ở đâu với kỹ năng này?

Làm bài Đánh giá Nền tảng Kỹ thuật cho PM/BA — 22 người đã làm. Một lần làm chấm điểm cho tất cả kỹ năng trong nhóm Technical Basics, không chỉ kỹ năng này.

Làm bài đánh giá Trung bình cộng đồng ở kỹ năng này: 51/100

Kỹ năng này cho bạn điều gì

Bắt đầu từ đây

Cập nhật từ bên ngoài đến bằng webhook (họ đẩy khi có việc) hoặc polling (ta hỏi định kỳ) — nên có những thứ không tức thời theo bản chất.

Khi đã làm được

Dùng cơ chế để phán đoán độ trễ là bình thường hay bug thật; spec trạng thái pending cho luồng tiền và thời gian cập nhật thực tế thay vì "ngay lập tức".

Roadmap — Cách học và đạt kỹ năng

Đã đọc 0/12 mục · còn khoảng 6 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Webhook vs polling là gì?

Khi sản phẩm của bạn cần biết một việc vừa xảy ra ở hệ thống khác — ngân hàng báo tiền đã về, đơn vị vận chuyển báo đã giao hàng — chỉ có hai cách để tin đó đi tới bạn.

Webhook: bên kia chủ động gọi sang hệ thống của bạn ngay khi có việc. Giống như họ nhắn tin cho bạn.

Polling: hệ thống của bạn hỏi lại bên kia theo chu kỳ — 30 giây, 5 phút, mỗi giờ một lần. Giống như bạn mở app ra kiểm tra liên tục.

Hệ quả quan trọng nhất với BA/PO: nếu luồng đang chạy bằng polling chu kỳ 5 phút, thì "cập nhật ngay lập tức" là điều không tồn tại — không phải vì dev làm ẩu, mà vì cơ chế nó vậy.

Hai dòng thời gian song song: webhook đẩy sự kiện ngay khi xảy ra, polling hỏi lại theo chu kỳ và phát hiện muộn hơn
Cùng một sự kiện: webhook báo ngay, polling chỉ biết ở lần hỏi kế tiếp — khoảng trắng giữa hai lần hỏi chính là độ trễ bạn phải spec.

Bạn cần hiểu điều gì

  • Cập nhật từ bên ngoài đến bằng webhook (họ đẩy) hoặc polling (ta hỏi định kỳ).
  • Có những cập nhật không tức thời theo bản chất — đó là thiết kế, không phải lỗi.
  • Webhook có thể tới trễ, tới trùng, hoặc không tới; polling luôn có độ trễ tối đa bằng chu kỳ hỏi.

Bạn làm được gì với nó

  • Nhìn một luồng và nói được nó chạy bằng cơ chế nào, từ đó phán đoán độ trễ hiện tại là bình thường hay bug thật.
  • Spec trạng thái pending cho mọi luồng liên quan tới tiền: người dùng thấy gì trong lúc chờ, chờ tối đa bao lâu, quá hạn thì sao.
  • Viết thời gian cập nhật thực tế vào acceptance criteria thay vì chữ "ngay lập tức".

Cơ chế hoạt động

Khái niệmNghĩa là gìDấu hiệu bạn đã hiểu
WebhookBên kia gọi API của ta khi có sự kiện.Bạn hỏi được: "nếu webhook fail thì họ có gửi lại không?"
PollingTa gọi API bên kia theo chu kỳ cố định.Bạn biết chu kỳ là bao nhiêu trước khi hứa với stakeholder.
RetryGửi lại khi lần đầu thất bại.Bạn lường trước việc cùng một sự kiện tới hai lần.
IdempotencyXử lý cùng một sự kiện nhiều lần vẫn ra một kết quả.Bạn viết vào spec: "cộng tiền đúng một lần dù nhận 3 lần callback".
Pending stateTrạng thái trung gian trong lúc chờ xác nhận.Màn hình của bạn có đủ 3 trạng thái, không chỉ thành công.

Ví dụ theo cấp độ

Cơ bản — "Thanh toán xong rồi mà app 30 giây sau mới hiện"

Tình huống: QA báo bug: chuyển khoản thành công trên app ngân hàng, nhưng đơn hàng 30 giây sau mới đổi sang "Đã thanh toán".

Cách đọc: hỏi dev một câu — "mình nhận kết quả thanh toán bằng webhook hay polling?". Nếu là polling chu kỳ 30 giây, đây không phải bug; 30 giây chính là chu kỳ hỏi.

Học được: độ trễ là thuộc tính của cơ chế. Biết cơ chế là biết độ trễ tối đa mà không cần đọc code.

Trung bình — Viết spec cho chính luồng đó

Tình huống: bạn viết ticket cho màn hình thanh toán.

Việc cần viết ra:

  • Sau khi bấm thanh toán, đơn hàng ở trạng thái Đang xác nhận, không phải Thành công.
  • Người dùng thấy: "Đang xác nhận thanh toán, thường mất dưới 1 phút."
  • Sau 5 phút chưa có kết quả: hiện hướng dẫn liên hệ hỗ trợ, không tự huỷ đơn.
  • Acceptance criteria ghi "cập nhật trong vòng 60 giây", không ghi "ngay lập tức".

Học được: cơ chế quyết định số trạng thái màn hình phải có. Bỏ pending state là bỏ luôn 4/5 tình huống thật.

Nâng cao — Webhook của nhà cung cấp không đáng tin

Tình huống: đơn vị vận chuyển có webhook, nhưng thực tế khoảng 2% sự kiện không bao giờ tới, và khi hệ thống họ nghẽn thì cùng một sự kiện gửi lặp 3–4 lần.

Thiết kế đúng: nhận webhook để có tốc độ, đồng thời polling thưa (ví dụ 15 phút/lần) để quét những đơn bị sót — đây gọi là reconciliation.

Phải viết vào spec:

  • Mỗi sự kiện có mã định danh riêng; xử lý lần thứ hai trở đi không được đổi trạng thái đơn (idempotency).
  • Sự kiện tới sai thứ tự (báo "đã giao" trước "đang giao") thì không được lùi trạng thái.
  • Chênh lệch giữa webhook và lần quét đối soát được ghi log để đội vận hành xem.

Học được: "cứ dùng webhook đi" không phải một câu trả lời. Câu trả lời là webhook cộng đối soát, cộng quy tắc chống trùng.

Áp dụng khi viết spec

Với mỗi luồng có dữ liệu đến từ bên ngoài, ticket của bạn phải trả lời được bốn câu:

  1. Cập nhật này đến bằng webhook hay polling? Chu kỳ bao lâu?
  2. Người dùng thấy gì trong lúc chờ? (đây là trạng thái pending)
  3. Chờ tối đa bao lâu thì coi là thất bại, và khi đó hiện gì?
  4. Nếu cùng một cập nhật tới hai lần thì hệ thống làm gì?

Câu hỏi nên hỏi dev

  • "Luồng này nhận kết quả bằng webhook hay mình chủ động hỏi lại?"
  • "Nếu là polling thì chu kỳ bao nhiêu — đó là độ trễ tối đa người dùng thấy đúng không?"
  • "Nhà cung cấp có gửi lại khi webhook fail không? Gửi lại mấy lần?"
  • "Mình đã chống trùng chưa, hay nhận hai lần là cộng tiền hai lần?"
  • "Có cơ chế đối soát để bắt những sự kiện bị mất không?"

Sai lầm thường gặp

  • Viết "cập nhật real-time" trong PRD cho một luồng chạy polling 5 phút — cả team pass ticket, người dùng thấy sai.
  • Bỏ qua trạng thái pending, chỉ thiết kế màn hình thành công và thất bại.
  • Báo bug "app không cập nhật" mà chưa hỏi cơ chế — mất thời gian của cả hai bên.
  • Cho rằng webhook là bảo đảm. Webhook là nỗ lực tốt nhất, không phải cam kết.
  • Quên rằng nhà cung cấp có thể gửi sự kiện sai thứ tự.

Definition of done — dấu hiệu bạn đã đạt

  • Với bất kỳ luồng nào trong khu vực của mình, bạn nói được nó chạy webhook hay polling mà không cần hỏi lại.
  • Mọi ticket bạn viết cho luồng bên ngoài đều có trạng thái pending và một mốc thời gian cụ thể.
  • Bạn phân biệt được "chậm theo thiết kế" và "bug" trước khi tạo ticket.

Đi sâu hơn

  • API (request/response) — đọc tài liệu API và spec integration.
  • Cron job — khi độ trễ đến từ lịch chạy thay vì từ cơ chế truyền tin.

Vì sao vai trò của bạn cần cái này

Vai tròBạn dùng nó để
Business AnalystViết được yêu cầu tích hợp đúng: độ trễ chấp nhận được là bao nhiêu, mất tin nhắn thì sao
Product OwnerHiểu vì sao "cập nhật tức thì" đắt hơn nhiều so với "cập nhật mỗi 5 phút"
EngineerChọn đúng cơ chế và xử lý được ca gửi trùng, gửi thiếu, gửi sai thứ tự
QABiết phải kiểm ca nào: webhook gửi hai lần, webhook tới muộn, bên kia sập
Delivery ManagerƯớc lượng đúng công sức tích hợp — phần xử lý lỗi thường lớn hơn phần đường thuận

Definition of done

  • Đã chốt độ trễ chấp nhận được bằng con số, không bằng chữ "tức thì".
  • Đã quyết chuyện gì xảy ra khi tin nhắn bị mất hoặc tới hai lần.
  • Có cơ chế thử lại và có giới hạn số lần thử.
  • Có cách đối soát định kỳ để phát hiện dữ liệu lệch nhau giữa hai hệ thống.
  • Ca lỗi đã được ước lượng công sức, không chỉ ước lượng đường thuận.

Tự kiểm 3 câu

Đọc xong rồi thì thử xem — đúng cả ba là đạt.
1. QA báo bug: chuyển khoản thành công nhưng đơn hàng 30 giây sau mới đổi sang “Đã thanh toán”. Câu đầu tiên nên hỏi dev là gì?
2. Acceptance criteria nào phù hợp cho màn hình chờ kết quả thanh toán từ hệ thống bên ngoài?
3. Webhook của đơn vị vận chuyển thỉnh thoảng không bao giờ tới, và lúc nghẽn thì cùng một sự kiện gửi lặp nhiều lần. Thiết kế nào đúng?

Khóa học liên quan (3)

Sử dụng trong vai trò

Thảo luận & tài liệu thêm 0

Chia sẻ kinh nghiệm, đặt câu hỏi, hoặc đính kèm tài liệu/YouTube giúp người khác học kỹ năng này.

Hãy là người đầu tiên chia sẻ kinh nghiệm cho kỹ năng này.

Kiểm tra kỹ năng này

Bài kiểm tra của các khóa dạy kỹ năng này
1 Chẩn đoán

Đánh giá Nền tảng Kỹ thuật cho PM/BA

Chấm riêng từng chiều của kỹ năng này.

22 người đã làm
Làm bài này
2 Chẩn đoán

Đánh giá Kỹ năng Kỹ thuật cho PM/BA

Chấm riêng từng chiều của kỹ năng này.

2 người đã làm
Làm bài này
3 Quiz

Bài thi tổng kết: Technical Product Manager

Bài kiểm tra của một khóa dạy kỹ năng này.

chưa ai làm
Làm bài này
4 Quiz

Chương 6: API nâng cao và định hướng nghề BA kỹ thuật

Bài kiểm tra của một khóa dạy kỹ năng này.

chưa ai làm
Làm bài này

Học kỹ năng này ở đâu?

Có 3 khóa dạy đúng phần này, miễn phí và bằng tiếng Việt.

Bắt đầu học