brec: контролируемая обратная совместимость протокола
AlexWriter 8 минут назад brec: контролируемая обратная совместимость протокола Средний 5 мин 204 Rust * Хранение данных * Высоконагруженные системы * Поисковая оптимизация * Обзор С момента последней (и вроде...
Значимый прорыв формирует отрасль ИИ: AlexWriter 8 минут назад brec: контролируемая обратная совместимость протокола Средний 5 мин 204 Rust * Хранение данных * Высоконагруженные системы * Поисковая оптимизация * Обзор С момента последней (и вроде единственной) статьи о brec прошло какое-то время, и мне кажется, что будет полезно лишний раз напомнить о проекте. Даже неожиданно для меня самого он продолжает развиваться. Пусть я пока не могу похвастаться значимым интересом со стороны сообщества, но в паре локальных проектов он уже появился.
Да, скорее как эксперимент. Тем даже лучше: можно провести, что называется, полевые испытания. Кратко напомню, в чем суть.
Технические детали
brec - это инструмент для создания бинарного протокола. Две основные сущности - это Block и Payload. Объявляются они максимально просто:use serde::{Deserialize, Serialize}; # pub struct # pub struct # # pub struct # # pub struct Все.
Теперь можно формировать "сообщение" или, если хотите, "запись", состоящую из 0-255 блоков и опционального Payload. Блоки можно комбинировать свободно: использовать как разные, так и одинаковые, в любом порядке, если это имеет смысл для вашего протокола. let packet = Packet::new( vec!
, Some(Payload::GreetingPayload( )), );Готовый пакет можно записывать в буфер, отправлять куда нужно и на другом конце декодировать обратно в типизированные структуры. Описав свои блоки и полезную нагрузку с помощью # и #, brec сделает большую часть рутинной работы:создаст глобальное перечисление Block, включающее все варианты блоков;создаст глобальное перечисление Payload, включающее все варианты полезной нагрузки;добавит к пакету, блокам и payload-данным сигнатуры и CRC-проверки целостности, если вы явно не отключили их атрибутами вроде no_crc;создаст тип Packet, который можно использовать для получения бинарного представления пакета и чтения его обратно. Но одна из особенностей brec в том, что кроме ядра протокола в нем есть набор инструментов для работы с этим протоколом на практике.
Отраслевые последствия
Это, в первую очередь, PacketBufReader и Storage. Более подробно об этих "ребятах" можно посмотреть в предыдущей статье, если интересно. Сейчас же я хочу кратко представить новый режим работы, который связан с фичей resilient.
PacketBufReader и так умеет читать "замусоренный" поток: то есть находить пакеты brec внутри массива сторонних данных. Но resilient решает другую задачу - более мягкую эволюцию протокола, когда старый reader встречает новые, еще неизвестные ему блоки или payload-данные. Представьте, что вы сделали протокол с блоками BlockA, BlockB, BlockC и payload-типами PayloadA, PayloadB.
Сообщения в системе могут выглядеть примерно так:packet: + Some(PayloadA) packet: + Some(PayloadB) packet: + NoneСпустя время вы вводите в систему BlockD и PayloadC.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





