Поисковая система по каталогу GAIA-X - под капотом
В современном мире, а теперь и в еще большей степени благодаря недавним карантинным мерам, мы полагаемся на облачные сервисы для управления нашей инфраструктурой и хранения наших данных.
Инициатива GAIA-X обусловлена необходимостью повышения осведомленности о суверенитете данных и создания федеративной надежной облачной экосистемы для Европы.
В этой статье мы обсудим, как группа демонстраторов GAIA-X, состоящая из 3DS OUTSCALE, Docaposte, German Edge Cloud, Orange Business Services, OVHcloud, Scaleway и T-System, создала прототип механизма поиска по каталогам.
Одна из целей поисковой системы каталога состояла в том, чтобы дать пользователю возможность искать и выбирать службы, которые соответствуют его потребностям. Цель состоит в том, чтобы быть инклюзивным и предоставлять информацию пользователю, чтобы он мог сделать прозрачный, образованный выбор. Информация, описанная для каждой услуги, включает, по крайней мере, все соответствующие «Правила политики», определенные руководством GAIA-X как обязательные, и набор технических описаний. «Правила политики» охватывают множество областей (защита данных, безопасность, обратимость и т. Д.) И разработаны в двух документах: один для правил политики инфраструктуры, а другой для правил политики данных и программного обеспечения.
Конечно, все они должны быть доступны в машиночитаемом формате, чтобы обеспечить автоматический выбор услуг.
Первым шагом является перечисление различных сценариев инфраструктуры на основе каждого из наших соответствующих запросов клиентов и извлечение семантики из требований.
Например, если клиент запрашивает «базу данных, совместимую с PCI-DSS для платежных услуг, размещенную в Германии в соответствии с Кодексом поведения по защите данных CISPE», интересующими объектами являются «база данных», «PCI-DSS», «Германия» и «Защита данных CISPE».
Но как сущности связаны друг с другом и как они определены? И можем ли мы их классифицировать?
Одним из интуитивно понятных способов представления семантики было использование графиков, подобных приведенным ниже:
Имея в виду эти различные сценарии, мы нашли шаблоны и решили для первого выпуска иметь простую онтологию базы данных графов (ниже):
Эта онтология не предназначена для покрытия всех будущих потребностей GAIA-X. У нас есть более продвинутые онтологии, о которых мы расскажем в следующих статьях.
Мы также определили таксономию для классификации сервисов и включения атрибутов на узлах.
Следующим шагом было развертывание среды разработки и промежуточного уровня. Мы решили не иметь производственной среды с именем, чтобы избежать путаницы и подчеркнуть тот факт, что этот демонстратор является реализацией того, как каталог GAIA-X может работать, а не обязательно, как он будет реализован позже.
Мы использовали Gitlab с управляемой интеграцией кластеров Kubernetes и стандартными настройками конвейера CI / CD для развертывания микросервисов. Мы использовали графическую базу данных Neo4j для хранения данных.
С онтологией и таксономией следующим шагом было заполнение базы данных.
Чтобы ускорить разработку, мы сфокусировались на сервисе Object Storage для релиза. Каждый из облачных провайдеров, работающих над демонстратором, заполнил базу данных своим описанием сервиса Object Storage.
Наконец, поскольку одним из критериев GAIA-X является удобство использования, мы создали интуитивно понятный способ запроса базы данных с классическим пользовательским интерфейсом поисковой системы.
Для продвинутых запросов мы решили не предоставлять язык запросов Neo4j Cypher, а создать еще более простую грамматику синтаксического анализа, основанную на отношениях между узлами и их атрибутами. Это позволило нам реализовать поле ввода произвольной формы с автозаполнением. Мы использовали движок Pars. Expression Grammar PEG.js, используя следующую грамматику:
logical_and ::= expression "AND" logical_and
expression ::= "NOT" expression / primary
primary ::= "(" logical_or ")
| rules
rules ::= node relation node
| node relation "ANY(" node+ ")"
| node relation "ALL(" node+ ")“
| node.property "=" value
| node.property "!=" value
| node.property "IN ANY(“ value+ “)"
Эта грамматика позволяет пользователю выражать более сложные запросы, такие как:
Service IMPLEMENTS ANY('S3', 'SWIFT') AND (Service COMPLIES_WITH 'GDPR' OR Provider LOCATED_IN 'European Economic Area')
Service.type = 'object storage' AND Service LOCATED_IN ALL('France', 'Germany')
Наконец, исходный код выпускается под лицензией BSD-3, и мы раскрываем спецификации OpenAPI, JSONSchema и JSON-LD для облегчения взаимодействия и повторного использования.
В заключение, мы гордимся тем, что некоторые из этих работ уже включены в документ по технической архитектуре GAIA-X и что нам удалось успешно работать вместе над общим видением европейской экосистемы.