BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс Современная архитектура хранилища данных » Dagster для Data Engineer » Основы Dagster: термины, концепции и сценарии применения

Основы Dagster: термины, концепции и сценарии применения

Dagster представляет собой современный оркестратор данных, ориентированный на явную архитектуру потоков данных, строгую типизацию и богатую observability. В рамках этой главы рассмотрены базовые термины, ключевые концепции и сценарии применения, которые позволят инженеру данных не только построить работоспособные data pipelines, но и обеспечить их воспроизводимость, управляемость и интеграцию с существующими аналитическими платформами. В тексте отражаются как принципы проектов на базе Dagster, так и практические подходы к реализации устойчивых конвейеров данных.

Dagster отличается тем, что строит pipelines вокруг четко определяемых единиц вычислений, называемых операциями (ops) или solids, и объединяет их в графы (Graphs) или задачи (Jobs). Важным преимуществом является концепция ресурсов (Resources) для управления внешними зависимостями, а также поддержка материалов и активов (Assets) для отслеживания происхождения данных и их состояния на протяжении всей цепочки обработки. Эти механизмы позволяют не только реализовать вычислительные конвейеры, но и обеспечить контроль над конфигурациями, масштабированием и интеграциями с внешними системами - от систем хранения до аналитических платформ.

  • Основные термины Dagster: графы, операции, ресурсы, активы, конфигурации и сенсоры.
  • Архитектура Dagster: как строятся конвейеры, как управляются ресурсы и данные между операциями.
  • Подход к конфигурации и управлению ресурсами: режимы выполнения, конфигурационные схемы и валидируемые контексты.
  • Интеграции и сценарии применения: Dbt, облачные решения, аналитические платформы и observability.
  • Практические примеры реализации и принципы эксплуатации.

     

Архитектура Dagster: графы, задания и ресурсы

Dagster организует вычисления в ясную структуру из графов узлов и взаимосвязей между ними. В современном подходе Dagster оперирует понятиями ops (операции) и Graph (граф) - композицию операций. После связывания ops в граф мы получаем конфигурацию, которую можно запускать как Job (или, в некоторых версиях, как pipeline). Это позволяет разделять логику обработки данных и управляемые параметры выполнения.

Силы такого подхода очевидны:

  • явная однозначная зависимость между узлами данных;
  • возможность повторного использования отдельных операций в разных графах;
  • простая адаптация под локальный режим разработки и под удалённый режим исполнения в кластере.

Важным компонентом являются Resources - внешние сервисы и системы, которые используются операциями в процессе обработки. Resources позволяют централизованно управлять настройками доступа, подключениями к БД, очередями сообщений, кэшами и прочими зависимостями, не «размазывая» логику операций по всему коду. Это упрощает тестирование и упорядочивает развёртывание конвейера в разных окружениях.

Материалы Dagster - Assets - представляют собой данные и их производные значения, которые можно материализовать и отслеживать. Asset-ориентированный подход полезен для видимости lineage (происхождения данных), кэширования и повторного использования результатов между конвейерами. Он действительно полезен в сценариях, когда требуется прослеживать происхождение данных на протяжении всего ETL/ELT-потока и обеспечивать согласованность между различными конвейерами.

from dagster import op, graph, resource

@resource
def db_resource(_):
    ## Реальная реализация будет читать конфигурацию подключения
    return "db_connection"

@op
def extract(context):
    context.log.info("Извлечение данных")
    return [1, 2, 3]

@op(required_resource_keys={"db_resource"})
def load(context, data):
    conn = context.resources.db_resource
    context.log.info(f"Загрузка {data} в БД через {conn}")

@graph
def etl_graph():
    data = extract()
    load(data)

etl_job = etl_graph.to_job(resource_defs={"db_resource": db_resource})

В этом примере показано базовое построение конвейера: извлечение данных, обработка и загрузка в внешнюю систему через ресурс. В реальных проектах такая структура дополняется обработкой ошибок, повторными попытками, параллелизмом и мониторами статусов выполнения. Важной рекомендацией является явное определение контрактов между операциями через входы и выходы (IO) и явное указание необходимых ресурсов на уровне графа. Это обеспечивает предсказуемость поведения и упрощает тестирование.

 

Модель данных и типизация: IOManager, типы данных и материализация

Dagster обеспечивает строгий подход к передаче данных между операциями и их типизацию. Важную роль здесь играют IOManager и типизация Dagster. IOManager отвечает за способы сериализации и десериализации промежуточных данных между операциями. В крупных проектах этот механизм позволяет, например, хранить промежуточные результаты в файловой системе или в облачном хранилище с минимальными затратами на повторные вычисления.

Типизация Dagster помогает детерминировать, какие данные ожидают операции, и позволяет инструментам статического анализа и валидации конфигураций работать эффективнее. В сочетании с IOManager это даёт возможность формировать явные контракты между операциями, что особенно важно при работе с большими объемами данных и сложными конвейерами.

Архитектура активов (Assets) добавляет новый слой видимости. Asset-ориентированное проектирование позволяет:

  • явно моделировать данные как артефакты, с их именами и версиями;
  • материализовывать данные в конкретной локации с учётом схемы версии;
  • отслеживать lineage между входами и выходами разных конвейеров;
  • устанавливать политики обновления и повторной активации (materialization) по расписанию или в ответ на событие.

Пример использования Asset-ориентированного подхода:

from dagster import asset

@asset
def raw_sales():
    ...

@asset
def cleaned_sales(raw_sales):
    ...

@asset
def sales_summary(cleaned_sales):
    ...

Такой подход полезен для обеспечения прозрачности и управляемости вырабатываемых данных: каждое значение имеет контекст происхождения и может быть повторно создано при изменении входных данных или логики обработки.

 

Управление вычислительными ресурсами: ресурсы, режимы и конфигурации

Управление ресурсами - один из ключевых аспектов Dagster. Ресурсы позволяют вынести операцию над внешними системами (база данных, сервис очередей, облачное хранилище) в отдельный контекст, который инжектируется в нужные ops или графы. Это обеспечивает единое место конфигурации и упрощает повторное использование конфига в разных окружениях (локальный запуск, тестовый стенд, продакшн).

Основные принципы:

  • ресурсная конфигурация задаётся отдельно от логики операций;
  • ресурсы доступны через контекст операции: context.resources.;
  • конфигурации должны верифицироваться на этапе инициализации, чтобы не допускать несоответствий в окружении;
  • возможности ограничивать параллелизм и квоты через настройки исполнения.

Режимы и конфигурации Dagster позволяют адаптировать поведение конвейера под конкретные окружения. Например, для локального тестирования можно задать упрощённые ресурсы и ограничить параллелизм, а для кластерного исполнения - подключиться к настоящим внешним системам и включить соответствующие политики расписания и сенсоров. Конфигурации также позволяют параметризовать параметры OPS и графов, обеспечивая гибкость без изменения кода конвейера.

Пример конфигурации ресурса и OPS:

from dagster import resource, op, graph

@resource
def warehouse_resource(init_context):
    ## подключение к Data Warehouse
    return {"host": init_context.resource_config["host"]}

@op(required_resource_keys={"warehouse_resource"})
def extract_from_warehouse(context):
    wh = context.resources.warehouse_resource
    context.log.info(f"Соединение: {wh['host']}")
    return [10, 20, 30]

@graph
def etl():
    data = extract_from_warehouse()
    return data

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

Реализация управления ресурсами должна учитывать требования к мониторингу и повторной сборке. Например, если источник данных обновляется регулярно, конфигурации должны позволять запускать повторные запуски без переопределения логики, а метаданные материалов и агентские логи дают возможность анализировать влияние изменений на downstream-процессы.

 

Интеграции и сценарии применения: аналитические платформы, dbt, облачные решения

Dagster предоставляет богатые возможности для интеграции с аналитическими платформами и инструментами обработки данных. Среди распространённых сценариев:

  • интеграция с dbt через соответствующие плагины и ресурсы для запуска dbt-модулей и материализации результатов в рамках Dagster-конвейера;
  • интеграция с системами хранения и обработки больших данных (Snowflake, BigQuery, Redshift и т.д.) через ресурсы и IOManager;
  • совместное использование с облачными сервисами и кластерами (Kubernetes, AWS ECS, GCP, Azure) для масштабирования и управления ресурсами;
  • observability через Dagit и интеграции с инструментами мониторинга (Prometheus, Grafana) для отслеживания производительности и ошибок;
  • поддержка активов и lineage для отслеживания происхождения данных и аудита изменений.

Одной из полезных практик является сочетание Dagster с dbt. DBT применяется для моделирования трансформаций в аналитических слоях, тогда Dagster может управлять оркестрацией полноценных потоков, где dbt-трансформации запускаются как stand-alone шаги внутри конвейера или как отдельные задачи в рамках общего графа. Такой подход позволяет унифицировать данные и логику подготовки в едином оркестраторе, упрощая управление версиями и воспроизводимостью.

Для крупных предприятий полезной становится возможность использования Dagster Cloud - управляемого сервиса для оркестрации конвейеров, который предоставляет дополнительные возможности по управлению окружением, безопасности, масштабированию и совместной работе команд. В рамках Dagster Cloud облегчаются вопросы мониторинга, алертинга и централизованного хранения артефактов исполнения, что существенно ускоряет внедрение и поддержание устойчивости процессов.

Пример интеграционного сценария - использование dbt совместно с Dagster:

from dagster_dbt import dbt_cli_resource

dbt_resource = dbt_cli_resource.configured({
    "dbname": "analytics",
    "schema": "public",
    "project_dir": "/path/to/dbt/project"
})

@op(required_resource_keys={"dbt"})
def run_dbt(context):
    context.resources.dbt.run()

Такой подход позволяет запустить dbt-проекты в рамках Dagster, используя единый контекст куратора конвейера. В дополнение к этому, интеграция с системами мониторинга и логирования позволяет оперативно реагировать на сбои и задержки, а также строить визуализацию lineage между исходными данными и целевыми таблицами.

 

Развертывание и операционная практика: мониторинг, тестирование, повторяемость

Эти аспекты являются неотъемлемой частью устойчивой практики разработки data pipelines. Dagster предоставляет средства для мониторинга выполнения, логирования и аудита, поддерживает тестирование отдельных OPS с помощью готовых паттернов и фреймворков, а также упрощает развёртывание конвейеров в разных окружениях.

  • Мониторинг и observability: Dagit** - веб-интерфейс, который отображает графы, статусы заданий, логи и события выполнения. Dagit позволяет исследовать lineage, запускать повторные запуска и отслеживать зависимые процессы. В продвинутых сценариях Dagster Cloud обеспечивает единый коридор управления, где хранится конфигурация, результаты выполнения и уведомления;
  • Тестирование: unit-тестирование OPS и графов может быть реализовано через паттерны имитации ресурсов и входных данных. Это обеспечивает проверку поведения отдельных узлов и их взаимодействий без запуска полного конвейера;
  • Повторяемость: хранение артефактов исполнения, конфигураций и версий - залог воспроизводимости. В контексте активов это позволяет повторно вычислять данные при изменении исходных данных или логики обработки, а также встраивать управление версиями в линию поставки.

Практические рекомендации по операционной практике:

  • проектируйте конвейеры вокруг ясных контрактов: входы, выходы, необходимые ресурсы и ожидаемые форматы данных;
  • внедряйте сенсоры и расписания для автоматизации реагирования на изменение данных;
  • используйте активы для прозрачности lineage и управления кэшированием;
  • применяйте режимы выполнения и конфигурации, чтобы разделять окружения разработки, тестирования и продакшна;
  • внедряйте тестовый набор OPS и графов для снижения риска при изменениях.
    ## Пример тестовой заготовки для операции
    from dagster import job, op
    
    @op
    def generate_numbers(_):
        return [1, 2, 3]
    
    @op
    def double(_, numbers):
        return [n * 2 for n in numbers]
    
    @job
    def simple_test_job():
        double(generate_numbers())
    

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

     

Key takeaways

  • Dagster строит конвейеры как графы операций, сочетая логику обработки данных и управляемые контексты для ресурсов и конфигураций.
  • Ресурсы, IOManager и активы образуют прочную основу для управления внешними зависимостями, передачи данных и lineage.
  • Конфигурации окружающей среды и режимы выполнения позволяют адаптировать конвейеры под локальные разработки, тестовые стенды и продакшн-среды.
  • Интеграции с DbT, облачными платформами и аналитическими стеками делают Dagster удобной точкой входа для крупных дата-эксплуатаций.
  • Observability через Dagit/Dagit Cloud обеспечивает прозрачность выполнения, мониторинг и аудит.
  • Тестирование OPS и графов упрощает поддержание качества и воспроизводимости решений.
  • Практическая архитектура Dagster должна быть ориентирована на повторяемость, модульность и понятные контракты между операциями и ресурсами.

     

FAQ

  1. Что такое Dagster и чем он отличается от других оркестраторов?

Dagster - это современный оркестратор данных, ориентированный на явную архитектуру пайплайнов, строгую типизацию и богатую observability. В отличие от некоторых решений, Dagster ставит на передний план контракты между операциями, управляемые ресурсы для внешних зависимостей и активы (Assets) для отслеживания происхождения данных и их версий. Это позволяет не только строить конвейеры, но и обеспечивать воспроизводимость, контроль версий и трассируемость.

 

  1. Какие основные концепции следует освоить в первую очередь?

Ключевые концепции - ops (или solids), Graph/Job, Resources, IOManager, Assets и сенсоры/расписания. Понимание различий между графами и задачами, а также того, как ресурсы внедряются в контекст выполнения, позволяет проектировать устойчивые конвейеры и легко масштабировать их.

 

  1. Как устроено управление ресурсами в Dagster?

Ресурсы - это абстракции над внешними системами (БД, очереди, API, облачное хранилище). Они имеют конфигурацию, которая выполняется на этапе инициализации. Ops получают доступ к ресурсам через контекст (context.resources.). Это позволяет централизовать конфигурацию и упростить тестирование.

 

  1. В чем преимущество Asset-ориентированного подхода?

Активы позволяют материализовать данные и отслеживать lineage внутри конвейеров. Это обеспечивает прозрачность происхождения данных, позволяет повторно использовать результаты и упрощает аудит и соответствие требованиям регуляторов. Asset-ориентированный подход особенно полезен в сложных эпохах data governance.

 

  1. Какие сценарии интеграции с аналитическими платформами наиболее распространены?

Наиболее часто встречаются интеграции с dbt для моделирования трансформаций, совместная работа с облачными хранилищами (Snowflake, BigQuery, Redshift), а также интеграции с инструментами мониторинга. Dagster Cloud может быть опцией для крупных организаций, требующих управляемой инфраструктуры и расширенного мониторинга.

 

  1. Какие практики рекомендуется применять для обеспечения воспроизводимости?

Используйте режимы выполнения и конфигурации, фиксируйте версии кода и зависимостей, применяйте Asset-линейджинг и материализации, тестируйте OPS/Graphs изолированно, и храните артефакты исполнения в центральном репозитории.

 

  1. Возможно ли мигрировать существующие пайплайны из другого оркестратора в Dagster?

Да, возможно, но требует анализа контрактов между задачами, внешних зависимостей и данных. Начинать стоит с рефакторинга ключевых конвейеров на базе Dagster-ориентированных концепций: разделение по ресурсам, использование Graph/Job, внедрение IOManager и создание тестовых сценариев.

 

  1. Как обеспечивается observability конвейеров в Dagster?

Dagster предоставляет Dagit - веб-интерфейс для визуализации графов, мониторинга статусов запусков, просмотра логов и событий. Дополнительно возможно подключение внешних инструментов мониторинга и алертинга, чтобы обеспечить оперативное реагирование на инциденты.

 

  1. Какие «быстрые победы» можно получить при внедрении Dagster в существующий дата-ландшафт?
  • вынести доступ к внешним системам в ресурсы;
  • начать с Asset-ориентированного конвейера для критических данных;
  • добавить Dagit для визуального мониторинга;
  • внедрить базовый тестовый набор OPS и графов;
  • соединить Dagster с dbt для унифицированной трансформации данных.

 

← Предыдущая статья
Введение: контекст цифровой трансформации и роль Dagster
Следующая статья →
Архитектура Dagster: принципы и ключевые компоненты

 

Узнать стоимость решенияЗапросить видео презентацию

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • Российский филиал одного их ведущих мировых производителей и дистрибьютеров косметики Estee Lauder Companies Inc. выбрал аналитическую платформу Loginom для предиктивной аналитики продаж как в офлайн-, так и в онлайн-канале.

  • Novikov group – первый российский ресторанный холдинг, основанный в 1991 году. Это команда профессионалов под управлением Аркадия Новикова, реализующая широкий спектр услуг в сфере гостеприимства: от проведения event-мероприятия до управления рестораном, от установления стандартов сервиса до контроля качества готовой продукции, от построения бизнес-плана проекта до реализации франшизы.

  • КАМИ – компания-лидер по поставкам тяжёлых станков в России, занимающаяся продажей и обслуживанием оборудования для обработки металла и дерева, изготовления мебели и не только. На сегодняшний день в компании работают более 1300 человек, запущено 10 обучающих центров, в продаже более 7000 единиц техники. 

  • НПФ «Будущее» — один из крупнейших негосударственных пенсионных фондов России, предоставляющий услуги по пенсионному обеспечению и накоплениям. Фонд активно внедряет цифровые технологии для повышения качества обслуживания клиентов.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.