OpenAI Habitat가 10억 명 이상의 ChatGPT 사용자를 지원하기 위해 확장
TL;DR
OpenAI는 Habitat 저장소 플랫폼이 이제 초당 7000만 건 이상의 요청을 처리하고, 500PB 이상의 데이터를 저장하며, 주간 10억 명 이상의 ChatGPT 사용자를 지원한다고 발표했다. 이는 단순한 Python 클라이언트 라이브러리에서 시작해 분산 서비스로 진화한 후, 효율성을 위해 Rust로 재작성 중인 시스템이다.
Habitat의 성장 개요
Habitat는 현재 초당 7000만 건 이상의 요청을 처리하고, 약 40개 지역에서 10억 명 이상의 주간 사용자를 서비스하며, 500PB 이상의 데이터를 저장한다. 이 시스템은 2024년 중반에 Azure Cosmos DB 기반의 얇은 Python 클라이언트 라이브러리로 시작해, 복잡한 글로벌 분산 저장소 서비스로 성장했다.
라이브러리 대신 서비스로 전환한 이유
수십 개의 서비스 간 프로토콜 변경을 조율하는 것이 취약해졌고, 이를 해결하기 위해 중앙 집중식 서비스로 전환했다. 클라이언트 측 라이브러리는 기능 플래그 배포, 샤프팅, 다중 지역 라우팅 로직을 필요로 했으며, 이는 조율에 며칠이 걸리고 여전히 장애를 유발했다. 저장소 로직을 중앙 집중화함으로써 OpenAI는 배포, 관찰성, 보안, 정책 강제의 단일 지점을 확보할 수 있었다.
아키텍처 선택과 트레이드오프
Python 서비스를 전략적 침투로 활용
- Habitat를 Python 서비스로 운영하면 더 높은 지연 시간과 CPU/메모리 비용이 발생하지만, 핵심 API와 플랫폼 안정성을 빠르게 제공할 수 있었다.
- OpenAI는 성능 희생을 감수하고, 향후 Codex/GPT 기반 도구가 이후 마이그레이션을 수월하게 할 것이라 기대했다.
Python에서 꼬리 지연 시간 관리
- Asyncio 스케줄링 지연이 p99+ 지연 시간의 주요 원인이었다. CPU 집약적인 작업(라우팅, 압축, 암호화, 상태 확인)이 이벤트 루프를 차단했기 때문이다.
- 이벤트 루프 지연을 모니터링하고, 각 프로세스당 동시 요청 수를 제한함으로써 워커 프로세스의 수평 확장을 대규모로 강제했다.
기능 플래그 구성의 병목 현상
- 큰 Statsig 구성 파일의 주기적 JSON 파싱으로 인해 파드 내 모든 워커가 분당 한 번씩 정지했다.
- 해결책: 구성 크기 축소, 새로 고침 주기 증가, 백그라운드 작업에 지터 추가.
연결 풀 로드 밸런싱 문제
- aiohttp의
TCPConnector에서 기본 LIFO 재사용은 메타안정 피드백 루프를 생성했다: 느린 파드가 연결을 나중에 반환했고, 이로 인해 후속 요청이 다시 그 파드로 라우팅되어 과부하를 악화시켰다. - FIFO 재사용으로 전환함으로써 루프를 깨뜨리고, 각 프로세스의 활용도 변동성을 줄였다.
- 이제 Envoy/Istio가 연결 풀링, HTTP/2 멀티플렉싱, 중앙 집중식 요청 제한을 제공하여 천둥의 무리 현상을 방지한다.
제약된 NoSQL API가 확장성의 핵심
Habitat는 무제한 SQL 대신 간단한 NoSQL API를 제공함으로써 요청 비용을 예측 가능하게 유지한다. 클라이언트는 객체와 엣지를 정의(위의 TAO를 영감으로 함)하지만, 무제한 쿼리를 실행할 수 없으며, 이는 비용이 큰 테이블 스캔을 방지하고 서비스의 오용을 보호한다. 복잡한 분석 쿼리는 CDC 스트림을 통해 Rockset로 이관된다.
Python에서 Rust로의 마이그레이션
2026년 2분기, OpenAI는 Habitat를 Rust로 재작성하여 현재 생산 트래픽의 95%를 처리하고 있다. Rust 서비스는 CPU 효율성이 6배, 메모리 효율성이 15배 향상되었으며, 평균 및 꼬리 지연 시간이 크게 감소했다. Python 구현체는 최대 초당 2000만 건의 요청을 처리했으나, 곧 폐기될 예정이다.
미래 방향 (파트 II)
- 파트 II에서는 다중 테넌시 신뢰성, 읽기 성능 계층화, 500PB 저장 레이어를 뒷받침하는 Azure Cosmos DB와의 협력에 대해 자세히 다룰 예정이다.
- 지속적인 작업으로는 연결 피드인 최적화, 회로 차단, 그리고 현재 연간 10배 성장 추세를 넘어서는 사용자 증가를 수용하기 위한 Rust 서비스 확장이 포함된다.
핵심 통찰
- Habitat의 진화는 빠르게 움직이는 제품 조직이 개발자 속도(파이썬 서비스)를 우선시하면서도 장기적인 효율성(러스트 재작성)을 계획할 수 있음을 보여준다.
- 고처리량 저장소 서비스를 확장할 때는 API 표면의 엄격한 제어, 이벤트 루프 모니터링, 적절한 연결 풀 정책이 필수적이다.
- 저장소 로직을 중앙 집중화하면, 대규모 글로벌 사용자 기반에서 보안, 관찰성, 빠른 기능 롤아웃을 통합적으로 제공할 수 있다.