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

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

SPQR 团队很自豪地发布了 SPQR(无状态 Postgres 查询路由器)的第一个生产就绪版本。

SPQR 是一个通过分片实现 PostgreSQL 水平扩展的查询路由器。SPQR 的设计理念是像连接池一样轻量级,将数据模式的知识减少到必要的最低限度。

主要特点

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

项目状态

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

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

链接

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

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