Supavisor 1.0:Postgres的可扩展连接池

Supavisor 1.0:Postgres的可扩展连接池

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

Supavisor 1.0成功迁移所有项目,新增连接池功能,支持查询负载均衡、命名预处理语句和查询取消。通过Elixir和Rust实现高并发和快速I/O,优化SQL解析。自动检测主服务器,简化写操作,确保读写一致性,并更新连接限制,支持IPv4到IPv6转换。

🔎

延伸解读

连接池性能优化:Elixir 与 Rust 的协同

Supavisor 使用 Elixir 构建,利用其高并发和快速 I/O 特性,但 Elixir 在 SQL 解析方面性能不足。为此,团队通过 Rustler 集成 Rust 的 pg_query.rs 库进行高效 SQL 解析。这种混合架构既发挥了 Elixir 的并发优势,又借助 Rust 弥补了解析短板,为连接池的稳定运行和功能扩展提供了技术基础。

读写一致性与主服务器自动检测

Supavisor 能自动探测主服务器,将写操作定向到主库,读请求则随机负载均衡到主库或副本。这种策略简化了客户端配置,但写操作可能增加几毫秒延迟。为了确保读后写一致性,客户端可以将读写操作包裹在事务中。未来计划支持通过 SQL 语句(如 SET SERVER 'primary')自定义目标服务器,以在事务外或跨客户端保证一致性。

命名预处理语句的池化支持

在事务模式下,命名预处理语句通常无法跨连接共享,每个客户端连接需为每个查询单独准备语句。Supavisor 通过解析 SQL 识别 PREPARE 语句,并将其广播到所有连接,使所有客户端都能访问其他连接创建的命名预处理语句。这虽然增加了每个 Postgres 连接的内存开销(复制查询计划),但有望带来显著的吞吐量提升。

连接限制调整与 IPv4 迁移提醒

Supavisor 提高了小型项目的默认最大客户端连接数,例如 Small 从 200 提升至 400,Medium 从 200 提升至 600。此外,由于 AWS 从 2024 年 2 月 1 日起对 IPv4 地址收费,Supavisor 可代理 IPv4 到 IPv6 的连接。使用 PgBouncer 连接字符串的用户需在 2024 年 1 月 15 日前迁移到 Supavisor 连接字符串,以避免服务中断。

❓

Q&A

Supavisor 1.0有哪些新功能?

Supavisor 1.0新增了查询负载均衡、命名预处理语句支持和查询取消功能。

Supavisor如何实现高并发和快速I/O?

Supavisor使用Elixir和Rust实现高并发和快速I/O,优化SQL解析。

Supavisor如何处理读写一致性?

Supavisor通过自动检测主服务器,简化写操作,确保读写一致性。

Supavisor支持哪些连接限制?

Supavisor更新了连接限制,支持从IPv4到IPv6的转换。

如何在Supavisor中使用命名预处理语句?

Supavisor支持命名预处理语句,允许客户端重用查询计划并提交参数。

Supavisor的查询取消功能有什么用?

查询取消功能允许用户在psql中通过Ctrl+C取消正在执行的查询,特别适用于意外运行重查询的情况。

🏷️

标签

➡️

继续阅读