Iparág

Mesterséges intelligenciával generált szöveg

Hogyan skálázta az OpenAI a Habitat tárolási platformot egymilliárd ChatGPT-felhasználóhoz

A cikk főszereplője az OpenAI és annak online tárolási platformja, Habitat, amelyet Pythonból indítottak és később szolgáltatásként üzemeltettek.

Hogyan skálázta az OpenAI a Habitat tárolási platformot egymilliárd ChatGPT-felhasználóhoz

Az OpenAI bemutatja, hogyan alakult a Habitat nevű online tárolási platform egyszerű Python klienskönyvtárból globális, üzemkritikus szolgáltatássá, amely ma heti szinten több mint egymilliárd felhasználót szolgál ki. A Habitat több mint 70 millió kérés/s másodpercnyi terhelést kezel, több mint 500 petabájtnyi adathoz fér hozzá, és közel 40 földrajzi régiót támogat.

Kiindulópont: egyszerű Python könyvtár

A Habitat 2024 közepén indult, célja az volt, hogy a termékfejlesztőknek ne kelljen az adatbázis-kezelés részleteivel foglalkozni. Kezdetben egy kisméretű Python klienskönyvtár volt, amely ChatGPT szerverével kommunikált, és az Azure Cosmos DB-re leképezett alapvető műveleteket végzett. A könyvtár elrejtette a routingot, jogosultságkezelést, titkosítást, szerializációt és connection pooling részleteit a termékcsapatok elől, így egyszerűbbé tette az adattárolást és -lekérést.

Miért vált szolgáltatássá a Habitat

A gyors növekedés és a szolgáltatások számának emelkedése miatt 2025 közepére a kliensoldali megközelítés korlátokká vált: visszafelé kompatibilis protokollváltoztatások bevezetése nehézkessé és törékennyé vált, mivel a változások koordinálása több tucat szolgáltatás között napokat vett igénybe. Egy példa erre a régiós replikaátvitel bevezetése volt, amelyhez feature-flag alapú kliensoldali routing kellett — a több csapat általi telepítés során egy visszagörgetett kliens miatt végül kiesés történt. Ennek csökkentésére a csapat a Habitatot egy központi szolgáltatássá alakította át, így egyetlen ponton lehetett kezelni a telepítéseket, megfigyelést és platformfejlesztéseket.

Központi szolgáltatás előnyei: üzemeltetés és biztonság

A szolgáltatásként futó Habitat központosított telepítést, megfigyelhetőséget és gyorsabb javítási ciklusokat tett lehetővé. Emellett egyetlen helyről tudják érvényesíteni a hozzáférés-vezérlési szabályokat, audit-logolást végezni és korlátozni a közvetlen hozzáférést az Azure Cosmos DB-hez — ez fontos szerepet játszik a felhasználói adatok védelmében.

Miért maradt Python hosszabb ideig?

A csapat tudta, hogy Python szolgáltatásként teljesítményben alulmaradna más nyelvekhez képest (nagyobb hálózati késleltetés, magasabb CPU és memóriaigény), és hogy hosszú távon átírás szükséges lesz. Mégis vállalták ezt a technikai adósságot, mert elsődleges céljuk akkor a termékfejlesztők blokkolásának megszüntetése és a platform stabilitásának elérése volt. Python gyors fejlesztést tett lehetővé, és a csapat úgy kalkulált, hogy később a fejlettebb belső kódoló modellek (Codex, GPT) megkönnyítik az átállást.

A Python-specifikus kihívások: asyncio és tail-latenciák

Pythonnál az egyik fő probléma az eseményciklus (asyncio) ütemezési késleltetése volt, különösen akkor, ha a szolgáltatás I/O mellett sok CPU-intenzív feladatot is végzett (routing, tömörítés, titkosítás, checksumming, health checking, shadowing, hedging). Bár asyncio párhuzamos I/O-t tesz lehetővé, a GIL miatt a CPU-paralelizmus korlátozott, és egyetlen szálon egyszerre csak egy coroutine használhatja a CPU-t. Nagy terhelésnél a háttérfeladatok és költséges feldolgozások ütemezési csúszást okoztak, ami száz milliszekundumoktól akár másodpercekig tartó p99 és ennél magasabb késleltetéseket eredményezett.

A Habitatban ezért fontosnak találták az asyncio loop foglalt állapotának folyamatos figyelését. Időzített háttérfeladatoknál rögzítették az elvárt és a tényleges futási idő közti eltérést, így valós időben mérték az ütemezési késést.

A taktika az lett, hogy egy-egy processz csak kevés egyidejű kérést szolgáljon ki, és ehelyett nagy mértékben horizontálisan skálázzanak — sok Python munkásprocesszt indítva.

Konkrét tuningok: Statsig és konfigurációs parserek

Egy élő szolgáltatási CPU-profilozásból kiderült egy konkrét gyökérok: a Statsig konfigurációk percenként frissültek jitter nélkül, és a konfiguráció minden produkciós szabályt tartalmazott. Ha egy podban több (akár 8) Python processz futott, akkor minden percben mind a processzek elakadtak, hogy egy óriási JSON konfigurációt parse-oljanak, ami rontotta a folyamatos késleltetést. A megoldás: kisebb, célzott konfigurációk deployolása, a frissítési intervallum növelése és jitter hozzáadása a háttérfeladatokhoz.

Terheléselosztás és kapcsolatpoolozás

A helyes terheléselosztás fontos az asyncio-késés kordában tartásához. A kliensoldali connection pooling problémákat okozott: egy kliens, amely sok egyidejű kérést indít, kevés szerverkapcsolatot használhat, így a terhelést csak néhány processzre koncentrálja. Egyes szerverprocesszek 5–10× több egyidejű kérést kaptak az átlagnál, ami metastabil degradációhoz vezetett: egy túlterhelt podot valamilyen mechanika egyre több forgalommal sújtott.

Vizsgálatuk szerint a Python aiohttp TCPConnector alapértelmezett LIFO (utolsó vissza, első újra) kapcsolatújrafelhasználása súlyosbította a problémát: a lassabb szerverekről később visszaérkező kapcsolatok kerültek újra gyakrabban felhasználásra, így a terhelés egyre inkább rájuk koncentrálódott. A pool FIFO-ügyesítésre történő átkapcsolása megszüntette a visszacsatolási hurkot és csökkentette a varianciát.

Ma az OpenAI infrastruktúrájában elsősorban Istio-t és Envoy-t használnak a kapcsolatok kezelése és okosabb szerver-oldali terheléselosztás biztosítására.

Kapcsolati terhelés és Envoy szerepe

Az egyre több Python process könnyen túlterhelhette a downstream erőforrásokat („thundering herd”), például napi deploymentek connection-ciklizálása CPU-lomha állapotot vagy NAT gateway telítődést okozhatott. Ennek csillapítására Envoy-t használnak HTTP/1→HTTP/2 upgradekhez, multiplexeléshez, connection poolinghoz, és központi helyet ad rate limitingnek és circuit breaker-eknek.

API-dizájn: NoSQL egyszerűség előnyben

A Habitat API tudatosan kiszámítható és korlátozott: nem engedélyeznek tetszőleges SQL-lekérdezéseket, helyette egy egyszerű NoSQL API-t kínálnak, ügyfél által definiált objektum- és él-típusokkal. Ez a megközelítés előnyös, mert a kiszámítható, konstans munkaigényű kérések könnyebb skálázást és kevesebb működési meglepetést eredményeznek. A komplex, olvasás-intenzív felhasználásokra Rockset-alapú másodlagos offline nézetet biztosítanak, amelyet change data capture (CDC) segítségével közel valós időben táplálnak.

Ez a kialakítás többletterhet jelent a klienscsapatok számára (Rockset saját példányokat kell skálázniuk), de izolálja az online tárolót az analitikai és keresési munkaterhelésektől.

A Python utáni lépés: Rust átírás

A Python megtartása egy évig lehetővé tette, hogy a csapat a növekedés közben a legégetőbb problémákat oldja meg. Ugyanakkor a Habitat a növekedés közben a második legnagyobb szolgáltatássá vált core-szám alapján az OpenAI-nál (és negyedik az Envoy-lábnyom tekintetében). A Python csúcsidőben több mint 20 millió kérés/s másodpercet szolgált ki.

2026 Q2-ben két mérnök, Codex és GPT‑5.5 segítségével teljesen átkódolták a szolgáltatást Rustba. A Rust-alapú szolgáltatás ma a termelési kérések 95%-át kezeli; a Python verziót a következő hetekben teljesen kivonják. Méréseik szerint a Rust szolgáltatás 6× jobb CPU-hatékonyságot és 15× jobb memóriahatékonyságot ér el a Python verzióhoz képest, valamint jelentősen alacsonyabb átlag- és faroklatenciákat mutat.

Következő lépések és folytatás

A cikk az első része egy két részes sorozatnak. A második rész részletesen bemutatja majd a többbérlős megbízhatóságot nagy skálán, a többrétegű olvasási optimalizációs stratégiát, és az Azure Cosmos DB-vel való partnerség skálázását, amely a példa nélküli igények megbízható kezelését biztosítja.

Karrierlehetőség

Az OpenAI csapata OLTP rendszereken dolgozó mérnököket keres; az érdeklődők számára nyitott pozíció elérhető a cégnél.