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 值得看,不是因为它野心大,而是因为它把一个常被忽略的问题摆到了台面上:你到底需要异步能力,还是只是习惯了多养一套系统?