Honker 这件事,值得看,但别看歪了。
它不是 SQLite 官方新特性,也不是“SQLite 现在能替代消息中间件”这种大话。它是一个第三方开源扩展,想把接近 Postgres NOTIFY/LISTEN 的通知语义,加到 SQLite 上,再顺手把 durable queue、event streams、pub/sub 和 scheduler 装进同一个数据库文件里。
这件事真正打中的,是小团队常见的老毛病:业务数据已经在 SQLite,异步任务却还要再拉一套 Redis、Celery 或别的 broker。系统没大多少,零件先多了一倍。对单机、本地优先、边缘部署来说,这不是豪华配置,是负担。
Honker 到底做了什么,适合替代谁
Honker 的形态很直接:SQLite loadable extension,加多语言绑定。现有描述里,核心是 Rust 扩展,并给 Python、Node、Bun、Ruby、Go、Elixir、C++ 等语言准备了接入方式。
它要提供的,不是 PostgreSQL 原生功能的完整复制,而是接近 Postgres 风格的 NOTIFY/LISTEN 语义。附带的能力也不小:通知、持久化队列、事件流、pub/sub、调度器,都尽量放进一个 SQLite 文件里。
关键点在机制,也在边界。
| 维度 | Honker 现在想做的事 | 价值 | 限制 |
|---|---|---|---|
| 通知 | 基于 SQLite WAL 事件通知做 push 语义 | 跨进程通知,减少轮询 | 依赖扩展实现,不是 SQLite 原生官方能力 |
| 队列 | 把任务和事件存进 SQLite | 业务数据和入队可同事务提交 | 不等于 Redis/Postgres 级别的吞吐和成熟度 |
| 部署 | 不引入单独 broker 或 daemon | 少一套运维、备份和故障面 | 更适合单机、嵌入式、轻运维场景 |
| 项目状态 | Experimental,API 可能变化 | 迭代空间大 | 生产边界还没被充分证明 |
这里最硬的价值,不是“一个库做更多事”,而是同事务提交。
如果 INSERT INTO orders 和队列入队发生在同一事务里,那就能一起成功,一起回滚。很多小系统最头疼的双写问题,恰恰出在这儿:订单写进数据库了,消息没进 broker;或者消息发出去了,业务写入回滚了。少一层系统,就少一层裂缝。
所以它最像谁?不是替代 Kafka,也不是替代一整套分布式消息系统。它更像是在 SQLite 世界里,尝试复刻一部分 Postgres 内建异步工作流的思路。目标用户也很集中:
- 已经用 SQLite 发货的小团队
- 桌面应用、本地优先应用、边缘节点软件
- 不想为了几个异步任务再引入第二个数据存储的工程师
如果你本来就是单机部署,或者一台机器上跑几个进程,Honker 至少给了一个新选项。
值不值得买账,关键看你要省哪笔账
我对 Honker 基本买账,但只买它最朴素的那部分价值:省掉基础设施冗余。
很多团队上 Redis + Celery,不是因为场景真复杂,而是教程和框架默认就这么搭。下单发邮件、生成缩略图、异步写日志、广播本地事件,本来都是小任务,最后却多出 broker、worker、备份、监控、告警、故障恢复一整套东西。系统功能没涨多少,维护账先上去了。
Honker 戳中的,正是这笔账。
它把业务数据、队列、通知塞回一个 SQLite 文件里。备份更简单。恢复路径更短。事务边界也更清楚。对独立开发者和小团队负责人来说,这很具体,不抽象:
- 原本计划补一个 Redis 只为跑几个后台任务的团队,可以先延后采购和部署
- 已经用 SQLite 做后端或本地数据层的应用,可以评估把轻量异步逻辑收回数据库内
- 想做本地优先产品的工程师,会少一次“为了异步能力被迫上服务端组件”的选型转弯
这就是“省锅”的价值。韩非子讲“治吏不治民”,放到工程里也成立:很多问题不是功能缺失,是系统零件太多,激励又不支持你做减法。
不过,买账归买账,别把判断抬高。Honker 现在更像是在认真消灭一类小中型系统的多余部件,不是在宣布“单机数据库已经够用来替代分布式基础设施”。这两句话,差得很远。
拿它和 PostgreSQL 原生方案对比,也该老实一点。Postgres 这条路的成熟,不只是一条通知语义,而是多年生产实践、扩展生态和任务模型一起堆出来的。Honker 现在提供的是一条相似路线,不是同等完成度。
该怎么用,和最该盯的风险是什么
最容易犯的错,就是把 Honker 当成“SQLite 版通用消息中间件”。这会把人带沟里。
项目自己已经写明是 Experimental,API 也可能变化。这不是客气话,是明牌风险。你现在能看到的是设计方向,不是已经定型的生产标准件。
另一个需要压住的冲动,是把“Postgres-style semantics”听成“等于 PostgreSQL NOTIFY/LISTEN”。不是一回事。语义接近,不代表可靠性、吞吐、可观测性、故障恢复、生态工具链都接近。
README 提到基于 WAL 事件通知做 push 语义,也提到单数字毫秒级投递。这个表述可以当成当前目标或实验表现,但不能直接扩写成通用性能承诺。场景一旦变成高并发、多消费者、复杂重试、跨机部署,问题就不再是“能不能通知”,而是锁竞争怎么表现、异常退出后怎么恢复、积压如何处理、消费语义能不能稳定。
如果你是最相关的两类人,动作会很不一样:
| 你是谁 | 更现实的动作 |
|---|---|
| 正在用 SQLite 发货的小团队 | 可以先做 PoC,验证同事务入队、异常恢复、跨进程通知是否满足需求,再决定要不要延后 Redis/Celery |
| 做桌面、本地优先、边缘部署的工程师 | 值得重点看。若异步任务都在单机内,Honker 可能直接减少一个系统组件 |
我会重点盯四件事,它们比 GitHub 星数重要得多:
- 多语言绑定是否长期一致,而不是核心能力强、外围接口散
- 长事务、锁竞争、进程异常退出后的语义是否稳定
- 队列、streams、scheduler 这些能力是不是同一水位,而不是功能列得很满、边角很多坑
- 项目能不能尽快说清生产边界.什么场景建议用,什么场景别碰
这类工具会冒出来,不奇怪。过去很多技术栈都在犯同一个毛病:默认架构越来越重,小系统也被大系统的习惯绑架。历史上铁路、电力、云服务都出现过类似阶段,先是过度铺设,再是回头算账。今天轮到 Redis/Celery 这类默认组合被重新审视。并不完全一样,但底层逻辑很像:成本总会追上炫技。
所以,Honker 值得看,不是因为它野心大,而是因为它把一个常被忽略的问题摆到了台面上:你到底需要异步能力,还是只是习惯了多养一套系统?
