内容提要
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取消正在执行的查询,特别适用于意外运行重查询的情况。