CAP (Copyless Access Protocol)

CAP является краеугольным камнем инфраструктуры Solenopsys, определяющим формат сообщений, интерфейсов и структур данных. Этот протокол сериализации унаследован от Cap'n Proto, но переработан для эффективной работы в децентрализованной среде, представляя собой его минималистичного младшего брата.



Название "CAP" (Copyless Access Protocol) было выбрано намеренно кратким по сравнению с более длинным названием его предшественника Cap'n Proto. Такое решение продиктовано практическими соображениями - более короткое название проще писать и запоминать.

Ключевые улучшения по сравнению с Cap'n Proto

Протокол принципиально отличается от Cap'n Proto в нескольких ключевых аспектах:

  1. Отказ от случайных ID: Вместо использования случайных id, используются хеши узлов схемы, что исключает дублирование и конфликты в хранилище схем.

  2. Отказ от текстовых схем: Вместо текстового формата используется бинарный граф для более эффективного хранения и обработки схем.

  3. Генерация схем из TypeScript: Схемы генерируются непосредственно из типов TypeScript с помощью системы "organic", что делает разработку более интуитивной.

  4. Новый подход к хранению схем: Отказ от хранения схем в формате самого протокола в пользу использования CBOR для большей гибкости.

  5. Двухуровневая структура схемы:

    • Packing (упаковка): описывает формат хранения байтов данных
    • Mapping (сопоставление): связывает поля с именами функций для генерации кода
  6. Отказ от встроенного транспорта: Предоставление свободы выбора транспортного протокола.

  7. Поддержка перезаписи полей: Возможность перезаписи значений полей фиксированной длины без изменения структуры.

Схемы и генерация кода

CAP использует бинарные графы схемы которые генерируются просто на основе типов TypeScript для определения интерфейсов и типов данных. Это делает разработку интуитивно понятной для разработчиков, знакомых с языком. Бинарный граф схемы служат основой для генерации кода на любом языке программирования через настраиваемые плагины. Для генерации необходимо всего лишь указать id-hash схемы.

Отличительные черты

  • Использование хешей в место случайных id: Отсутвие дублирования и высокая надежность при хранении схем позволяет обеспечить более простую генерацию кода без конфликтов и дублирования.
  • Независимость от транспорта: Отсутствие встроенного транспортного уровня позволяет гибко использовать различные транспортные протоколы
  • TypeScript в основе: Схемы генерируются с помощью интерфейсов и типов TypeScript, что упрощает разработку
  • Строгое хранение схем: Использование CBOR сериализации для хранения схем CAP обеспечивает детерминированное хранение и валидацию на основе хешей
  • Гибкая генерация кода: Генератор кода написан на TypeScript, поддерживает множество языков и использует CLI Organic для расширяемой генерации

Применение

В инфраструктуре Solenopsys протокол CAP играет ключевую роль в обеспечении эффективного обмена данными. Его основное преимущество заключается в особом подходе к сериализации - в отличие от ProtoBuff, который выполняет полную сериализацию при получении пакета, CAP обращается к данным только в момент запроса конкретного поля. Это архитектурное решение существенно повышает производительность всей системы.

Мессенджинг и коммуникации

CAP обеспечивает многоуровневое взаимодействие компонентов системы:

  • Связь между компонентами системы
  • Обмен данными между пользовательским интерфейсом Converged (UI) и кластером Detonation
  • Коммуникация между кластером и подключенными устройствами
  • Прямое взаимодействие между UI и устройствами через WebSocket

Распределенное хранение данных

Протокол играет фундаментальную роль в файловой системе (SDFS), где он используется на всех уровнях архитектуры:

  • Хранение метаданных файловой системы
  • Управление драйверами файловой системы
  • Организация распределенного хранения данных