Если вам надоело греть воздух десериализацией протобуфов, а переписывать все ради FlatBuffers нет сил, этот пост для вас. Недавно Яндекс выложил в опенсорс исходники YaFF (Yet another Flat Format) - альтернативного wire формата для Protobuf, поддерживающего zero‑copy чтение.
Для сильных духом есть статья на хабре - там автор рассказывает буквально всю подноготную и объясняет, почему иного пути нет. Но, вкратце, несколько важных тезисов таковы:
• постоянная трансляция данных между хранилищем, рантаймом и аналитикой - дорого и неудобно (куча конвертеров и цпу-баунд операций);
• нельзя забывать про эволюцию форматов ("добавить полюшко" превращается в кросс‑командный квест);
• FlatBuffers - это не Protobuf без десериализации (нужно синхронизировать схемы, разные api, ручное перекладывание полей);
• источником истины остаётся обычный.proto‑файл, интерфейсная и шаблонная совместимость с Protobuf (дешевое внедрение);
• несколько стратегий хранения - flat layout для плотных данных, sparse layout для разреженных, dynamic сам подбирает оптимальный вариант;
Мы привыкли воспринимать Protobuf‑экосистему как монолит: proto‑схема, wire format и парсинг. YaFF разделяет эти слои. Схемы остаются контрактом между командами и сервисами, а Protobuf‑like API остается привычным интерфейсом для разработчика. Сериализованное представление становится отдельным бэкендом, который можно выбирать под конкретную нагрузку. Это ли не чудо?