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 » Развертывание и организация кода: workspace, repository, modes

Развертывание и организация кода: workspace, repository, modes

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

Ключевые идеи главы: прояснение роли workspace и repository в Dagster; стратегическое проектирование режимов для управления ресурсами; принципы организации кода и конфигураций; подходы к CI/CD и интеграциям с аналитическими платформами; практические рекомендации по миграциям и эволюции архитектуры.

  • Архитектура Dagster: как работают workspace, repository и режимы, какие задачи решают на уровне разработки и эксплуатации.
  • Управление ресурсами через режимы: как определить ресурсы, конфигурировать их и адаптировать под разные среды.
  • Организация кода и инфраструктуры: структура файлов, файлы конфигурации, подходы к CI/CD и интеграциям.
  • Взаимодействие с аналитическими платформами: локальные и облачные решения, безопасность и управление секретами.
  • Практики эволюции и миграции: как планировать переходы между средами, версионирование артефактов и минимизацию рисков.

     

 

Архитектура: workspace и repository

 

Что такое workspace и repository

Workspace в Dagster представляет собой контракт между кодом и средой исполнения: он описывает, где находится код ваших репозиториев, как он загружается и какие репозитории доступны для исполнения. Repository, в свою очередь, агрегирует набор локальных пайплайнов, джобов или solid’ов (в зависимости от версии API) и предоставляет единый входной пункт для запуска конвейеров. Разделение на workspace и repository обеспечивает независимость команд, упрощает версионирование и позволяет гибко управлять правами доступа, окружениями и релизами.

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

 

Как Dagster находит код: loads и location

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

  • держать код пайплайнов отдельно от инфраструктуры;
  • подменять источники кода между окружениями (локальный режим, тестовый стенд, продакшн) без изменения бизнес-логики;
  • разворачивать несколько репозиториев в рамках одного workspace.

Практически это означает, что в корневой папке проекта создаётся файл конфигурации workspace, который перечисляет «locations» - пути к python-модулям, файлам или пакетам, где определены репозитории. Каждый репозиторий содержит наборп-пайплайнов (jobs/pipelines), которые может запускать Dagster. Такой подход обеспечивает гибкость внедрения новых пайплайнов и параллельной разработки разных команд без конфликтов.

 

Организация проекта: структура каталогов

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

  • корень проекта
    • workspace.yaml и/или dagster.yaml (конфигурации окружения)
    • repos/
      • team_a_repo/
        • init.py
        • repo.py (или module.py в зависимости от версии)
      • team_b_repo/
        • init.py
        • repo.py
    • libs/ (общие утилиты, коннекторы, общие ресурсы)
    • config/
      • local/
      • staging/
      • prod/
    • tests/

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

 

Практические сценарии использования

  • Локальная разработка: команда загружает свой репозиторий через workspace.yaml и разворачивает локальные пайплайны в Dagit. Изменения проходят проверку на локальном уровне, после чего они отправляются в общий репозиторий.
  • Совместная работа: несколько команд работают с разными репозиториями, но используют общий workspace для тестирования интеграций и совместных пайплайнов.
  • Продакшн-окружение: окружения строятся как конфигурационные наборы (local/staging/prod) с определёнными ресурсами, секрета и параметрами выполнения, чтобы обеспечить воспроизводимость и безопасность.
    ## Пример упрощённого workspace.yaml
    loads:
      - python_module:
          module_name: team_a_repo
          attribute: repo  # точка входа репозитория
    
      - python_module:
          module_name: team_b_repo
          attribute: repo
    
    ## Пример упрощённого репозитория (team_a_repo/repo.py)
    from dagster import repository, pipeline, solid
    
    @solid
    def extract(context):
        ...
    
    @solid
    def transform(context, input_):
        ...
    
    @solid
    def load(context, input_):
        ...
    
    @pipeline
    def sample_pipeline():
        load(transform(extract()))
    
    @repository
    def repo():
        return [sample_pipeline]
    

    Роли режимов: управление ресурсами и конфигурациями

     

Определение модов

Mode в Dagster представляет конфигуратор для запуска пайплайна, который группирует набор ресурсов, среду выполнения (executor), IO-менеджеры и логгеры. Режим задаёт поведение пайплайна под конкретную среду: локальная разработка, тестирование, продакшн или тяжелые вычисления в кластере.

Зачем это нужно: режимы позволяют подменять конфигурацию на уровне ресурсов без изменения логики пайплайна. Например, в локальном режиме можно использовать обычный локальный процессор и локальный доступ к БД, тогда как в продакшене применяются KubernetesRunLauncher и буферы/кеши с более мощными ресурсами.

 

Ресурсы и I/O Managers

Ресурсы определяют внешние зависимости пайплайна: подключения к базам данных, кэширование, аутентификацию к облачным сервисам, очереди сообщений. I/O Managers отвечают за сериализацию и передачу данных между задачами пайплайна. Modes позволяют задать конкретные конфигурации этих компонентов под окружение: для локального окружения - упрощённые ресурсы, для продакшна - более строгое управление секретами, мониторингом и изоляцией.

 

Конфигурации модов

Конфигурации режимов оформляются как словари параметров, передаваемые в ресурсы и менеджеры. В зависимости от версии Dagster конфигурации строятся через YAML, а в коде - через схемы (config_schema) и объекты ModeDefinition. Важной практикой является хранение чувствительных параметров вне кода - через переменные окружения или секрет-менеджеры, что обеспечивает безопасность и упрощает управление секретами.

 

Примеры режимов: local vs prod

  • Local режим: ресурсы** - локальная база данных или эмулятор, включен детализированный логгер и низкие лимиты по памяти. Это ускоряет разработку и тестирование без необходимости обращения к внешним сервисам.
  • Prod режим: ресурсы** - реальные коннекторы к базам данных, секреты под управлением секрет-менеджера, обвязка мониторинга, настройка масштабирования и RBAC. Здесь применяются продвинутые средства оркестрации и возможно подключение к KubernetesRunLauncher, если пайплайны требуют контейнеризированных сред.

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

 

Практические практики

  • Вводите отдельные режимы для каждой среды и явно тестируйте конфигурации между режимами, чтобы исключить «скрытые» зависимости.
  • Используйте секрет-менеджмент и переменные окружения для конфигурации ресурсов.
  • Индустриальные практики: разделение на "local", "staging", "prod" с соответствующими настройками запуска и мониторинга.
    ## Пример упрощённого определения режима в репозитории (Python)
    from dagster import ModeDefinition, resource, pipeline
    
    @resource
    def db_resource(context):
        conn = connect_to_db(context.resource_config["dsn"])
        return conn
    
    prod_mode = ModeDefinition(
        resource_defs={"db": db_resource},
        ## executor, loggers и др. можно задать аналогично
    )
    

    Организация кода и конфигураций: CI/CD и интеграции

     

Файлы конфигурации workspace и dagster.yaml

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

 

Организация репозитория и репозиториев

Разделение на репозитории по командам позволяет избежать конфликтов и ускорить внедрение изменений. В рамках каждого репозитория можно реализовать собственные пайплайны и зависимости, сохраняя общие утилиты в libs/. Это упрощает тестирование и развёртывание, так как изменения в одном репозитории изолированы и не требуют полного согласования со всеми командами.

 

CI/CD и тестирование DAGs

Эффективная практика CI/CD подразумевает:

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

Рекомендовано использовать тестовую матрицу окружений: локальный режим для быстрого цикла, staging для интеграционных тестов и prod для окончательной проверки. Подключение инструментов CI/CD кDagster позволяет автоматизировать загрузку новых артефактов, валидацию конфигураций и безопасную публикацию.

 

Интеграции с аналитическими платформами

Dagster поддерживает интеграцию с рядом аналитических и хранилищ данных. В контексте развертывания и организации кода чаще всего встречаются:

  • Snowflake: коннекторы и конвейеры выгрузки/загрузки, управление секретами через окружение;
  • Databricks: запуск джоб и обработка через Databricks Run Launcher, позволяющий запускать задачи Dagster на Databricks кластерах.

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

 

Практики эксплуатации: rollout и версия артефактов

  • Версионирование: хранение артефактов пайплайна и конфига в системе контроля версий; каждое изменение сопровождается миграционной стратегией.

  • Деплоймент: использование стратегий постепенного развёртывания, Canary-или Blue-Green-деплоймента для режимов.

  • Мониторинг и аудит: детальное логирование запусков, доступ к конфигурациям, трассировка ошибок.

    ## Пример простого workspace.yaml (упрощённый)
    loads:
      - location:
          python_file:
            relative_path: repos/team_a/repo.py
    
    ## Пример минимального репозиторного файла (упрощённо)
    ## repos/team_a/repo.py
    from dagster import repository, pipeline
    
    @pipeline
    def pipeline_a():
        ...
    
    @repository
    def repo():
        return [pipeline_a]
    

    Инфраструктура вычислений и безопасность

  • Распределённые вычисления требуют надёжной изоляции и управления ресурсами. В продакшн-окружении рекомендуется использовать Kubernetes или облачные run-плейсы и строгие политики RBAC.

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

  • Логирование и мониторинг: на уровне режимов настраивайте единообразные логеры и интеграцию с мониторингом (Prometheus, Grafana и т. п.) для прозрачности поведения пайплайнов.

     

Key takeaways

  • Workspace и repository являются основой организации кода Dagster: они обеспечивают модульность, независимость команд и предсказуемость развёртывания.
  • Моды позволяют централизовать конфигурацию ресурсов и окружения, снижая риск различий между локальной разработкой и продакшеном.
  • Структура проекта должна поддерживать явное разделение ответственности между командами и упрощать миграцию между средами.
  • CI/CD и интеграции с аналитическими платформами требуют дисциплины версионирования артефактов и надёжной стратегии секретов.
  • Безопасность и устойчивость достигаются через использование секрет-менеджеров, тестирование режимов на тестовых средах и мониторинг исполнения пайплайнов.
  • Правильная конфигурация рабочего пространства и режимов напрямую влияет на воспроизводимость запусков, эффективность развёртывания и способность команд быстро реагировать на изменения бизнес-требований.
  • Эволюция архитектуры должна сопровождаться планированием миграций, управлением зависимостями и прозрачной коммуникацией между командами.

     

FAQ

  1. Что такое workspace.yaml и чем он полезен?

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

 

  1. Как выбрать подход к организации репозиториев?

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

 

  1. Как связать режимы с окружениями и ресурсами?

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

 

  1. Какие риски возникают при миграции между средами?

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

 

  1. Как тестировать пайплайны Dagster?

Тестирование включает unit-тесты для отдельных solid’ов, интеграционные тесты для пайплайнов с использованием тестовых репозиториев и mock-ресурсов, а также end-to-end тесты в изолированной среде. Важно разделять тесты: быстрые локальные тесты для повседневной проверки и более тяжёлые интеграционные тесты для проверки взаимодействий между репозиториями и режимами.

 

  1. Какие практики применяются для безопасной работы с секретами?

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

 

  1. Как интегрировать Dagster с аналитическими платформами?

Интеграции с Snowflake, Databricks и dbt часто используются для обработки и загрузки данных. В Dagster можно определить ресурсы, подключенные к Snowflake через базовые коннекторы или через Databricks Run Launcher для выполнения джоб. Важно обеспечить согласованность версий коннекторов и корректную настройку окружения, чтобы пайплайны надёжно взаимодействовали с источниками и хранилищами данных.

 

  1. Как управлять версиями кода и конфигураций в Dagster?

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

 

  1. Что делать, если пайплайн требует ресурсы, недоступные локально?

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

 

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

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

 

← Предыдущая статья
Метаданные, lineage и наблюдаемость
Следующая статья →
Инфраструктура вычислений: локальная среда, Kubernetes, Celery и облако

 

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

Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

Задать вопрос

loading...

Решения

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

Клиенты
  • Ручная обработка заявок на займы в МФО ДоброЗайм была малоэффективной и приводила к высоким затратам по ФОТ отдела верификации и андеррайтинга. При этом время обработки заявок было высоким, как и количество ошибок под влиянием человеческого фактора. Дополнительные сложности создавал сложный документооборот, обусловленный неконсолидированной кредитной историей и скоринговой оценкой. Все это суммарно мешало масштабированию бизнеса МФО.

  • Компания "Норникель" - лидер горно-металлургической отрасли в России и мире. Она производит металлы, необходимые для развития экологичной экономики и транспорта.

  • "Уральский банк реконструкции и развития" входит в топ-25 крупнейших банков России и список значимых кредитных организаций на рынке платежных услуг по версии ЦБ РФ.

  • ООО «Ай Пи Ти Групп» (IPT Group) — многопрофильный консалтинговый холдинг, специализирующийся на юридическом и финансовом сопровождении бизнеса. IPT Group занимает высокие позиции в профессиональных рейтингах, входит в ТОП-30 лучших юридических компаний России по версии «Право.ru-300», Global Law Experts и др.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • 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 и политикой конфиденциальности.