Brief

DAG Relay Service это сервис для упрощение работы с публикацией YAMLов DAGов в наш DataMesh (Airflow). Общая схема взаимодейсвия: diagram

Какие проблемы призван решить данный сервис:

  • абстрагироваться от необходимости пушить YAMLы DAGов напрямую в репозиторий DataMeshа
  • возможность хранить YAMLы внутри репы самого проекта
  • добавить возможность кастомной шаблонизии/генерации YAMLов, удобным каждому проекту
  • добавить возможность генерить динамические YAMLы со стороны проекта
  • сделать всё это прозрачно для команды DataMeshа, для них в итоге всё это будет выглядеть как push в git репозиторий

Компоненты системы

Основные компоненты системы: components

  • ядро
  • хранилище проектов
  • git repo client
  • http endpoint for DAG pushes
  • scheduler
  • dag/resource fetcher (http client)
  • cli interface

Сущности

Основные сущности:

  • проект (имя, токен, url endpoint для фетчинга DAGов, настройки git репы)
  • DAG (YAML) (проект, имя, YAML)

Имя проекта уникально. Имя DAGа в рамках проекта уникально.

Жизненный цикл

DAG рождается и умирает только по сигналу от API: dag_lifecycle

Наличие отсутствие файла в папке gitа ни на что не влияет. Мы потом напишем отдельную утилиту проверяющую zombie файлы :)

Stack

Предлагаемый stack:

  • Scala 2.13
  • ZIO 1.0.3
  • http4s для web сервера
  • sttp для http клиента
  • circe для Json
  • pureconfig
  • что-то для запуска в режиме CLI (есть либа decline http://ben.kirw.in/decline/)
  • что для логирования?
  • zio-test для тестов