无状态 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 上开发和分发。
可以在发布页面找到已发布的版本。