Delivery Semantics

Định nghĩa

Delivery Semantics là cam kết của messaging system về việc message/event có thể được giao bao nhiêu lần và trong điều kiện lỗi sẽ xử lý ra sao.

Ba mức thường gặp

  • At-most-once: message được giao tối đa một lần; có thể mất nhưng không lặp.
  • At-least-once: message không mất nếu hệ hoạt động đúng, nhưng có thể bị giao lặp.
  • Exactly-once/effectively-once: side effect cuối cùng giống như xử lý đúng một lần, thường cần transaction, idempotency hoặc dedup.

Cách hiểu bằng lời của tôi

Delivery semantics không chỉ là tính năng broker. Nó là hợp đồng giữa producer, broker, consumer, offset/ack, datastore và side effect. Nếu consumer gửi email rồi crash trước khi commit offset, retry có thể gửi email lần nữa dù broker không “sai”.

Thiết kế an toàn

  • Dùng Idempotency Key hoặc dedup table cho side effect.
  • Commit offset sau khi side effect đã bền vững.
  • Có Dead Letter Queue cho message lỗi lặp lại.
  • Ghi rõ operation nào chịu được duplicate, operation nào cần transaction.

Liên kết