Nguồn: GitHub - russellromney/honker

Tóm tắt

Honker là một SQLite extension viết bằng Rust, mang đến semantics NOTIFY/LISTEN kiểu Postgres cho SQLite — bao gồm durable pub/sub, task queue và event streams — mà không cần polling liên tục hay một broker/daemon riêng biệt. Dự án hỗ trợ binding cho Python, Node.js, Go, Ruby, Bun, Elixir và C++.

Vấn đề mà Honker giải quyết là: khi SQLite được dùng làm primary datastore, các ứng dụng thường phải thêm Redis + Celery để có message queue, tạo ra dual-write problem và chi phí vận hành. Honker cho phép enqueue task trong cùng một transaction với business write — nếu transaction rollback, message cũng mất theo, đảm bảo tính nhất quán tuyệt đối.

Về mặt kỹ thuật, Honker hoạt động bằng cách theo dõi WAL file của SQLite thông qua stat(2) với tần suất 1ms thay vì dùng kernel notifications (do FSEvents bỏ lỡ writes cùng process trên macOS). Mỗi khi WAL thay đổi, tất cả subscriber được đánh thức để chạy một indexed SELECT — đây là tradeoff “over-triggering” có chủ ý để đạt push semantics với độ trễ single-digit milliseconds.

Honker cung cấp ba primitive cốt lõi: notify() cho ephemeral pub/sub, stream() cho durable pub/sub với per-consumer offsets, và queue() cho at-least-once work queue với retry, priority, delayed jobs và dead-letter table. Toàn bộ schema được định nghĩa trong Rust extension và chia sẻ qua tất cả các language bindings, đảm bảo interoperability.

👉 Đọc bài gốc