ChatGPT 8억 명을 지원하기 위한 PostgreSQL 확장

2 weeks ago 9

  • OpenAI는 ChatGPT와 API 트래픽 급증에 대응하기 위해 PostgreSQL 인프라를 대규모로 확장, 단일 Azure PostgreSQL 플렉서블 서버와 약 50개의 리드 리플리카로 수백만 QPS를 처리
  • 읽기 중심 워크로드에 최적화된 구조를 유지하면서, 쓰기 부하 완화를 위해 Azure Cosmos DB로 일부 워크로드를 마이그레이션
  • PgBouncer 연결 풀링, 캐시 락킹, 레이트 리미팅, 워크로드 격리 등 다양한 최적화로 안정성과 지연 시간 개선
  • 단일 프라이머리 구조의 한계를 극복하기 위해 고가용성(HA) 구성과 핫 스탠바이, 계단식 복제(cascading replication) 테스트를 병행
  • 이 접근으로 99.999% 가용성두 자릿수 밀리초 수준의 p99 지연 시간을 달성, 향후 샤딩 PostgreSQL이나 분산 시스템으로의 확장 가능성 확보

PostgreSQL 확장 개요

  • PostgreSQL은 ChatGPT와 OpenAI API의 핵심 데이터 시스템으로, 지난 1년간 부하가 10배 이상 증가
    • 단일 프라이머리 인스턴스와 전 세계에 분산된 약 50개의 리드 리플리카로 8억 명 사용자의 요청 처리
  • 읽기 중심 구조를 유지하면서 쓰기 부하 완화를 위해 일부 워크로드를 Azure Cosmos DB로 이전
  • 새로운 테이블 추가는 금지하고, 신규 워크로드는 기본적으로 샤딩 시스템에 배치

단일 프라이머리 구조의 과제와 대응

  • 단일 작성자 구조는 쓰기 확장성 한계단일 장애점(SPOF) 문제를 가짐
    • 읽기 트래픽은 리플리카로 분산, 쓰기 트래픽은 샤딩 가능한 워크로드를 Cosmos DB로 이전
    • 핫 스탠바이를 통한 고가용성 구성으로 장애 시 빠른 승격(failover) 지원
  • 읽기 부하 급증 시 캐시 미스 폭주로 인한 CPU 포화 문제 발생
    • 캐시 락킹 메커니즘을 도입해 동일 키에 대한 중복 쿼리 방지

쿼리 및 리소스 최적화

  • 복잡한 다중 조인 쿼리가 CPU를 과도하게 점유해 서비스 지연을 유발
    • ORM이 생성한 비효율적 SQL을 검토하고, 복잡한 조인 로직은 애플리케이션 계층으로 이동
    • idle_in_transaction_session_timeout 설정으로 장기 유휴 쿼리 방지
  • “Noisy neighbor” 문제 해결을 위해 트래픽을 우선순위별 인스턴스로 분리
    • 저우선순위 요청이 고우선순위 서비스에 영향을 주지 않도록 격리

연결 관리 및 부하 제어

  • Azure PostgreSQL의 5,000개 연결 제한 문제를 해결하기 위해 PgBouncer를 프록시 계층으로 도입
    • 연결 재사용으로 평균 연결 시간 50ms → 5ms로 단축
    • 지역 간 네트워크 지연을 줄이기 위해 프록시·클라이언트·리플리카를 동일 리전에 배치
  • 레이트 리미팅을 애플리케이션, 프록시, 쿼리 레벨에 적용해 급격한 트래픽 폭주 방지
    • ORM 계층에서도 특정 쿼리 다이제스트를 차단할 수 있도록 개선

복제 및 스키마 변경 관리

  • 프라이머리가 모든 리플리카에 WAL 로그를 스트리밍해야 하므로, 리플리카 수 증가 시 네트워크 부하 상승
    • 계단식 복제(cascading replication) 를 Azure 팀과 협력해 테스트 중
    • 중간 리플리카가 하위 리플리카로 WAL을 전달해 100개 이상 리플리카 확장 가능성 확보
  • 전체 테이블 재작성(full table rewrite) 을 유발하는 스키마 변경은 금지
    • 5초 타임아웃 내에서 가벼운 변경만 허용, 인덱스 생성·삭제는 동시 수행 가능
    • 백필(backfill) 시에도 엄격한 속도 제한 적용

성과 및 향후 계획

  • PostgreSQL은 수백만 QPS를 처리하며, 지연 시간 수십 밀리초(p99) , 가용성 99.999% 달성
    • 지난 12개월간 SEV-0 사고는 단 한 건(ChatGPT ImageGen 출시 시 발생)
  • 남은 쓰기 중심 워크로드도 단계적으로 Cosmos DB로 이전 중
  • 계단식 복제 완성 후 리플리카 확장성과 안정성 강화 예정
  • 향후 샤딩 PostgreSQL 또는 대체 분산 시스템 도입 가능성 검토 중

Read Entire Article