2025年9月25日: PostgreSQL 18 发布!

无状态 Postgres 查询路由器 1.0.0 发布

发布于 2023-12-05,作者 Yandex
相关开源项目

SPQR 团队荣幸地发布 SPQR(Stateless Postgres Query Router)的第一个生产就绪版本。

SPQR 是一款用于通过分片实现PostgreSQL水平扩展的查询路由器。SPQR 的设计理念是尽可能轻量,如同一个连接池,将对数据模式的了解降至最低限度。

主要功能

  • 分片。如果可能,路由器会从事务的第一条语句中确定一个分片,并将客户端绑定到该分片直到事务结束。但是,您也可以在注释请求中显式指定分片或分片键
  • 事务和会话池化。与您喜欢的连接池(Odyssey 或 PgBouncer)一样。
  • 多路由器容错。路由器仅缓存分片规则。整个安装的信息存储在 QDB 服务内部,因此可以同时运行无限数量的路由器。
  • 分片再平衡。分片之间的数据迁移旨在按比例平衡分片的工作负载。主要思想是最大限度地减少这些迁移过程中的锁定影响,这通过减少传输的数据范围大小来实现。
  • 多服务器和故障转移。在路由器配置中,可以为单个分片指定多个服务器。然后,路由器将在副本之间分发只读查询。然而,除了自动路由之外,您还可以通过在查询中使用 target-session-attr 参数来显式定义特定查询的目标。
  • 查询执行的开销极小。请在此处查看基准测试和在此处查看基准测试

项目状态

SPQR 的核心功能集已投入生产使用。但自动分片再平衡尚未准备好投入生产。此外,SPQR 支持一些跨分片查询,但它们具有不一致的快照,并且未进行 2PC 锁定以提供真正的跨分片原子性。

目前,该项目由 Yandex Cloud 维护。但是,我们正在寻找新的架构师和贡献者来拓宽我们的技术视野。一如既往,我们欢迎任何反馈。

链接

SPQR 在 https://github.com/pg-sharding/spqr 上开发和分发。

已发布的版本可以在发布页面找到。