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.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.ts

web.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.ts

node.test.js = node.js +

/mol/test/test.ts
/mol/store/store.test.ts
/mol/store/local/local.test.ts

Фрактальные тесты страхуют друг друга и быстро исполняются с разными уровнями изоляции.

Фрактальное тестирование

MAM: VerLess не ломает обратную совместимость

Есть только одна версия — актуальная, а если хочется сломать API, то создаётся новый модуль, что позволяет им сосуществовать.

Было старое API

/my/schema 1000 SLOC

Новое API у старого кода

/my/schema 1000 SLOC

/my/schema2 100 SLOC

Старое API у нового кода

/my/schema 100 SLOC

/my/schema2 1000 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

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

Tree — единый AST чтобы править всеми

Что не так с сорсмапами и как с ними не связываться?

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

$mol — реактивный конструктор

Фактически фреймворк $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

Проектируем как синьор: универсальная бинаризация

Ну всё, пора закапывать UTF-8

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.

ссылка на оригинал статьи https://habr.com/ru/articles/1092252/