Đi đến nội dung chính
VI
Trang chủ / Bài viết / Giữ thứ tự, chống trùng và phát lại sự kiện
30 thg 4, 2026 · Z-SOFT Admin · 10 phút đọc

Giữ thứ tự, chống trùng và phát lại sự kiện

Giữ thứ tự trong đúng phạm vi nghiệp vụ, loại sự kiện trùng và phát lại lịch sử mà không lặp tác động bên ngoài.

Xem tất cả bài viết

Ý chính: Broker chỉ giữ thứ tự trong một phạm vi nhất định. Nghiệp vụ phải xác định những sự kiện nào thật sự cần đi cùng thứ tự.

Thuật ngữ trong bài: Ordering: thứ tự sự kiện; deduplication: loại sự kiện trùng; replay: phát lại sự kiện cũ để dựng lại dữ liệu.

Bài toán thực tế

Giữ thứ tự toàn hệ thống làm giảm khả năng xử lý song song. Thử lại tạo sự kiện trùng, còn sự kiện đến muộn có thể ghi đè dữ liệu mới. Phát lại lịch sử cũng có thể gửi lại email hoặc thanh toán nếu không tách tác động bên ngoài.

Broker chỉ đảm bảo thứ tự trong một phạm vi như partition hoặc khóa định tuyến. Nghiệp vụ phải xác định rõ đối tượng nào cần thứ tự, thay vì yêu cầu một thứ tự toàn cục làm mất khả năng xử lý song song.

Sự kiện trùng và đến muộn là điều bình thường trong cơ chế giao nhận ít nhất một lần. Consumer cần lưu phiên bản, chống trùng và tách tác động bên ngoài khỏi quá trình phát lại.

Thiết kế và triển khai

  1. Chọn khóa partition trùng với phạm vi nghiệp vụ cần giữ thứ tự.
  2. Gắn mã sự kiện, mã đối tượng, phiên bản đối tượng và thời điểm xảy ra vào mỗi sự kiện.
  3. Tách việc dựng lại trạng thái khỏi email, thanh toán và các tác động bên ngoài khi phát lại.

Mã minh họa: Consumer kiểm tra phiên bản sự kiện

if inbox.contains(event.id): ACK
current = projection.version(event.aggregateId)
if event.version <= current: ACK
if event.version > current + 1: park(event)
transaction(apply(event), inbox.add(event.id))
ACK

Sự kiện tạo ra khoảng trống phiên bản cần được cách ly, cảnh báo và xử lý theo chính sách; chờ vô hạn cũng là một dạng mất dữ liệu.

Rủi ro cần tính trước

  • Producer đặt lại phiên bản đối tượng sau một đợt chuyển đổi dữ liệu.
  • Phát lại lịch sử vô tình gửi lại thông báo cho khách hàng.
  • Một đối tượng có quá nhiều sự kiện làm bão hòa partition chứa nó.

Nên theo dõi gì?

Tín hiệuĐiều tín hiệu cho biết
Tỷ lệ khoảng trống phiên bản và sự kiện đến muộnLàm lộ lỗi thứ tự hoặc lỗi quản lý phiên bản ở producer.
Tỷ lệ sự kiện bị loại do trùngCho biết mức độ thử lại và tính ổn định của cơ chế giao nhận.
Thông lượng phát lại và số tác động bên ngoài bị chặnTheo dõi đồng thời tiến độ lẫn độ an toàn của quá trình phục hồi.

Đưa vào production từng bước

Thêm mã sự kiện, phiên bản đối tượng và số liệu quan sát trước khi bắt buộc quy tắc mới. Áp dụng inbox chống trùng cho một consumer, tạo môi trường chỉ dành cho phát lại và diễn tập toàn bộ lịch sử trước khi dùng công cụ trong sự cố thật.

Điều cần nhớ

Tính đúng của luồng sự kiện đến từ phạm vi thứ tự rõ và consumer có kết quả xác định, không chỉ từ cam kết của broker.

HỢP TÁC CÙNG Z-SOFT

Mỗi quyết định công nghệ hôm nay đều ảnh hưởng đến nhiều năm sau.

Trao đổi với đội ngũ Z-SOFT để đánh giá hiện trạng, xác định mục tiêu và lựa chọn kiến trúc phù hợp với định hướng phát triển của doanh nghiệp.

Đặt lịch tư vấn