Яндекс открыл YaFF: zero-copy для Protobuf без переписывания кода
Чтение сериализованных данных — незаметный, но постоянный налог на CPU в каждом сервисе, получающем данные по сети или с диска. Стандарт де-факто Protobuf решает задачу, но плата за удобство — дорогой парсинг. Альтернативы вроде FlatBuffers предлагают zero-copy, но требуют отказаться от экосистемы Protobuf, что на масштабе Яндекса практически невозможно.
YaFF (Yet Another Flat Format) закрывает эту дилемму: он сделан как альтернативный wire-format для существующих Protobuf-экосистем (а в перспективе — и FlatBuffers). Это значит, что можно переключить формат передачи без переписывания десятков тысяч строк кода, сохранив все схемы и типы.
В Яндекс Рекламе, где каждый из сотен тысяч запросов обрабатывает десятки тысяч объектов, YaFF уже дал экономию 10–20% CPU в крупных рантаймах. Исходники открыты — любой может взять и прикрутить к своему проекту, не меняя архитектуру.