去年年底起,Tailscale 的 uptime 开始变得不稳定,六个月里发生了 19 次独立的数据库损坏事件,每次都指向同一个 SQLite bug。他们的控制平面内部用 SQLite 存储每个 tailnet 的配置元数据,每个 shard 由一个 Go 进程独占访问数据库,这是 SQLite 推荐的单写入者架构。这套方案从 2022 年运行至今,一直没出过问题。
排查过程相当曲折。团队最初怀疑是硬件故障或磁盘问题,但逐一排除后,最终将矛头指向 SQLite 本身。他们花了整整六个月,才定位到这个潜伏了 16 年的漏洞——它只在特定并发场景下触发,普通压力测试根本复现不出来。
这个 bug 与 SQLite 的页面缓存管理有关,在极端情况下会导致数据库页被错误覆盖,进而引发数据损坏。由于触发条件苛刻,它一直未被发现,直到 Tailscale 的规模和数据模式恰好撞上了这个雷区。
对任何重度依赖 SQLite 的团队来说,这次事件都是一个提醒:即便是最成熟的底层库,也可能藏着深埋多年的隐患。Tailscale 已将修复方案反馈给上游,相关补丁会随 SQLite 后续版本发布。
#GitHub #开源 #SQLite #Tailscale #数据库 #漏洞修复
@GitHubTrendingHub