Read in:
Русский

Data mesh для знаний

Коротко. trip2g публикует Obsidian-хранилища как сайты и даёт AI-агентам искать по многим базам знаний через MCP. Проблема, с которой он работает, — одна общая куча, у которой нет хозяина. Инженеры данных упёрлись в ту же проблему с центральным озером данных на несколько лет раньше остальных. Их ответ называется data mesh: не сливать всё в одно озеро, а оставить данные у тех доменов, которые их производят, и пусть они сами их публикуют. Держится это на общей платформе и паре стандартов, обязательных для всех. Распределённая база знаний — тот же ход, только для документации и заметок. Ниже четыре принципа data mesh простыми словами, как каждый выглядит в trip2g сегодня, критика, которую data mesh заработал, и места, где аналогия льстит trip2g.

Откуда взялся data mesh

Жамак Дегани, тогда в Thoughtworks, опубликовала на martinfowler.com в мае 2019 года статью How to Move Beyond a Monolithic Data Lake to a Distributed Data Mesh. Диагноз центральному озеру данных она поставила жёсткий: «наобещали много, сделали мало». Центральная команда владела пайплайнами и сидела далеко от доменов, которые производили данные, так что те, кто знал данные, и те, кто за ними следил, оказывались разными людьми.

В декабре 2020-го она сформулировала четыре принципа, а в 2022-м в O'Reilly вышла её книга Data Mesh: Delivering Data-Driven Value at Scale. Замените в первой статье «датасет» на «базу знаний», и многие абзацы читаются как описание корпоративной вики.

Четыре принципа простыми словами

1. Владение по доменам. У Дегани: «децентрализация и передача ответственности тем, кто ближе всего к данным». Кто производит, тот и следит. Не центральная команда данных и не садовник вики.

2. Данные как продукт. К данным относятся «как к продукту, а к их потребителям — как к клиентам». В статье 2019 года перечислено, что это значит: продукт данных можно найти, у него есть адрес, ему можно доверять, он сам себя описывает, совместим с другими и защищён.

3. Платформа самообслуживания. Общая платформа даёт каждому домену «высокоуровневую абстракцию инфраструктуры», чтобы команда могла опубликовать продукт данных, не строя хранилище и пайплайны с нуля.

4. Федеративное вычислительное управление. Часть решений остаётся за доменом, часть общая. Общие согласует группа управления из людей доменов и платформы, а исполняет их платформа автоматически, не надеясь, что все будут помнить. Смысл общей части — «совместимость и нарастающий сетевой эффект за счёт поиска и сборки продуктов данных».

Те же четыре, но для баз знаний

Владение — это правило из ru/thoughts/one-writer-per-base: у каждой базы один автор, тот, кто реально знает предмет. Платформенная команда пишет платформенную базу, HR пишет свою. Почему это важно, в цифрах показывает эссе про цепочку поставок: на одной слитой куче модели находили нужные мысли и приписывали их не тому автору.

Знание как продукт. Сверю список Дегани с тем, что trip2g уже умеет:

  • Находимость. База попадает в список через KB-заметку: обычную заметку, в тексте которой агенту сказано «Use when: … Don't use when: …». Агент видит это в выдаче и решает, идти ли туда. Публичный хаб — это страница таких заметок.
  • Адресуемость. У каждой базы один адрес, /_system/mcp, и короткий kb_id, на который можно нацелить запрос.
  • Самоописание. База может отдавать авторские инструкции (instructions(), а с другой стороны federated_instructions(kb_id)), а у каждого подграфа есть одна строка «что это за подграф», которую пир видит рядом с именем.
  • Совместимость. Один протокол, MCP, с одним и тем же набором методов на каждой базе. Что за ним работает, дело владельца: пиру достаточно отвечать на эти методы, так что это может быть другой инстанс trip2g, адаптер перед чужим хранилищем или вообще другой поисковый движок.
  • Защищённость. Ключ пира поначалу не видит ничего, владелец выдаёт ему подграфы, отзыв — одна кнопка.
  • Доверие. Это слабое место, о нём ниже.

Слово «продукт» тут ещё и буквальное: базу можно продавать по подписке, это идея ru/thoughts/knowledge-as-a-service.

Платформа самообслуживания. Один инстанс trip2g — вся платформа для одной базы: один бинарник на SQLite, синхронизация из Obsidian или через git push, гибридный поиск, MCP-эндпоинт и сайт из коробки. Команде не надо просить пайплайн у центральной группы. Она поднимает инстанс, или его поднимают для неё.

Федеративное управление. Общее — то, что код проверяет при каждом вызове между базами. Набор федеративных методов, и все они только читают. Подписанные запросы с общим ключом. Одинаковое «not configured» и для несуществующей базы, и для той, куда вас не пустили. Ротация ключа с пятиминутным окном. И пара значений по умолчанию, которые каждый инстанс может поменять: глубина веерного запроса не больше трёх, чтобы пиры с пирами не зацикливались, и две секунды на ответ пира. Локальное — всё остальное: что лежит в базе, как устроены заметки, какие есть подграфы, кому какие выданы.

Отличие от версии Дегани в том, кто устанавливает общие правила. В data mesh их решает группа управления от доменов. Здесь правила — это то, что делает код федерации, и решал их тот, кто этот код писал, то есть я. Для протокола между незнакомыми людьми это, наверное, правильно. Для компании это значит, что общие правила заканчиваются на доступе и маршрутизации; к этому я вернусь ниже.

Пример из документации: Backstage TechDocs

Data mesh про данные, поэтому вот пример из самой документации. (Пример постарше, Federated Wiki Уорда Каннингема, разобран в ru/thoughts/one-writer-per-base.) TechDocs от Spotify, встроенный в Backstage, устроен как «docs-like-code»: инженеры пишут Markdown в том же репозитории, что и сервис, а Backstage его рендерит и даёт найти со страницы сервиса в каталоге. По данным Spotify, на нём больше 5000 сайтов документации.

Это владение плюс портал. Команда владеет своей документацией, потому что та лежит в её репозитории, а портал собирает всё для читателя. trip2g умеет ровно это внутри одного инстанса: несколько репозиториев синхронизируются в один сайт, каждый со своим подграфом через --meta subgraph=… (документация).

Федерация отличается тем, где происходит сборка. TechDocs собирает документацию всех команд в один портал. Хаб trip2g ничего не копирует: он держит заметки-маршруты, рассылает вопрос в момент чтения, и каждый ответ приходит из базы, которая им владеет. В портале проще искать, и его проще оформить. Федерация оставляет каждую базу на сервере владельца с его правилами доступа, а это становится важно, как только одна из баз принадлежит другой компании.

Критика, которая касается и нас

Последние годы у data mesh выдались тяжёлыми. В Hype Cycle for Data Management 2022 года Gartner поставил его на стадию «технологического триггера» с пометкой «устареет до выхода на плато» и низким проникновением на рынок. Отчёт платный, я опираюсь на пересказ Atlan, где приведена и цифра из опроса Gartner по управлению данными 2021 года: зрелости для такого перехода хватало лишь 18% организаций. Дегани с этим вердиктом спорила, и в том же пересказе это тоже есть. Типичные претензии: каждой команде нужны навыки работы с данными, которых у неё может не быть, границы доменов в живой организации трудно провести, а нужная платформа сама по себе большой проект.

Если пересказать это своими словами: без сильной платформы и общих стандартов mesh — это центральное болото, разрезанное на двадцать болот поменьше. На знания это переносится без правок. Дайте каждой команде свою базу без привычки её описывать, и получите двадцать маленьких вики, которые гниют параллельно, а общего поиска, чтобы эту гниль найти, больше нет. Описание в KB-заметке — защита тонкая. Она работает, только если кто-то честно пишет «Use when / Don't use when» и обновляет это, когда база меняется.

Где аналогия нам льстит

Data mesh придумывали для организаций с десятками доменов и платформенной командой, которая строит слой самообслуживания. trip2g сегодня работает в основном на моих собственных базах и небольшом публичном хабе. Когда я пишу здесь «домены», имею в виду несколько баз, а не оргструктуру компании.

Доверие на уровне платформы не решено никак. Дегани требует от продукта данных целевого уровня обслуживания по достоверности. У trip2g ничего подобного нет. Одна база в хабе помечает каждую цитату статусом подлинности (это описано в ru/thoughts/federation-supply-chain), но это практика одного владельца, а не правило платформы. Свежесть между базами тоже не отслеживается: пир, который перестал обновляться год назад, выглядит точно так же, как обновлённый сегодня утром.

Управление узкое. «Вычислительная» часть покрывает доступ, протокол и маршрутизацию. Про содержимое она молчит: нет общего глоссария, нет общей схемы заметок, нет проверки качества, которая шла бы через все базы. В data mesh совместимость живёт как раз в этом слое. Здесь он оставлен владельцам.

Каталог пишется руками. Data mesh предполагает каталог продуктов данных с метаданными и поиском. В trip2g база становится находимой, когда кто-то пишет про неё KB-заметку, и только для тех, у кого эта заметка есть.

И в одном месте сбой тихий. Пир, не ответивший за две секунды, пропускается, и вы получаете результаты от остальных. Поиск от этого быстрый, а медленная база становится невидимой, а не сломанной, о чём с другой стороны предупреждает мембрана.

Аналогию это не убивает. Это показывает, какую половину data mesh trip2g построил: владение, адресацию, доступ и протокол, на котором говорят все. Вторая половина, общие стандарты того, что внутри базы и насколько оно хорошо, пока на владельцах. Кто возьмёт этот подход, тому эту половину делать самому.