演讲者介绍
姓名: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 是一个值得信赖的选择,尤其是在面对高并发和大数据量的场景时。




