YaFF er et alternativt wire‑format for Protobuf‑skemaer, implementeret i C++ og udgivet som v0.1.0 under Apache 2.0. Skemaerne i .proto forbliver styrende; det er den fysiske repræsentation i hukommelsen, der ændrer sig. Ifølge Yandex muliggør det zero‑copy reads og skærer parse‑tid i mange backends—relevant i AI‑pipelines, hvor p95 og p99 er styrende for kapacitet og omkostninger.
Hvad Yandex faktisk har udgivet
Yandex beskriver YaFF (Yet another Flat Format) som open source under Apache 2.0 og p.t. skrevet i C++. Versionen er v0.1.0. YaFF erstatter Protobufs wire‑format, ikke Protobuf som schema og værktøjsøkosystem. .proto forbliver single source of truth, mens memory‑layoutet afhænger af valgt strategi. Det er Yandex’ egne udsagn fra den offentlige meddelelse.
Der loves tovejskonvertering mellem YaFF og almindelige Protobuf‑meddelelser for gradvis adoption: flyt enkelte hot paths til YaFF og konverter ved grænserne, mens resten fortsætter på standard Protobuf. Det passer med eksisterende værktøjskæder baseret på protoc, linters, CI og test.

Hvordan YaFF virker teknisk
Kernen er zero‑copy læsninger: feltværdier ligger i en buffer i et layout, der kan aflæses direkte uden parse‑fase, når skemaet tillader det. Der skelnes mellem skema og fysisk hukommelseslayout. API’et ligner en genereret proto‑lignende C++‑grænseflade, men under motorhjelmen hentes felter direkte fra bufferen.

Yandex beskriver fire layouts, der balancerer skemaevolution og hastighed: Fixed, Flat, Sparse og Dynamic. Fixed er tæt pakket som en struct uden header og forudsætter frosset skema. Flat tilføjer en lille header og begrænset skemaevolution, men holder branch‑count og læsedybde lav. Sparse bruger en metatabel til spredte felter for friere evolution til gengæld for flere reads og grene. Dynamic er standard og vælger Flat eller Sparse ved kørselstid afhængigt af skemaets behov. I praksis kan en skemaændring dermed flytte performanceprofilen mellem klasser.
Yandexs performancepåstande
I Yandex’ egne benchmarks læser Flat‑layout hot data ca. 3,8× hurtigere end FlatBuffers og ca. 22× hurtigere end Protobuf i et bestemt hierarkisk scenarie. Samtidig ligger læsehastigheden inden for ca. 1,2× af en rå C++‑struct. Testene rapporteres som median nanosekunder pr. læs på en AMD EPYC 7713, kompileret med Clang 20.1.8 og kørt med google\/benchmark i Release. Tallene er Yandex’ egne og bør læses med det forbehold.
Hvor det betyder noget i praksis
Hvis læsefordelen holder, er oplagte gevinster i AI‑stakken: model serving, low‑latency feature lookup og streaming‑gateways, hvor Protobuf‑parsing ofte ligger i hot loops. Her prioriteres p95\/p99, og en kortere parse‑sti kan frigive CPU til throughput eller reducere omkostninger.
Mål på: end‑to‑end latency (median og p95\/p99), CPU pr. request og pr. node, memory footprint (peak under load), allocation‑mønstre og cache‑adfærd (via fx perf eller eBPF). Med bindings i spil bør man også følge GC\/allocator‑interaktion. Det afgør, om man henter få eller tocifrede procenter.

Implementerings- og integrationsudfordringer
Tovejskonvertering hjælper adoption, men koster i grænserne; den overhead skal måles. Skemaevolution kan skubbe layoutvalg fra Flat til Sparse og ændre læseomkostninger—governance om feltændringer bliver vigtigere. Build og tooling er et reelt spørgsmål: v0.1.0 er C++‑centreret, så polyglotte miljøer får brug for wrappers eller konverteringslag. Observability og debugging ændrer sig også: færre parse‑trin, men større afhængighed af memory‑layout. Hvad ender i crash dumps, og hvordan inspiceres buffers menneskeligt? Det er ikke udfoldet i det offentlige materiale.
Risici og begrænsninger
Mangler: uafhængige benchmarks på andre CPU‑arkitekturer og med ikke‑Yandex‑workloads; dokumenteret multi‑language support (v0.1.0 nævner kun C++); erfaringer med corner cases ved skemaevolution; debug‑oplevelse og værktøjer; samt sikkerhed og validering af malformerede payloads i et direkte memory‑layout. De emner er ikke behandlet i det offentlige materiale og kræver yderligere test.

Hvordan teams bør validere YaFF
Kør en fokuseret PoC på en læsetung hot path. Definér succeskriterier—fx ≥10% CPU‑reduktion i p95, uændret fejlrates og ingen regressions i end‑to‑end KPI’er. Hold baseline stabil og mål både med syntetiske tests og replay af rigtige trafikspor.
Byg en test‑suite, der dækker skemaevolution, fejlindsprøjtning og boundary cases. Instrumentér med wall‑clock, cycles per op, cache miss rate og allocator‑events. A\/B i staging og derefter forsigtig canary i produktion, hvis signalerne er klare.

Konkrete målepunkter i PoC
- p50, p95 og p99 latency for endpoint eller pipeline—både end‑to‑end og lokalt omkring parsing
- CPU pr. request og total CPU i peak—før og efter
- RSS og peak memory samt allocation rate og fragmentering
- Fejlmode ved malformed input—valideringstid og error propagation
- Stabilitet ved skemaevolution og migrationsplaner
Konsekvenser for leverandører og open source‑landskabet
FlatBuffers og Cap’n Proto leverer også zero‑copy, men kræver egne IDL’er og toolchains. Det giver ofte dobbelt skema‑vedligehold og manuelle konverteringer. YaFFs påstand er at bevare Protobuf‑semantik og API‑lignende ergonomi og blot udskifte det fysiske layout. Hvis det holder, kan valget tippe mod at blive på Protobuf‑skemaer og kun skifte wire‑format på udvalgte hot paths. På kort sigt kræver det dog sprogbindings, dokumenteret tooling og uafhængige benchmarks. På mellemlang sigt kan det presse FlatBuffers og Cap’n Proto dér, hvor Protobuf allerede er governance‑kernen.
Konklusion og anbefaling
YaFF er teknisk interessant: open source, Apache 2.0, Protobuf‑kompatibelt fokus på server‑side performance. De rapporterede gevinster er store nok til at retfærdiggøre en målrettet PoC på de varmeste stier i AI‑platforme og realtidsdatapipelines. Det er samtidig v0.1.0 og C++‑centreret med åbne spørgsmål om sprogstøtte, debug og sikkerhed. Anbefalingen er enkel: test hurtigt og disciplineret. Hvis profilerne flytter sig markant, så gå videre; hvis ikke, så luk ned og brug tiden andetsteds.
Bagerst: Kilder og reproducérbarhed
Alle tekniske påstande om YaFF—licens, sprog, version, layouts, tovejskonvertering, benchmarks og produktionserfaring—stammer fra Yandex’ offentlige materiale og den refererede artikel. Benchmark‑setup ifølge Yandex: AMD EPYC 7713, Clang 20.1.8 og google\/benchmark i Release. Alle performance‑tal her er Yandex’ egne og bør reproduceres i egne miljøer. Indhent gerne direkte repo‑link fra Yandex for reproducerbarhed og kør deres benchmark‑suite på jeres egne workloads.
- Yandex’ annoncering af YaFF med tekniske detaljer og benchmarks, MarkTechPost gengivelse
- YaFF benchmarkdokumentation med adgangstider og testopsætning