MessagePack и Avro
Тема дорожной карты · Backend разработчик
MessagePack — бинарный формат сериализации данных, кодирующий JSON-совместимые структуры данных (строки, числа, булевы значения, массивы и словари) в компактном бинарном представлении, обычно производящем полезные нагрузки на 20–50% меньше эквивалентного JSON и десериализующем значительно быстрее. MessagePack особенно ценен в бэкенд-системах с высокопроизводительными микросервисами или клиентами с ограниченной полосой пропускания, где читаемость JSON для человека менее важна, чем скорость сериализации и эффективность передачи, — это типично для игровых бэкендов, аналитики в реальном времени и мобильных API. В Python msgpack.packb(data, use_bin_type=True) сериализует словарь в байты, а msgpack.unpackb(raw, raw=False) десериализует его; в Node.js библиотека msgpackr предоставляет аналогичные функции pack() и unpack() с поддержкой потокового режима. MessagePack органично интегрируется с Redis (который хранит и возвращает сырые байты) как эффективная кодировка для кешируемых объектов, заменяя JSON-сериализацию на меньшие ключи и более быстрый разбор при масштабировании. Хотя MessagePack лишён встроенной схемной строгости Protocol Buffers (Protobuf) или Avro, он заполняет пространство между нетипизированным JSON и полностью схемно-определёнными бинарными форматами — что делает его практической заменой JSON во внутреннем REST API или WebSocket-взаимодействии, где и клиент, и сервер находятся под управлением одной команды.
Как это работает
MessagePack и Avro — что вы шлёте по сети и как кодируете: JSON (текст, читаем, повсеместный), Protobuf (бинарь, требует схему, дефолт gRPC), MessagePack (бинарь, JSON-like, меньше), CBOR (бинарь, IoT-friendly), XML (legacy, многословный), Avro (schema-evolving, big-data экосистема). Для конфига: YAML (удобно писать, хрупкие отступы), TOML (яснее YAML), JSON (точно, но уродливо для человека). Формат времени: ISO 8601 / RFC 3339 с явной таймзоной.
Когда применять
JSON — для публичных REST API: клиенты на любом языке его читают. Protobuf — для high-traffic internal RPC (меньше, быстрее, schema-versioned). Avro — для аналитических пайплайнов (Kafka + schema registry). Всегда указывайте кодировку (Content-Type: application/json; charset=utf-8). Datetime — UTC + ISO 8601, локаль клиент сам выставит. Никогда locale-зависимые числовые форматы (1,000 vs 1.000).
Типичные ошибки
Ловушки MessagePack и Avro: тихо храните локальное время без таймзоны (DST-баги, off-by-N-часов навсегда); JSON без схемы — клиенты гадают, какие поля есть (OpenAPI / JSON Schema чинит); float для денег (используйте копейки как integer или decimal-тип); BOM-prefixed UTF-8 ломает парсеры; вера в порядок ключей JSON (нет гарантии).