Yandex új, zero-copy Protobuf formátuma, a YaFF, 3,8-szoros olvasási sebességet ígér
A Yandex új, nyílt forráskódú YaFF formátuma a Protobuf-hoz képest akár 3,8-szor gyorsabb olvasást tesz lehetővé, miközben 10-20% CPU-megtakarítást is hoz.

A Yandex közzétette a YaFF-ot, egy új, nyílt forráskódú zero-copy wire formatot, amely a Protobuf ökoszisztémájába illeszkedik. A formátum célja a szerveroldali feldolgozás sebességének növelése, miközben a meglévő .proto sémák továbbra is egyetlen igazságforrásként szolgálnak. A Yandex Tech Blog beszámolója szerint a Flat Layout elnevezésű elrendezés körülbelül 3,8-szor gyorsabban képes olvasni az adatokat, mint a FlatBuffers, és mindössze 1,2-szer lassabb egy nyers C++ structnál. (MarkTechPost)
Négy elrendezés a sebesség és rugalmasság egyensúlyáért
A YaFF négy különböző memóriaelrendezést kínál: Fixed, Flat, Sparse és Dynamic. Ezek az elrendezések a sebesség és a sémarugalmasság között teremtenek egyensúlyt. A Fixed egy egyszerű, fagyasztott sémájú struct, míg a Flat két bájtos fejlécet ad hozzá a sémaevolúció támogatásához. A Sparse meta-táblán keresztül címez meg mezőket, ideális ritka sémákhoz. A Dynamic, amely az alapértelmezett, futásidőben választ a Flat és a Sparse között, attól függően, hogy a séma engedélyezi-e a lapos igazítást. A Yandex saját reklámajánló rendszerében a YaFF használata 10-20% CPU-megtakarítást eredményezett termelési szinten.
Kapcsolódó: GPU-kernelek Pythonból
A Protobuf-parsing CPU-igényének csökkentése
A Protobuf-parsing jelentős, kétszámjegyű CPU-terhelést okozhat nagy terhelésű backendekben, ami nagy léptékben akár több ezer fizikai magot is igénybe vehet. Bár a Google FlatBuffers-e is egy népszerű zero-copy megoldás, nem kompatibilis közvetlenül a Protobuf-fal, és külön séma-karbantartást, valamint konverziós réteget igényel. A YaFF célja, hogy ezt a problémát úgy oldja meg, hogy megtartja a Protobuf szemantikáját, miközben nullára csökkenti a másolási műveleteket az olvasás során. A Yandex által végzett teljesítménytesztek szerint a Flat Layout átlagosan 9,79 nanoszekundum alatt képes olvasni egy hierarchikus adatot, míg a FlatBuffers 37,30, a Protobuf pedig 219,35 nanoszekundumot igényel. A nyers C++ struct alapértéke 8,14 nanoszekundum.
Kapcsolódó: Rust és CUDA fordítás
A YaFF bevezetése és használati esetei
A YaFF bevezetése fokozatosan történhet, egyetlen forró útvonalba integrálva, miközben a többi részen megmarad a kétirányú Protobuf konverzió. A formátum ideális olyan rendszerekhez, ahol a gyártót és a fogyasztót is mi magunk irányítjuk, mint például ajánló- és hirdetéskiszolgáló rendszerek, vagy memóriatérképezett indexek. A Yandex a YaFF-ot a GitHubon tette elérhetővé Apache 2.0 licenc alatt, C++ nyelven, v0.1.0 verziószámmal.
Kapcsolódó: AI-ügynökök programnyelve