Who let the dogs out? Yaff! Если вам надоело греть воздух десериализацией протобуфов, а переписывать все ради 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 остается привычным интерфейсом для разработчика. Сериализованное представление становится отдельным бэкендом, который можно выбирать под конкретную нагрузку. Это ли не чудо?