ADR 0008Chấp nhận
ADR 0008: Chỉ gửi sự kiện chuyển trạng thái về Access Hub
Trạng thái: Chấp nhận. Ngày: 2026-09-30.
Bối cảnh
Có hàng nghìn máy với hàng chục luật, tạo ra lượng đánh giá rất lớn. Access Hub dùng MySQL và không nên bị ghi liên tục.
Quyết định
Collector đánh giá luật trên luồng mẫu, giữ trạng thái trong bộ nhớ, và chỉ phát sự kiện khi chuyển trạng thái (mở, đóng, nhắc lại, mất tín hiệu, phục hồi, nhóm sự cố). Mỗi sự kiện có event_id (UUIDv7) và seq theo (server, rule, series), đi qua outbox bền vững và gửi lô idempotent. last_seen gửi theo lô mỗi khoảng 5 phút.
Lý do
- Số lượng sự kiện nhỏ hơn nhiều bậc so với số mẫu, MySQL không bị quá tải.
- Idempotent và có thứ tự nên thử lại an toàn.
- Tách rõ: collector đánh giá (nhanh, gần dữ liệu), Access Hub quản lý vòng đời alert và thông báo.
Đánh đổi
- Access Hub không có "giá trị hiện tại" theo thời gian thực từ sự kiện, phải hỏi collector qua API truy vấn cho giá trị mới nhất.
- Cần snapshot trạng thái đánh giá để không mất alert đang mở khi khởi động lại (NFR-13).
- Sự kiện gửi thất bại lâu phải có kho dead-letter và cảnh báo.
Hệ quả
Xem 05-alerting cho mô hình sự kiện và quy tắc xử lý phía Access Hub.