自动扩展Lakebase Postgres

自动扩展Lakebase Postgres

💡 原文英文,约2000词,阅读约需7分钟。
📝

内容提要

Lakebase Postgres通过自动扩展实现数据库计算资源的动态调整,其算法监控CPU使用率、内存压力及基于时间感知的HyperLogLog估算的工作集大小来确定扩展目标。系统利用VM实时调整CPU和内存,无需中断连接,支持双向扩展,并分离存储与计算,使扩展灵活高效,避免资源浪费,适应实时工作负载变化。

🔎

延伸解读

自动扩展的三大信号

Lakebase Postgres的自动扩展算法并非仅依赖CPU使用率,而是综合监控CPU、内存压力以及基于时间感知的HyperLogLog估算的工作集大小。CPU信号采用一分钟平均值以过滤瞬时波动;内存信号则通过高频轮询确保使用率低于75%,防止内存耗尽;工作集信号直接估算活跃数据量,避免因缓存未命中导致CPU利用率低而误判。三者取最大值作为扩展目标,确保系统能应对不同维度的资源瓶颈。

时间感知的HyperLogLog

传统HyperLogLog只能统计去重数量,无法区分新旧数据,导致历史工作负载长期占用资源。Lakebase Postgres改进了该算法,在寄存器中存储时间戳而非简单置位,从而能估算任意时间窗口内的活跃页面数。通过分析工作集随时间的变化,算法能识别出当前工作负载的“平台期”,并据此调整缓存大小,既避免过度扩展,也防止缓存被过早回收。

实时调整的机制

自动扩展的实现依赖于存储与计算分离的架构,计算节点可在不中断连接的情况下动态调整CPU和内存。系统通过虚拟机监控器、调度器等组件协同工作,支持双向扩展。扩展时,调度器确保资源分配一致,必要时可进行实时迁移;缩容时则额外检查内存是否足够,确保安全。这种机制使得数据库每月可进行数万次调整,紧密跟随工作负载变化。

Q&A

Lakebase Postgres 自动扩展是如何工作的?

Lakebase Postgres 通过监控 CPU 使用率、内存压力和工作集大小(基于时间感知的 HyperLogLog 估算)来确定扩展目标。系统利用 VM 实时调整 CPU 和内存,无需中断连接,支持双向扩展,并分离存储与计算,使扩展灵活高效。

Lakebase Postgres 自动扩展算法使用哪些信号来决定扩展目标?

算法使用三个信号:CPU 使用率(基于一分钟平均值)、内存压力(保持内存使用低于 75% 的 RAM)以及工作集大小(通过时间感知的 HyperLogLog 估算)。最终扩展目标是这三个信号中的最大值,并受用户配置的最小和最大计算大小限制。

为什么 Lakebase Postgres 的自动扩展需要跟踪工作集大小?

因为仅靠 CPU 使用率可能无法反映性能问题,例如当工作集超出本地缓存时,查询会等待网络请求,导致 CPU 使用率降低。跟踪工作集大小可以确保缓存足够大,避免性能下降。

Lakebase Postgres 如何在不中断连接的情况下调整计算资源?

Lakebase Postgres 使用虚拟机(VM)实时调整 CPU 和内存,无需停止 Postgres。如果节点资源不足,NeonVM 可以实时迁移 VM 到其他节点,同时保持 IP 地址不变,因此现有连接不会中断。

Lakebase Postgres 自动扩展如何避免过度分配资源?

系统支持双向扩展,即既能扩展也能缩减。缩减时,vm-monitor 会检查移除内存后是否仍能满足运行进程的需求,确保安全。算法还通过时间感知的 HyperLogLog 估算工作集,避免因历史工作负载而保留过多资源。

Lakebase Postgres 自动扩展的算法如何选择工作集的时间窗口?

算法通过分析工作集随时间的变化来选择窗口。它寻找工作集估计中的急剧增加点,该点标志着当前平台的结束。如果找不到急剧增加,则使用 60 分钟的估计值。搜索从五分钟开始,以避免在短暂暂停时立即缩减。

Lakebase Postgres 自动扩展如何预测未来的工作集增长?

算法通过检查工作集估计从一个持续时间到下一个持续时间的增加来预测增长,并为下一个控制间隔分配足够的缓存。由于缓存指标每 20 秒获取一次,预测仅覆盖不到一分钟,以避免过度反应。

Lakebase Postgres 自动扩展的扩展频率如何?

系统以三个时间尺度运行:CPU 目标每 5 秒更新一次,内存目标每 100 毫秒更新一次,工作集目标每 20 秒更新一次。这使得数据库每月可以改变大小超过 32,000 次。

🏷️

标签

➡️

继续阅读