Hacker News 中文摘要

RSS订阅

将PostgreSQL扩展至支持8亿ChatGPT用户 -- Scaling PostgreSQL to power 800M ChatGPT users

文章摘要

OpenAI通过优化PostgreSQL架构,使用1个主实例和近50个全球只读副本,成功支撑了8亿ChatGPT用户的海量查询需求。这证明了PostgreSQL可扩展性远超预期,能可靠处理超大规模读密集型负载。

文章总结

标题:PostgreSQL如何支撑8亿ChatGPT用户的规模化应用

多年来,PostgreSQL一直是支撑ChatGPT和OpenAI API等核心产品的关键底层数据系统。随着用户量激增,数据库负载呈现指数级增长——过去一年PostgreSQL负载增长超10倍,且仍在快速攀升。

通过生产基础设施升级,我们获得一个重要认知:PostgreSQL的读密集型工作负载承载能力远超业界预期。基于加州大学伯克利分校团队开发的这一系统,我们仅用单个Azure PostgreSQL主实例和全球部署的近50个只读副本,就成功支撑了海量全球流量。本文将分享OpenAI如何通过深度优化实现每秒数百万查询(QPS)的处理能力,服务8亿用户。

初始架构的挑战

ChatGPT发布后流量暴增,我们通过应用层和数据库层优化、实例扩容及增加读副本等策略应对。虽然单主架构看似难以满足需求,但经过持续改进仍具备扩展空间。主要痛点包括: 1. 上游问题引发的突发负载(如缓存失效导致的级联查询) 2. 高并发写入时MVCC机制效率下降(产生写放大和死元组问题) 3. 复杂查询导致的CPU饱和(如12表联查曾引发严重故障)

规模化解决方案

【写入优化】 - 将可分片的高写入负载迁移至Azure CosmosDB - 禁止在现有PostgreSQL中新增表 - 采用延迟写入策略平滑流量峰值

【查询优化】 - 拆解复杂联查至应用层处理 - 严格审查ORM生成语句 - 配置事务空闲超时(idleintransactionsessiontimeout)

【高可用设计】 - 主实例采用热备模式 - 关键读请求分流至副本 - 多区域部署副本集群

【资源隔离】 - 按优先级分流请求至独立实例 - 产品间流量物理隔离

【连接管理】 - 通过PgBouncer实现连接池化 - 跨区域部署时保持组件同域

【缓存策略】 - 采用缓存租约机制避免"惊群效应" - 单点回源替代并发查询

【复制优化】 - 与Azure合作测试级联复制方案 - 目标支持超百个副本

【流量控制】 - 多层速率限制(应用层/连接池/查询级) - 动态拦截问题查询

【Schema管理】 - 仅允许非重写式DDL操作 - 字段回填实施严格限速

成果与展望

当前架构实现: - 毫秒级P99延迟 - 99.999%可用性 - 12个月内仅1次SEV-0故障(ChatGPT ImageGen发布期间)

未来计划: 1. 继续迁移难分片的写入负载 2. 完善级联复制方案 3. 评估PostgreSQL分片及替代系统

实践证明,通过系统化优化,PostgreSQL完全能够支撑亿级用户的超大规模服务。我们将持续突破其性能边界,为未来增长预留充足空间。

评论总结

以下是评论内容的总结:

1. PostgreSQL的写入扩展性问题 - 主要观点:PostgreSQL的MVCC机制导致写入密集型工作负载效率低下,存在写入放大和读取放大的问题。 - 关键引用: - "PostgreSQL’s multiversion concurrency control (MVCC) implementation... makes it less efficient for write-heavy workloads"(MVCC机制使写入密集型工作负载效率低下) - "when a query updates a tuple... the entire row is copied to create a new version"(更新操作需要复制整行)

2. 解决方案的争议 - 主要观点:将部分工作负载迁移到Azure CosmosDB是否是最佳解决方案存在分歧。 - 支持方认为这是聪明的变通方案: - "they keep that awesome one running and found smart workaround"(保持PostgreSQL运行并找到聪明的变通方案) - 反对方认为这并非真正的扩展: - "they scaled PostgreSQL by offloading... not sure that's the answer"(通过卸载工作负载来扩展并非理想方案) - "it is not really scaling... new features go to a different DB"(新功能需使用其他数据库,并非真正扩展)

3. PostgreSQL的积极评价 - 主要观点:PostgreSQL性能强大,能支持大型网站直到需要重新考虑架构。 - 关键引用: - "It can get you to being one of the largest websites... by throwing CPU and disk at it"(通过增加CPU和磁盘就能支持大型网站) - "cool to see that PostgreSQL is still standing"(PostgreSQL仍然表现良好)

4. 技术细节讨论 - 复制设置疑问: - "how they deal with stragglers... may be lagging"(如何处理复制延迟问题) - 实例规格疑问: - "what kind of instance companies at that level... are using"(大型公司使用何种规格实例) - 模式变更建议: - "run a script... that kills any workload conflicting"(建议运行脚本终止冲突工作负载)

5. 其他观点 - 对博客本身的评价: - "ai written blog... same context is repeated"(可能是AI撰写的重复内容博客) - 经济性考虑: - "for people not burning billions of VC $ sharding Postgres is not a bad option"(对于资金有限的公司,分片是不错的选择)

6. 幽默/讽刺评论 - "Someone ask Microsoft what does it feel to be bested by an open source project"(调侃微软被开源项目超越) - "mongodb is web scale... SQL is 1990’s era legacy technology /s"(讽刺NoSQL优于SQL的观点)