CAP (Copyless Access Protocol)
CAP является краеугольным камнем инфраструктуры Solenopsys, определяющим формат сообщений, интерфейсов и структур данных. Этот протокол сериализации унаследован от Cap'n Proto, но переработан для эффективной работы в децентрализованной среде, представляя собой его минималистичного младшего брата.
Название "CAP" (Copyless Access Protocol) было выбрано намеренно кратким по сравнению с более длинным названием его предшественника Cap'n Proto. Такое решение продиктовано практическими соображениями - более короткое название проще писать и запоминать.
Ключевые улучшения по сравнению с Cap'n Proto
Протокол принципиально отличается от Cap'n Proto в нескольких ключевых аспектах:
Отказ от случайных ID: Вместо использования случайных id, используются хеши узлов схемы, что исключает дублирование и конфликты в хранилище схем.
Отказ от текстовых схем: Вместо текстового формата используется бинарный граф для более эффективного хранения и обработки схем.
Генерация схем из TypeScript: Схемы генерируются непосредственно из типов TypeScript с помощью системы "organic", что делает разработку более интуитивной.
Новый подход к хранению схем: Отказ от хранения схем в формате самого протокола в пользу использования CBOR для большей гибкости.
Двухуровневая структура схемы:
- Packing (упаковка): описывает формат хранения байтов данных
- Mapping (сопоставление): связывает поля с именами функций для генерации кода
Отказ от встроенного транспорта: Предоставление свободы выбора транспортного протокола.
Поддержка перезаписи полей: Возможность перезаписи значений полей фиксированной длины без изменения структуры.
Схемы и генерация кода
CAP использует бинарные графы схемы которые генерируются просто на основе типов TypeScript для определения интерфейсов и типов данных. Это делает разработку интуитивно понятной для разработчиков, знакомых с языком. Бинарный граф схемы служат основой для генерации кода на любом языке программирования через настраиваемые плагины. Для генерации необходимо всего лишь указать id-hash схемы.
Отличительные черты
- Использование хешей в место случайных id: Отсутвие дублирования и высокая надежность при хранении схем позволяет обеспечить более простую генерацию кода без конфликтов и дублирования.
- Независимость от транспорта: Отсутствие встроенного транспортного уровня позволяет гибко использовать различные транспортные протоколы
- TypeScript в основе: Схемы генерируются с помощью интерфейсов и типов TypeScript, что упрощает разработку
- Строгое хранение схем: Использование CBOR сериализации для хранения схем CAP обеспечивает детерминированное хранение и валидацию на основе хешей
- Гибкая генерация кода: Генератор кода написан на TypeScript, поддерживает множество языков и использует CLI Organic для расширяемой генерации
Применение
В инфраструктуре Solenopsys протокол CAP играет ключевую роль в обеспечении эффективного обмена данными. Его основное преимущество заключается в особом подходе к сериализации - в отличие от ProtoBuff, который выполняет полную сериализацию при получении пакета, CAP обращается к данным только в момент запроса конкретного поля. Это архитектурное решение существенно повышает производительность всей системы.
Мессенджинг и коммуникации
CAP обеспечивает многоуровневое взаимодействие компонентов системы:
- Связь между компонентами системы
- Обмен данными между пользовательским интерфейсом Converged (UI) и кластером Detonation
- Коммуникация между кластером и подключенными устройствами
- Прямое взаимодействие между UI и устройствами через WebSocket
Распределенное хранение данных
Протокол играет фундаментальную роль в файловой системе (SDFS), где он используется на всех уровнях архитектуры:
- Хранение метаданных файловой системы
- Управление драйверами файловой системы
- Организация распределенного хранения данных