暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在 OpenAI 将 PostgreSQL 扩展到下一个级别

梧桐 2025-06-14
144

演讲者介绍

  • 姓名:Bhan

  • 职位:OpenAI 技术人员

  • 背景:Bhan 于 2024 年 8 月加入 OpenAI,此前是 Tune 的联合创始人,Tune 是一家使用机器学习优化后期任务的初创公司。Bhan 还曾在 Kan Mandabis 小组担任研究员,参与多个研究项目。

演讲主题

本次演讲的主题是“如何在 OpenAI 将 PostgreSQL 扩展到下一个级别”。演讲内容主要围绕 OpenAI 使用 PostgreSQL 的背景、优化措施、案例研究以及对 PostgreSQL 社区的反馈和建议展开。

PostgreSQL 在 OpenAI 的重要性

PostgreSQL 是 OpenAI 最关键系统的支柱。如果 PostgreSQL 出现故障,许多关键功能将无法使用。然而,扩展 PostgreSQL 以满足 OpenAI 的需求并非易事。OpenAI 长期以来一直使用单个主实例,直到遇到可扩展性限制。当前的单主多副本架构中,可扩展性仍然是一个瓶颈。

优化措施

减少主节点负载

  • 迁移工作负载:将一些可分片的繁重工作负载迁移到其他系统,减轻主系统的负担。

  • 减少应用程序级别的写入权限:优化应用程序,确保仅在必要时进行写入操作。

  • 设置回填速率限制:避免因回填操作导致的性能问题。

  • 查询优化:设置超时机制,避免长时间运行的查询;限制查询连接数量,避免在 PostgreSQL 中进行复杂的多表连接操作。

解决单点故障问题

  • 关键请求副本化:将关键请求从主服务器迁移到副本,即使主服务器失败,也不会影响关键服务。

  • 优先级分类:根据请求的优先级和重要性进行分类,为高优先级请求分配专用网络带宽,防止低优先级请求影响关键服务。

性能优化

  • 连接池和连接重用:使用 PG bouncer 等工具减少连接延迟,提高连接效率。

  • 速率限制:在多个层面设置速率限制,防止昂贵查询导致整个实例瘫痪。

  • 模式迁移优化:限制模式更改操作的超时时间,避免对整个表进行重写。

遇到的问题及解决方案

缓存未命中问题

  • 解决方案:在 PostgreSQL 和代理层设置请求限制,避免因缓存未命中导致的恶性循环。

  • 优化:在应用程序层设置超时机制,减少因超时重试导致的额外请求。

昂贵查询问题

  • 解决方案:优化应用程序中的查询,避免在 PostgreSQL 中进行复杂的多表连接操作;允许阻止或限制特定查询,以防止其影响整个系统。

权限飙升问题

  • 解决方案:优化应用程序以减少不必要的写入权限;将读取查询从主服务器迁移到副本,减少主服务器的负载。

对 PostgreSQL 社区的建议

  • 增强可观察性:希望 PostgreSQL 能够提供更详细的查询延迟数据(如 P95、P99)以及模式更改事件的记录。

  • 禁用索引功能:建议 PostgreSQL 提供禁用索引的功能,以便在删除索引之前进行性能监控。

  • 自动旋钮调节:希望 PostgreSQL 能够提供基于工作负载的自适应旋钮调整功能,例如自动真空吸尘器的优化。

结论

尽管 PostgreSQL 在处理繁重工作负载方面存在一些限制,但通过优化和调整,它仍然可以很好地扩展以支持大规模的读取工作负载。对于开发人员来说,PostgreSQL 是一个值得信赖的选择,尤其是在面对高并发和大数据量的场景时。


文章转载自梧桐,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论