📱 Подписаться
IT и цифровая трансформация

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

📰 Habr 👁️ 2 просмотров

nin-jin1 час назадОбъяснить с

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

Уровень сложностиСреднийВремя на прочтение10 минОхват и читатели2.7K$mol*Программирование*Проектирование и рефакторинг*Базы данных*Хранение данных*ОбзорВ цифровую эпоху приватность и надёжность хранения данных важны как никогда.

Сетевое разделение и недоверенные посредники ломают взаимодействие: санкции, ковровые блокировки, атаки на инфраструктуру, глухомань.

Владельцы серверов владеют данными: могут их свободно читать, сливать, менять, удалять.

Наблюдается кризис доверия к софту и запрос на импортозамещение.

Техно-гильдия 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.ts

web.test.js =

/mol/test/test.ts/mol/store/store.test.ts/mol/store/local/local.test.tsnode.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 — простой формат представления абстрактных синтаксических деревьев в читаемой форме, как основа для различных прикладных языков.

XMLJSONYAMLTOMLTreeРазмер в читаемом виде195%140%125%110%100%Сложность синтаксиса90302109010Однозначность синтаксиса✅✅❌✅✅Удобочитаемость❌❌✅✅✅Не нужно экранирование❌❌❌❌✅Точные координаты узлов❌❌❌❌✅Поточная обработка❌❌✅✅✅Расширяемая модель данных✅❌✅❌✅Широкая распространённость✅✅✅❌❌Его невозможно плохо отформатировать и при этом он куда компактней альтернатив.

Разные 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 specialdata .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 \20Tree код - это буквально список строк из опциональных отступов табами, опционального списка имён разделённых пробелами и опциональными сырыми данными без экранирования до конца строки, предварёнными бэкслешем.

Подробнее о Tree

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

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

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

Фактически фреймворк $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-кодировке, что особенно актуально при упаковке небольших значений перед шифрацией.

ЯзыкUCFUTF-8UTF-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: Атомарность через Тик-Ток Зеркала

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

СвойствоTTMREDO WALUNDO WALCOWLSSFSync / Write🟢 1🟢 1🟠 2🔴 2+🟢 1Total Write Amp🟠 2🟠 2🟠 2🔴 ×Path🟢Over Size🟢 0🟠 +News🟢 0🟢 0🔴 +HistoryFragmentation🟠 Write🟠 Write🟠 Write🔴 Read/Write🟠 ReadRegular Tasks🟢 —🔴 Apply🟢 —🟢 —🔴 GCRecovery🟢 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.Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.Какие технологии вы бы хотели уже скорее попробовать?100%MarkedText1100%Tree1100%HARP1100%UCF1100%VaryPack1100%MAM1100%$mol1100%Giper Baza1100%Giper Drive1100%Giper Space1Проголосовал 1 пользователь. Воздержались 2 пользователя.Теги:• Giper Baza
• varyPack
• UCF
• Tree
• MAM
• VerLess
• $mol
• Strict Available
• TTM
• CvRDTХабы:• $mol
• Программирование
• Проектирование и рефакторинг
• Базы данных
• Хранение данныхЕсли эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопкуЗадонатить

Получайте больше инсайтов о систематизации бизнеса

Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности

💬 Подписаться на канал