Giper Baza − отечественная инфраструктура нового поколения

В цифровую эпоху приватность и надёжность хранения данных важны как никогда.
Сетевое разделение и недоверенные посредники ломают взаимодействие: санкции, ковровые блокировки, атаки на инфраструктуру, глухомань.
Владельцы серверов владеют данными: могут их свободно читать, сливать, менять, удалять.
Наблюдается кризис доверия к софту и запрос на импортозамещение.
Техно-гильдия 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С
... Giper.Dev
MAM управляет Абстрактными Модулями
Своя модульная система, основанная на соглашениях, форсирующих лучшие практики.
Абстрактный Модуль — это просто директория с модулями на разных языках.
/acme/taxi/map/
map.ts — программная логика
map.css — каскадные стили
map.glsl — шейдеры
map.view.tree — композиция компонент
MAM: Разрешение циклических зависимостей
Зависимости определяются не импортами, а по фактическому использованию имён в коде.
// /my/store/local/local.ts
class $my_store_local extends $my_store {}
// /my/store/store.ts
class $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 html
html
head
meta @ charset \utf-8
script @ src \web.js
body
h1 \Hello & Bye
p \Forget < and >server port 8000
client
name \Client1
address \192.168.1.100
client
name \Client2
address \192.168.1.101Грамматика Tree на grammar.tree
Вот все 10 паттернов грамматики формата на языке формальных грамматик:
tree .optional .list_of line
line .sequence
.optional indent
.optional nodes
new_line
nodes .sequence
.optional .list_of name
.with_delimiter space
.optional data
.with_delimiter space
name .list_of .byte
.except special
data .sequence
data_prefix
.optional .list_of .byte
.except new_line
special .any_of
new_line
data_prefix
indent
space
new_line .byte \0A
indent .list_of .byte \09
data_prefix .byte \5C
space .list_of .byte \20
Tree код - это буквально список строк из опциональных отступов табами, опционального списка имён разделённых пробелами и опциональными сырыми данными без экранирования до конца строки, предварёнными бэкслешем.
Подробнее о Tree

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

$mol_view — гипер настраиваемые виджеты
Свои компоненты создаются комбинацией и глубокой кастомизацией существующих: настраивается как визуал, так и поведение, и даже компоновка.
Вот весь код компонента профиля пользователя, который берёт имя из модельки и рисует форму его редактирования и вывода актуального результата:
$acme_profile $mol_page
User $my_user
name? => name?
sub /
<= Edit $mol_string
value? <=> name?
<= View $mol_view
sub / <= name
А вот весь код приложения, которое рендерит профиль, подменяя модельку и выводя в нужно месте дополнительные данные.
$acme_taxi_app $mol_book2
pages /
<= Profile $acme_profile
User <= User $my_taxi_user
sub /
^
<= 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 бинарники для публикации в Гипер Вебе.
Гипер Ось — реактивная операционная система для приложений из Гипер Базы.
Гипер Сеть — меш сеть, интернет вещей, умный дом и тп, но на Гипер Базе.
Двигаемся мы хоть и медленно, но верно, присоединяйтесь и вы, чтобы светлое будущее поскорее наступило!
Актуальный оригинал на $hyoo_page.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.