В цифровую эпоху приватность и надёжность хранения данных важны как никогда.
Сетевое разделение и недоверенные посредники ломают взаимодействие: санкции, ковровые блокировки, атаки на инфраструктуру, глухомань.
Владельцы серверов владеют данными: могут их свободно читать, сливать, менять, удалять.
Наблюдается кризис доверия к софту и запрос на импортозамещение.
Техно-гильдия Giper.Dev приняла этот вызов, и вот что у нас получилось:
Свободные стандарты
MarkedText — разметка текста
Tree — сам себе AST
HARP — β графовый REST API
UCF — компактный юникод
VaryPack — компактные структуры
Свободные реализации
MAM — экосистема кода
mol — экосистема модулей
HyOO — экосистема $mol приложений
Giper Baza — β реактивная платформа
Giper Web — α экосистема Web4-сервисов
Далее мы пробежимся по эволюционному пути Гипер технологий, подсветим типичные проблемы на каждом уровне, расскажем про свои оригинальные подходы к их решению, и пофантазируем о светлом будущем, как его видим мы.
Видео запись
Это — слайды с 22 конференции разработчиков свободных программ. Можете глянуть видео запись:
Или читать далее, как статью…
Дмитрий Карловский

|
Программист, дизайнер, мечтатель 30 лет в разработке … из них 20 в вебе, и 10 в оупенсорсе Библиотеки, Фреймворки, Экосистемы … Cтатьи, Видео, Митапы, Сообщества Яндекс, Газпром, Дойче Банк, 1С |
MAM управляет Абстрактными Модулями
Своя модульная система, основанная на соглашениях, форсирующих лучшие практики.
Абстрактный Модуль — это просто директория с модулями на разных языках.
/acme/taxi/map/
map.ts — программная логика
map.css — каскадные стили
map.glsl — шейдеры
map.view.tree — композиция компонент
MAM: Разрешение циклических зависимостей
Зависимости определяются не импортами, а по фактическому использованию имён в коде.
// /my/store/local/local.tsclass $my_store_local extends $my_store {}// /my/store/store.tsclass $my_store extends $my_object {static default() {return new $my_store_local}}
Сборщик учитывает приоритет зависимостей, чтобы разрезать циклы в самых слабых местах, что гарантирует корректный порядок файлов.
/my/object
/my/store
/my/store/local
MAM: Соответствие имени и расположения
$acme_taxi_map => /acme/taxi/map
/acme/taxi/map => $acme_taxi_mapГлобально уникальное имя
Понятная прикладная семантика
Явная иерархия владения кодом
Имя в ментальной модели
Токен в нейросети
Стабильная привязка стилей
Семантичная привязка аналитики
Тэг в сообщении коммита
Ключевое слово в поиске
MAM: Множественные слои сборки на основе тэгов
Теги в менах файлов как теги слоёв:
web.js =
/mol/store/local/local.web.ts
/acme/taxi/app/app.tsweb.test.js =
/mol/test/test.ts
/mol/store/store.test.ts
/mol/store/local/local.test.ts
node.js =
/mol/store/local/local.node.ts
/acme/taxi/app/app.tsnode.test.js = node.js +
/mol/test/test.ts
/mol/store/store.test.ts
/mol/store/local/local.test.ts
Фрактальные тесты страхуют друг друга и быстро исполняются с разными уровнями изоляции.
MAM: VerLess не ломает обратную совместимость
Есть только одна версия — актуальная, а если хочется сломать API, то создаётся новый модуль, что позволяет им сосуществовать.
Было старое API
/my/schema1000 SLOC
Новое API у старого кода
/my/schema1000 SLOC
/my/schema2100 SLOC
Старое API у нового кода
/my/schema100 SLOC
/my/schema21000 SLOC
Это даёт безболезненные автоматизированные обновления, плавные миграции и концентрацию усилий всего сообщества на актуальном коде, вместо поддержки кучи устаревших версий в разных комбинациях.
MAM: Фрактальная организация репозиториев
Мы берём всё лучшее из монорепо и полирепо миров: плавная фрактальная декомпозиция репозиториев без изменения API.
В корне только неймспейсы вендоров:
/
./.meta.tree
./giper => giper.git
./acme => acme.git
Вендор у себя полностью контролирует организацию своих репозиториев. Типичный подход — неймспейсы проектов:
/acme
./acme.meta.tree
./taxi => taxi.git
./foto => foto.git
Если какой-то проект разрастается, то легко выделить подпроект в отдельный репозиторий, не меняя имён и не ломая обратную совместимость. Сборщик сам выкачивает репозитории по мере необходимости.
/acme/taxi
./map
./pay/acme/taxi
./taxi.meta.tree
./map => map.git
./pay
Подробнее о MAM

Tree — сам себе AST
Tree — простой формат представления абстрактных синтаксических деревьев в читаемой форме, как основа для различных прикладных языков.
|
|
XML |
JSON |
YAML |
TOML |
Tree |
|
Размер в читаемом виде |
195% |
140% |
125% |
110% |
100% |
|
Сложность синтаксиса |
90 |
30 |
210 |
90 |
10 |
|
Однозначность синтаксиса |
✅ |
✅ |
❌ |
✅ |
✅ |
|
Удобочитаемость |
❌ |
❌ |
✅ |
✅ |
✅ |
|
Не нужно экранирование |
❌ |
❌ |
❌ |
❌ |
✅ |
|
Точные координаты узлов |
❌ |
❌ |
❌ |
❌ |
✅ |
|
Поточная обработка |
❌ |
❌ |
✅ |
✅ |
✅ |
|
Расширяемая модель данных |
✅ |
❌ |
✅ |
❌ |
✅ |
|
Широкая распространённость |
✅ |
✅ |
✅ |
❌ |
❌ |
Его невозможно плохо отформатировать и при этом он куда компактней альтернатив.
Разные Tree языки на базе единого формата
Из XML позаимствовано разделение на единый формат и множество языков, что позволяет легко создавать свои языки, используя единую инфраструктуру.
! doctype htmlhtmlheadmeta @ charset \utf-8script @ src \web.jsbodyh1 \Hello & Byep \Forget < and >
server port 8000clientname \Client1address \192.168.1.100clientname \Client2address \192.168.1.101
Грамматика Tree на grammar.tree
Вот все 10 паттернов грамматики формата на языке формальных грамматик:
tree .optional .list_of lineline .sequence.optional indent.optional nodesnew_linenodes .sequence.optional .list_of name.with_delimiter space.optional data.with_delimiter spacename .list_of .byte.except special
data .sequencedata_prefix.optional .list_of .byte.except new_linespecial .any_ofnew_linedata_prefixindentspacenew_line .byte \0Aindent .list_of .byte \09data_prefix .byte \5Cspace .list_of .byte \20
Tree код — это буквально список строк из опциональных отступов табами, опционального списка имён разделённых пробелами и опциональными сырыми данными без экранирования до конца строки, предварёнными бэкслешем.
Подробнее о Tree

На диаграмме вы видите, как мы из 2 файлов сгенерировали 1 путём 3 трансформаций, которые что-то вырезали, что-то добавили, а что-то перемешали. Но привязка к исходным кодам никуда не потерялась, так что в отладчике будут отображаться исходные коды, а не сгенерированные.
$mol — реактивный конструктор
Фактически фреймворк $mol — это просто множество готовых компактных модулей, где каждый делает лишь одну вещь, но делает её хорошо и легко стыкуется с остальными. В энциклопедии можно найти много статей об инновациях в его архитектуре.

$mol_view — гипер настраиваемые виджеты
Свои компоненты создаются комбинацией и глубокой кастомизацией существующих: настраивается как визуал, так и поведение, и даже компоновка.
Вот весь код компонента профиля пользователя, который берёт имя из модельки и рисует форму его редактирования и вывода актуального результата:
$acme_profile $mol_pageUser $my_username? => name?sub /<= Edit $mol_stringvalue? <=> name?<= View $mol_viewsub / <= name
А вот весь код приложения, которое рендерит профиль, подменяя модельку и выводя в нужно месте дополнительные данные.
$acme_taxi_app $mol_book2pages /<= Profile $acme_profileUser <= User $my_taxi_usersub /^<= Role
Возможно всё это благодаря тому, что каждое имя тут — это не просто свойство класса, а точка расширения, которую можно кастомизировать. Этакие автоматические слоты на максималках.
$mol: Гарантированная отзывчивость
Другая уникальная фича — возможность вывалить кучу данных в сложной вёрстке и не париться над оптимизациями, так как всё будет летать благодаря…
То, что не попадает в видимую область не то что рендериться не будет, а даже и загружаться. Возможно всё это благодаря…
$mol_wire — эффективная реактивная система
Реактивная система как связующие артерии даёт эффективную динамическую коммуникацию.
В отличие от других реактивных систем, наша понимает не только зависимости по данным, но и учитывает владение.

В этом примере, мы переключились с поста, к которому у нас есть доступ, на пост, к которому доступа нет, и вместо того, чтобы пытаться обновить отображение, получив ошибки, $mol_wire сперва поймёт, что отображение нужно вообще уничтожить.
Наша реактивная система сама контролирует время жизни объектов: на лету лениво создаёт зависимости и автоматически их уничтожает разрушая ссылки на них. Это делает GC не нужным, и это интересный вектор исследования для компилируемых языков без GC.
VaryPack — компактные произвольные структуры
Бинарная компактная упаковка произвольных структур данных без ломающих совместимость расширений для дедупликация значений. Базово поддерживает лишь юниты, числа, ссылки, строки, массивы и кортежи, а остальные типы уже представляются через них.

VaryPack: прямая и обратная совместимость
Любой объект представляется кортежем, где вначале идёт шейп (массив имён полей), а затем все значения.
[Coord( 12, 34 ),Coord( 56, 78 ),]
А так как у одинаковых структур одинаковые шейпы, то они легко дедуплицируются, заменяясь на ссылки.
[( [ "x", "y" ], 12, 34 ),( #2, 56, 78 ),]
А даже если для какого-то шейпа не реализована отдельная структура, то используется обобщённый объект.
[{ x: 12, y: 34 },{ x: 56, y: 78 },]
Таким образом разные реализации могут взаимодействовать друг с другом, не ломая ни прямую, ни обратную совместимости.
UCF: компактная кодировка юникода
Текст хранится до 2 крат эффективней благодаря UCF-кодировке, что особенно актуально при упаковке небольших значений перед шифрацией.
|
Язык |
UCF |
UTF-8 |
UTF-16 |
|
Английский |
🟢 |
🟢 |
🟡🟡 |
|
Русский |
🟢 |
🟡🟡 |
🟡🟡 |
|
Китайский |
🟡🟡 |
🟠🟠🟠 |
🟡🟡 |
|
Эмодзи |
🟡🟡 |
🔴🔴🔴🔴 |
🔴🔴 🔴🔴 |
Подробнее про VaryPack
Giper Baza — децентрализованное хранилище
Наконец, самое пока что амбициозное — децентрализованная СУБД, написанная на $mol, с использованием VaryPack.
🎡 Граф данных на графе узлов
🎓 Каждый узел — мастер
🤝 Согласие без согласования
🔑 Сквозное шифрование
✍ Тотальные цифровые подписи
💯 Максимальная доступность
🚀 Синхронизация на лету
Giper Baza: Строгая доступность

Гипер База ориентированна на самые строгие гарантии без компромиссов с доступностью при разделении сети — Strict Available. Это позволяет ей работать даже полностью оффлайн, и даже прямо в браузере без доступа к серверу.
Giper Baza: Консенсус через беспорядочную конвергенцию
При восстановлении соединения внесённые локально изменения начинают в фоне синхронизироваться в реальном времени с бесконфликтным слиянием правок. Возможно это благодаря хранению всех данных в виде конвергентных структур.
Классификация подходов обеспечения согласия между параллельными агентами

Giper Baza: Графовая модель данных
Модель данных — граф с эфемерными узлами и материальными рёбрами, сгруппированными в так называемые ленды — атомарные кластеры графа, с независимым набором прав доступа.

Так же у нас есть графовый REST API на базе HARP позволяющий одной короткой строчкой получать нужные срезы данных.
Giper Baza: Реактивное состояние
Ключевая особенность архитектуры микровервисов на Гипер Базе — работа через реактивное локальное состояние, вместо коммуникации через события, сообщения, команды, запросы, ответы.
|
Краевой случай |
Реактивное состояние |
Целевые сообщения |
|
Подписался после изменения |
🟢 Актуальное значение |
🔴 Потерял данные |
|
Упал при обработке |
🟢 Поднялся и продолжаешь |
🔴 Событие потеряно |
|
Повторил обработку |
🟢 Идемпотентный результат |
🔴 Дублирование эффектов |
|
Реакция после серии изменений |
🟢 Актуальное значение |
🔴 Обработка старых событий |
|
Обработка в разном порядке |
🟢 Единый результат |
🔴 Разные эффекты |
|
Нет прямой связи |
🟢 Дойдёт потом / через других |
🔴 Ошибка доставки |
В традиционной событийной модели приходится лепить кучу костылей с материализацией событий, чтобы достигнуть идемпотентности, актуальности, персистентности и наблюдаемости.
Ну ас же микросервисам не нужна прямая коммуникация — они реагируют на изменение одних состояний и сами меняют другие. А взаимодействие микросервисов происходит неявно, через синхронизацию Гипер базы, даже если она идёт опосредованно, асинхронно и через не доверенные промежуточные узлы.
Giper Baza: Нулевое доверие
Нулевое доверие между узлами, дающая независимость от изолированности периметра. А так как у нас нет доверенных узлов, то сеть работает по принципу децентрализованной хореографии вместо централизованной оркестрации.
Сквозное шифрование и цифровые подписи всех данных, что позволяет даже восстанавливать данные на сервере с клиентских устройств.

На диаграмме пример рабочего процесса с хакатона по безопасному управлению ТЭЦ. Тут админ приносит на флешке пакет обновления от вендора в виде кусочка Гипер Базы. Оно доходит до контроллера, который проверяет лицензию, и накатывает обновление. В данном случае лицензия истекла.
А так как поведение системы не зависит от истории сообщений, а зависит лишь от текущего состояния базы, то админ всегда понимает, что происходит в системе.
Baza Pack — универсальный срез базы
И протокол синхронизации, и модуль хранения в файлах, используют единый формат пакетов. Он же может использоваться и в качестве универсального формата документов, которые можно мёржить обычным склеиванием, без потери правок.

Giper Baza: Атомарность через Тик-Ток Зеркала
Для атомарной записи данных мы используем оригинальный алгоритм, гарантирующий мгновенное восстановление базы после перезагрузки.
|
Свойство |
TTM |
REDO WAL |
UNDO WAL |
COW |
LSS |
|
FSync / Write |
🟢 1 |
🟢 1 |
🟠 2 |
🔴 2+ |
🟢 1 |
|
Total Write Amp |
🟠 2 |
🟠 2 |
🟠 2 |
🔴 ×Path |
🟢 |
|
Over Size |
🟢 0 |
🟠 +News |
🟢 0 |
🟢 0 |
🔴 +History |
|
Fragmentation |
🟠 Write |
🟠 Write |
🟠 Write |
🔴 Read/Write |
🟠 Read |
|
Regular Tasks |
🟢 — |
🔴 Apply |
🟢 — |
🟢 — |
🔴 GC |
|
Recovery |
🟢 Just |
🟡 Fast |
🟡 Fast |
🔴 Slow |
🟡 Fast |
GiperBaza: Области применения
🟢 Коллаборативные системы
🟢 Гео распределённые системы
🟢 Универсальный формат документов
🟢 Система контроля версий файлов
🔴 Криптовалюты — нужен консенсус
🔴 Соревновательные игры — нужен оракул
За исключением криптовалют (где важна лениаризуемость) и соревновательных игр (где нужен оракул), применять это можно практически везде. Вот несколько ярких примеров:
OnLine Transaction Processing: коммуникация микросервисов через общее состояние.
Client-Server API: двусторонняя синхронизация состояния в реальном времени.
Open Documents: универсальный формат документов с бесконфликтным слиянием.
Decentralized Version Control System: бесконфликтное слияние версий файлов.
Giper Baza: Статус и планы
Успехи
✅ Реализации на TS для браузера/ноды
✅ Автоматический интерфейс с формами
✅ Общедоступные сервера синхронизации
✅ Несколько коммерческих внедрений
✅ Сообщество гипер разработчиков
Ряд технологий, доказавших своё превосходство на деле.
Сообщество разработчиков, уверенных, что за этим всем будущее.
Множество внедрений в коммерческих продуктах.
Прототипы некоммерческих продуктов, которые уже можно пощупать.
Планы
💤 Giper Web — экосистема Web4-сервисов
💤 Giper Drive — контроль версий файлов
💤 Giper Space — коллаборативные сервисы
💤 Giper Fleet — хореография серверов
💤 Giper Cartel — экосистема организаций
✨ Giper Like — цифровая экономика без денег
✨ Jack.Tree — язык мета-программирования
✨ Giper OS — реактивная операционная система
✨ Giper Net — меш сеть из IoT-девайсов
Гипер Веб — экосистема веб-сервисов на Гипер Базе, закрывающих все цифровые потребности человечества: от безопасного мессенджера, до конструктора магазинов.
Гипер Драйв — система реального времени для контроля версий и доставки файлов.
Гипер Спейс — децентрализованная соцсеть для совместного творчества, общения, документооборта и тд.
Гипер Флот — управление контейнерами и серверами через хореографию на Гипер Базе.
Гипер Картель — экосистема организаций, занимающихся обучением Гипер Технологиям и внедрением их в различных продуктах и сервисах.
Гипер Лайк — личные микрофонды и потребительские сообщества.
Джек — язык мета-программирования, компилирующийся в компактные WASM бинарники для публикации в Гипер Вебе.
Гипер Ось — реактивная операционная система для приложений из Гипер Базы.
Гипер Сеть — меш сеть, интернет вещей, умный дом и тп, но на Гипер Базе.
Двигаемся мы хоть и медленно, но верно, присоединяйтесь и вы, чтобы светлое будущее поскорее наступило!
ссылка на оригинал статьи https://habr.com/ru/articles/1092252/