PgDog: 通过代理实现 Postgres 水平扩展
PgDog 是一个高性能代理,旨在通过实现水平扩展来解决 PostgreSQL 的扩展限制。通过在数据库前端放置一个代理,PgDog 允许用户在保持标准 PostgreSQL 接口的同时,扩展到 100 TB+ 的表和每秒 100 万次查询 (QPS)。
核心功能与部署
PgDog 充当分片器 (sharder)、连接池 (connection pooler) 和负载均衡器 (load balancer)。它使用 Rust 编写,以确保性能和可靠性,使其能够通过多线程执行利用所有可用的 CPU 核心。
关键部署特性包括:
- 基础设施无关性:它可以部署在本地、私有云账户或使用 Docker 镜像在笔记本电脑上运行。
- 零应用更改:用户可以通过更改应用程序配置中的
DATABASE_URL来实现 PgDog,从而无需重写应用程序逻辑。 - 零依赖:该设计避免了隐藏的 serverless 成本和外部依赖。
性能与生产环境状态
PgDog 目前在数十个部署中处理超过 200 万 QPS 的生产环境,并已分片了超过 20 TB 的数据。该项目保持着快速的开发周期,每周四发布新版本。
与传统 Postgres 扩展方式的对比
传统的 PostgreSQL 扩展通常需要复杂的应用层分片或使用核心扩展。PgDog 基于代理的方法与 Citus 等工具不同,它作为数据库前端的一个层级运行,而不是作为核心扩展,这简化了部署并降低了修改核心数据库的风险。
用户体验与技术洞察
来自从 PgBouncer 等工具迁移过来的用户的社区反馈突出了几个技术优势:
- LISTEN/NOTIFY 支持:用户报告称,PgDog 成功解决了通常与事务池化器相关的
LISTEN/NOTIFY问题。 - Aurora Failover:"auto mode" 功能旨在无缝支持 AWS Aurora failover。
- Aurora/RDS/EC2:创始人在 Instacart 扩展 Postgres 的经验——在 RDS、Aurora 和 EC2 上每分钟处理数十万个杂货配送订单——构成了 PgDog 项目的技术基础。
社区关注点与局限性
虽然许多用户称赞该代理的稳定性和稳定性,但社区讨论中也提出了一些技术关注点:
- 配置管理:一些用户发现,对于数据库频繁创建和销毁的 Kubernetes 多租户环境,TOML 配置文件的使用方式比较笨拙。
- 身份验证缓存:有报告称,在透传模式下身份验证请求被缓存,导致在更改角色密码时出现问题。
- 运维开销:讨论强调,虽然扩展问题已得到解决,但高可用性 (HA) 和大版本升级(可能导致 10-20 分钟的停机时间)对于自管理 Postgres 用户来说仍然是重大的运维挑战。
- 企业版:PgDog 正在提供专门针对 AWS 优化的、带有 SLA 支持的企业版,尽管开源版与企业版之间的具体功能集差异尚未详细说明。
融资与路线图
PgDog 是一个三人团队,获得了来自 Basis Set、YC 和 Pioneer Fund 的 550 万美元融资。这笔资金为继续开发开源核心和企业版提供了必要的多年运行资金。