OpenAI, PostgreSQL 확장으로 8억 사용자 지원: 기술적 비결 공개
OpenAI는 ChatGPT 및 API 서비스 확장을 위해 PostgreSQL을 활용, 10배 이상 증가한 데이터베이스 부하를 처리함
단일 Primary 인스턴스와 50개 이상의 Read Replica를 통해 초당 수백만 쿼리(QPS)를 처리하는 아키텍처를 구축함
캐싱, 연결 풀링, 쿼리 최적화 등 다양한 기술을 통해 데이터베이스 부하를 감소시키고 성능을 향상시킴
Write-heavy 워크로드(Write-heavy Workload)는 Azure Cosmos DB로 마이그레이션하여 PostgreSQL의 부하를 분산하고, 향후 샤딩(Sharding)을 고려함
단일 Primary 인스턴스 아키텍처의 한계와 극복
OpenAI는 단일 Primary 인스턴스(Single Primary Instance)를 사용하여 8억 명의 사용자를 지원하는 PostgreSQL 아키텍처를 구축했다. 하지만, Write 트래픽 급증(Write Traffic Spike) 시 서비스 장애를 겪었고, 이를 해결하기 위해 Read Replica를 활용한 읽기 부하 분산(Read Load Balancing), 캐싱 계층 도입(Caching Layer), 쿼리 최적화(Query Optimization)를 수행했다. 특히, HA(High Availability) 모드를 통해 Primary 인스턴스 장애에 대비하고, PgBouncer를 활용하여 연결 풀링을 최적화했다.
쿼리 최적화 및 성능 개선 전략
OpenAI는 복잡한 쿼리(Complex Query)로 인한 성능 저하를 해결하기 위해, Join 연산 최소화(Join Operation Minimization), ORM(Object-Relational Mapping) 프레임워크에서 생성된 SQL 검토 등의 노력을 기울였다. 또한, idle_in_transaction_session_timeout 설정을 통해 장시간 실행되는 유휴 쿼리(Idle Query)로 인한 문제를 방지했다. 이러한 노력의 결과로, P99 지연 시간(Latency)을 10밀리초대로 유지하며, 5-nines 가용성(Five-Nines Availability)을 달성했다.
캐싱 계층 및 연결 풀링을 통한 부하 감소
OpenAI는 캐싱 계층(Caching Layer)을 도입하여 PostgreSQL의 읽기 부하(Read Load)를 줄였다. 캐시 미스(Cache Miss) 발생 시, 캐시 락킹(Cache Locking) 메커니즘을 통해 중복된 데이터베이스 요청을 방지했다. 또한, PgBouncer를 사용하여 데이터베이스 연결 풀링을 구현, 연결 설정 지연 시간을 단축하고, 연결 폭주(Connection Storm) 문제를 해결했다. 이러한 전략은 데이터베이스 성능 향상(Database Performance Improvement)에 기여했다.
Write-heavy 워크로드 분산 및 향후 확장 계획
OpenAI는 Write-heavy 워크로드(Write-heavy Workload)를 Azure Cosmos DB로 마이그레이션하여 PostgreSQL의 부하를 줄였다. 또한, Schema 변경(Schema Change) 시, 테이블 전체 재작성(Full Table Rewrite)을 피하고, 5초 제한 시간(5-second Timeout)을 적용하여 안정성을 확보했다. 향후에는 Cascading Replication을 통해 Read Replica를 더 확장하고, Sharded PostgreSQL 또는 다른 분산 시스템(Distributed System)을 고려하여 지속적인 성장을 지원할 계획이다.